PHP و SQL: احسب أو استعلم عن مسافة الدائرة الكبرى بين نقاط خط العرض وخط الطول باستخدام صيغة Haversine

صيغة Haversine - حساب مسافة الدائرة العظمى باستخدام PHP أو MySQL

لقد قمت هذا الشهر بالبرمجة في PHP و MySQL فيما يتعلق بنظم المعلومات الجغرافية. أثناء التجسس حول الشبكة ، واجهت صعوبة في العثور على بعض الحسابات الجغرافية للعثور على المسافة بين موقعين لذلك أردت مشاركتهما هنا.

رحلة خريطة أوروبا مع مسافة دائرة كبيرة

الطريقة البسيطة لحساب المسافة بين نقطتين هي استخدام صيغة فيثاغورس لحساب وتر المثلث (A² + B² = C²). يُعرف هذا باسم المسافة الإقليدية.

هذه بداية مثيرة للاهتمام ولكنها لا تنطبق مع الجغرافيا لأن المسافة بين خطوط الطول والعرض كذلك لا مسافة متساوية بعيدا، بمعزل، على حد. كلما اقتربت من خط الاستواء ، تتباعد خطوط العرض. إذا كنت تستخدم نوعًا من معادلة التثليث البسيطة ، فقد تقيس المسافة بدقة في أحد المواقع وتكون خاطئة بشكل رهيب في الآخر ، بسبب انحناء الأرض.

مسافة الدائرة العظمى

تُعرف الطرق التي يتم قطعها لمسافات طويلة حول الأرض باسم مسافة الدائرة العظمى. هذا هو ... أقصر مسافة بين نقطتين على كرة مختلفة عن النقاط في الخريطة المسطحة. اجمع ذلك مع حقيقة أن خطوط الطول والعرض ليسا متساويين ... ولديك عملية حسابية صعبة.

إليك شرح فيديو رائع لكيفية عمل Great Circles.

صيغة هافيرسين

المسافة باستخدام انحناء الأرض مدمجة في صيغة هافرسين، والذي يستخدم علم المثلثات للسماح بانحناء الأرض. عندما تجد المسافة بين مكانين على الأرض (كما يطير الغراب) ، فإن الخط المستقيم هو في الحقيقة قوس.

هذا ينطبق على الرحلات الجوية - هل سبق لك أن نظرت إلى الخريطة الفعلية للرحلات ولاحظت أنها مقوسة؟ هذا لأنه من الأقصر أن تطير في قوس بين نقطتين من الطيران مباشرة إلى الموقع.

PHP: حساب المسافة بين نقطتي خط العرض وخط الطول

على أي حال ، إليك صيغة PHP لحساب المسافة بين نقطتين (جنبًا إلى جنب مع تحويل الميل مقابل الكيلومتر) مقربًا إلى منزلتين عشريتين.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

SQL: استرداد جميع السجلات ضمن نطاق ما عن طريق حساب المسافة بالأميال باستخدام خط العرض وخط الطول

من الممكن أيضًا استخدام SQL لإجراء عملية حسابية للعثور على جميع السجلات ضمن مسافة معينة. في هذا المثال ، سأقوم بالاستعلام عن MyTable في MySQL للعثور على جميع السجلات التي تقل عن أو تساوي المسافة المتغيرة بالدولار (بالأميال) إلى موقعي عند خط العرض بالدولار وخط الطول بالدولار:

الاستعلام الخاص باسترداد كافة السجلات داخل ملف مسافة بحساب المسافة بالأميال بين نقطتين من خطوط الطول والعرض:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

ستحتاج إلى تخصيص هذا:

  • خط الطول دولار - هذا متغير PHP حيث أمرر خط طول النقطة.
  • خط العرض $ - هذا متغير PHP حيث أمرر خط طول النقطة.
  • مسافة دولار - هذه هي المسافة التي ترغب في العثور على جميع السجلات الأصغر منها أو المساوية لها.
  • جدول - هذا هو الجدول… ستريد استبداله باسم الجدول الخاص بك.
  • خط العرض - هذا هو مجال خط العرض الخاص بك.
  • خط الطول - هذا هو مجال خط الطول الخاص بك.

SQL: استرداد جميع السجلات ضمن نطاق ما عن طريق حساب المسافة بالكيلومترات باستخدام خط العرض وخط الطول

وإليك استعلام SQL باستخدام الكيلومترات في MySQL:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

ستحتاج إلى تخصيص هذا:

  • خط الطول دولار - هذا متغير PHP حيث أمرر خط طول النقطة.
  • خط العرض $ - هذا متغير PHP حيث أمرر خط طول النقطة.
  • مسافة دولار - هذه هي المسافة التي ترغب في العثور على جميع السجلات الأصغر منها أو المساوية لها.
  • جدول - هذا هو الجدول… ستريد استبداله باسم الجدول الخاص بك.
  • خط العرض - هذا هو مجال خط العرض الخاص بك.
  • خط الطول - هذا هو مجال خط الطول الخاص بك.

لقد استخدمت هذا الرمز في منصة رسم خرائط مؤسسية استخدمناها لمتجر بيع بالتجزئة يضم أكثر من 1,000 موقع في جميع أنحاء أمريكا الشمالية وعمل بشكل جميل.

76 تعليقات

  1. 1

    شكرا جزيلا لك على المشاركة. كانت هذه مهمة نسخ ولصق سهلة وتعمل بشكل رائع. لقد وفرت لي الكثير من الوقت.
    لمعلوماتك لأي شخص ينتقل إلى C:
    درجة مزدوجة ثنائية (درجة مزدوجة) {درجة رجوع * (2 / 3.14159265358979323846) ؛ }

  2. 2

    قطعة لطيفة جدًا من النشر - عملت بشكل رائع - كان علي فقط تغيير اسم الطاولة التي تحمل طول خط الطول. إنه يعمل بسرعة كبيرة .. لدي عدد صغير إلى حد معقول من خطوط الطول (<400) ولكني أعتقد أن هذا سيكون مقياسًا جيدًا. موقع جميل أيضًا - لقد أضفته للتو إلى حسابي في del.icio.us وسأعاود التحقق بانتظام.

  3. 4
  4. 5
  5. 8

    أعتقد أن SQL الخاص بك يحتاج إلى بيان.
    بدلاً من WHERE مسافة <= $ مسافة قد تحتاج إليها
    استخدام HAVING Distance <= $ مسافة

    وإلا شكرًا على توفير قدرتي من الوقت والطاقة.

  6. 10
  7. 11
  8. 12

    شكرا جزيلا لتقاسم هذا الرمز. لقد وفر لي الكثير من وقت التطوير. أيضًا ، شكرًا لقرائك على الإشارة إلى أن عبارة HAVING ضرورية لـ MySQL 5.x. مفيد جدا.

  9. 14

    الصيغة أعلاه توفر لي الكثير من الوقت. شكرا جزيلا لك.
    لا بد لي أيضًا من التبديل بين تنسيق NMEA والدرجات. لقد وجدت صيغة على عنوان URL هذا في أسفل الصفحة. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    هل يعرف أي شخص كيفية التحقق من هذا؟

    شكرا!
    هاري

  10. 15
  11. 16

    وجدت أيضًا أن WHERE لم يعمل من أجلي. تم تغييره إلى HAVING وكل شيء يعمل بشكل مثالي. في البداية لم أقرأ التعليقات وأعدت كتابتها باستخدام تحديد متداخل. كلاهما سيعمل بشكل جيد.

  12. 17
  13. 18

    مفيد بشكل لا يصدق ، شكرا جزيلا لك! كنت أواجه بعض المشاكل مع "HAVING" الجديد ، بدلاً من "WHERE" ، ولكن بمجرد أن قرأت التعليقات هنا (بعد حوالي نصف ساعة من صرير أسناني في الإحباط = P) ، عملت بشكل جيد. شكرا لك ^ _ ^

  14. 19
  15. 20

    ضع في اعتبارك أن بيانًا محددًا مثل هذا سيكون مكثفًا للغاية من الناحية الحسابية وبالتالي بطيئًا. إذا كان لديك الكثير من هذه الاستفسارات ، فيمكن أن تعطل الأمور بسرعة كبيرة.

    نهج أقل كثافة هو تشغيل تحديد أول (خام) باستخدام منطقة SQUARE محددة بمسافة محسوبة ، مثل "حدد * من tablename حيث خط العرض بين خط العرض 1 وخط العرض 2 وخط الطول بين lon1 و lon2". خط العرض 1 = خط العرض المستهدف - خط العرض ، خط العرض 2 = خط العرض المستهدف + خط العرض ، مشابه للون. latdiff ~ = المسافة / 111 (للكيلومتر) ، أو المسافة / 69 للأميال نظرًا لأن درجة واحدة من خط العرض تبلغ حوالي 1 كم (اختلاف طفيف لأن الأرض بيضاوية قليلاً ، ولكنها كافية لهذا الغرض). londiff = المسافة / (القيمة المطلقة (cos (deg111rad (خط العرض))) * 2)) - أو 111 للأميال (يمكنك في الواقع أخذ مربع أكبر قليلاً لحساب الاختلافات). ثم خذ نتيجة ذلك وأدخلها في التحديد الشعاعي. فقط لا تنس حساب الإحداثيات خارج الحدود - على سبيل المثال ، نطاق خط الطول المقبول هو -69 إلى +180 ونطاق خط العرض المقبول هو -180 إلى +90 - في حالة تشغيل خط العرض أو المنحدر خارج هذا النطاق . لاحظ أنه في معظم الحالات ، قد لا يكون هذا قابلاً للتطبيق نظرًا لأنه يؤثر فقط على الحسابات عبر خط عبر المحيط الهادئ من القطب إلى القطب ، على الرغم من أنه يتقاطع مع جزء من chukotka وجزء من ألاسكا.

    ما نحققه من خلال هذا هو انخفاض كبير في عدد النقاط التي تقوم بهذا الحساب على أساسها. إذا كان لديك مليون نقطة عالمية في قاعدة البيانات موزعة بالتساوي تقريبًا وتريد البحث في نطاق 100 كيلومتر ، فسيكون البحث الأول (السريع) الخاص بك على مساحة 10000 كيلومتر مربع ومن المحتمل أن ينتج عنه حوالي 20 نتيجة (بناءً على التوزيع المتساوي على مدى تبلغ مساحتها حوالي 500 مليون كيلومتر مربع) ، مما يعني أنك تدير حساب المسافة المعقدة 20 مرة لهذا الاستعلام بدلاً من مليون مرة.

    • 21
      • 22

        نصيحة رائعة! لقد عملت بالفعل مع مطور كتب دالة سحبت المربع الداخلي ثم دالة تكرارية جعلت "مربعات" حول المحيط لتضمين وتستبعد النقاط المتبقية. كانت النتيجة نتيجة سريعة بشكل لا يصدق - يمكنه تقييم ملايين النقاط بالميكروثانية.

        إن مقاربي أعلاه هو بالتأكيد "فج" ولكنه قادر. شكرا لك مرة أخرى!

        • 23

          دوغ،

          لقد كنت أحاول استخدام mysql و php لتقييم ما إذا كانت نقطة العرض الطويلة داخل المضلع. هل تعلم ما إذا كان صديقك المطور قد نشر أي أمثلة على كيفية إنجاز هذه المهمة. أو هل تعرف أي أمثلة جيدة. شكرا مقدما.

  16. 24

    مرحبًا بالجميع ، هذا هو اختبار SQL الخاص بي:

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    ويخبرني Mysql أن المسافة ، غير موجودة كعمود ، يمكنني استخدام الترتيب حسب ، يمكنني القيام بذلك بدون أين ، وهو يعمل ، ولكن ليس معه ...

  17. 26

    هذا شيء عظيم ، لكن كما تطير الطيور. سيكون من الرائع محاولة دمج خرائط Google API لهذا بطريقة ما (ربما باستخدام الطرق وما إلى ذلك) فقط لإعطاء فكرة باستخدام شكل مختلف من وسائل النقل. لا يزال يتعين علي إنشاء وظيفة محاكاة التلدين في PHP والتي ستكون قادرة على تقديم حل فعال لمشكلة البائع المتجول. لكنني أعتقد أنني قد أتمكن من إعادة استخدام بعض التعليمات البرمجية الخاصة بك للقيام بذلك.

  18. 27

    مرحبا دوغلاس،
    شكرا جزيلا على هذا المقال - لقد وفرت لي الكثير من الوقت.
    اعتن بنفسك،
    nimrod اسرائيل

  19. 28

    مادة جيدة! لقد وجدت الكثير من المقالات التي تصف كيفية حساب المسافة بين نقطتين ولكني كنت أبحث حقًا عن مقتطف SQL.

  20. 29
  21. 30
  22. 31
  23. 32
  24. 36

    يومان من البحث للعثور أخيرًا على هذه الصفحة التي تحل مشكلتي. يبدو أنه من الأفضل أن أتخلص من WolframAlpha وأتعلم الرياضيات بشكل أفضل. التغيير من WHERE إلى HAVING لديه البرنامج النصي الخاص بي في حالة جيدة. شكرا لكم

  25. 37
    • 38

      شكرا جورجي. ظللت أحصل على عمود "مسافة" غير موجود. بمجرد أن أقوم بتغيير مكان العمل ، فقد عملت مثل السحر!

  26. 39

    أتمنى أن تكون هذه هي الصفحة الأولى التي وجدتها في هذا. بعد تجربة العديد من الأوامر المختلفة ، كان هذا هو الأمر الوحيد الذي يعمل بشكل صحيح ، ومع الحد الأدنى من التغييرات اللازمة لملاءمة قاعدة البيانات الخاصة بي.
    وبفضل الكثير!

  27. 40

    أتمنى أن تكون هذه هي الصفحة الأولى التي وجدتها في هذا. بعد تجربة العديد من الأوامر المختلفة ، كان هذا هو الأمر الوحيد الذي يعمل بشكل صحيح ، ومع الحد الأدنى من التغييرات اللازمة لملاءمة قاعدة البيانات الخاصة بي.
    وبفضل الكثير!

  28. 41
  29. 42
  30. 43
  31. 45
  32. 46
  33. 47

    أعلم أن هذه الصيغة تعمل ، لكن لا يمكنني معرفة مكان وضع نصف قطر الأرض في الاعتبار. يمكن لأي شخص أن ينير لي من فضلك ؟

  34. 49
  35. 50
  36. 52
  37. 53
  38. 55
  39. 56
  40. 58

    شكرا لنشر هذه المقالة المفيدة ،  
    ولكن لسبب ما أود أن أسأل
    كيفية الحصول على المسافة بين الكورد داخل mysql db والأكواد المدرجة في php بواسطة المستخدم؟
    لمزيد من الوصف الواضح:
    1.يجب على المستخدم إدخال [معرف] لاختيار البيانات المحددة من ديسيبل وكابلات المستخدم نفسه
    2- يحصل ملف php على البيانات الهدف (coords) باستخدام [id] ثم حساب المسافة بين المستخدم والنقطة الهدف

    أو هل يمكنك ببساطة الابتعاد عن الرمز أدناه؟

    $ qry = "SELECT *، (((acos (sin ((". $ latitude. "* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((". خط العرض $. "* pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos ((". $ longitude." - "خط الطول") * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) كمسافة من `MyTable` حيث المسافة> =". $ مسافة. " >>>> هل يمكنني "إبعاد" المسافة من هنا؟
    شكرا لك مرة أخرى،
    تيمي س

  41. 60

    حسنًا ، كل ما جربته لا يعمل. أعني ، ما لدي يعمل ، لكن المسافات بعيدة.

    هل يمكن لأي شخص أن يرى ما هو الخطأ في هذا الرمز؟

    if (isset ($ _ POST ['submit'])) {$ z = $ _POST ['zipcode'] ؛ $ r = $ _POST ['radius'] ؛ صدى "نتائج". $ z؛ $ sql = mysql_query (“حدد DISTINCT m.zipcode، m.MktName، m.LocAddSt، m.LocAddCity، m.LocAddState، m.x1، m.y1، m.verified، z1.lat، z2.lon، z1. city، z1.state FROM mrk m، zip z1، zip z2 حيث m.zipcode = z1.zipcode و z2.zipcode = $ z AND (3963 * acos (truncate (sin (z2.lat / 57.2958) * sin (m. y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 - z2.lon / 57.2958) ، 8))) <= $ r ") أو يموت (mysql_error ())؛ while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""؛ $ store = $ row ['LocAddSt']. ”؛ $ store. = $ row ['LocAddCity']. "،". $ row ['LocAddState']. " ". $ row ['zipcode'] ؛ Latitude1 $ = $ row ['lat'] ؛ خط الطول 1 دولار = صف دولار ['لون'] ؛ Latitude2 $ = $ row ['y1']؛ خط الطول 2 دولار = صف دولار ['x1'] ؛ $ city = $ row ['city'] ؛ $ state = $ row ['state'] ؛ $ dis = getnew ($ latitude1، $ longitude1، $ latitude2، $ longitude2، $ unit = 'Mi') ؛ // $ dis = مسافة ($ lat1 ، $ lon1 ، $ lat2 ، $ lon2) ؛ تم التحقق من $ = $ row ['Verified'] ؛ إذا (تم التحقق من $ == '1') {echo "" ؛ صدى "". $ store. "" ؛ صدى $ dis. " على بعد أميال"؛ صدى صوت ""؛ } else {echo “”. $ store. “؛ صدى $ dis. " على بعد أميال"؛ صدى صوت ""؛ }}}

    وظائفي. كود php
    دالة getnew (خطوط الطول 1 دولار ، خط الطول 1 دولار ، خط العرض 2 دولار ، خط الطول 2 دولار ، الوحدة دولار = 'مي') {$ ثيتا = خط الطول 1 دولار - خط الطول 2 دولار ؛ مسافة دولار = (sin (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ ثيتا)) ) ؛ مسافة دولار = أكوس (مسافة دولار) ؛ مسافة دولار = rad2deg (مسافة دولار) ؛ المسافة بالدولار = المسافة بالدولار * 60 * 1.1515 ؛ التبديل (وحدة $) {case 'Mi': break؛ الحالة "كم": المسافة بالدولار = المسافة بالدولار * 1.609344 ؛ } return (round ($ مسافة، 2))؛ }

    شكرا لكم مقدما

  42. 61
  43. 62

    مرحبًا دوغلاس ، مقالة رائعة. لقد وجدت شرحك للمفاهيم الجغرافية والرمز مثيرًا للاهتمام حقًا. اقتراحي الوحيد هو وضع مسافة بادئة في رمز العرض (مثل Stackoverflow ، على سبيل المثال). أفهم أنك تريد الحفاظ على المساحة ، ولكن التباعد / المسافة البادئة للشفرات التقليدية ستجعل الأمر أسهل كثيرًا بالنسبة لي ، كمبرمج ، في القراءة والتشريح. على أي حال ، هذا شيء صغير. استمروا في العمل العظيم.

    • 63

      شكر! لقد قمت بتعديل المنشور قليلاً ... لكن المعادلات تشغل حيزًا كبيرًا وهي طويلة جدًا لدرجة أنني لست متأكدًا من أنها تساعد كثيرًا.

  44. 64
  45. 65

    هنا أثناء استخدام الوظيفة نحصل على نوع واحد من المسافة .. أثناء استخدام الاستعلام عن نوع آخر من المسافة القادمة

  46. 66
  47. 67
  48. 68
  49. 69
  50. 70

    يبدو أنه من الأسرع (mysql 5.9) استخدام ضعف الصيغة في التحديد والمكان:
    الصيغة $ = "(((acos (sin ((". $ latitude. "* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((". $ latitude. "* pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((". خط الطول بالدولار". - "خط الطول") * باي () / 180)))) * 180 / بي ()) * 60 * 1.1515 * 1.609344) "؛
    $ sql = 'SELECT *،'. صيغة $. ' كمسافة من الجدول حيث ".. صيغة $." <= '. مسافة دولار ؛

  51. 71
  52. 72

    شكرا جزيلا لقص هذه المقالة. انها مفيدة جدا.
    تم إنشاء PHP في البداية كمنصة برمجة نصية بسيطة تسمى "الصفحة الرئيسية الشخصية". في الوقت الحاضر ، تعد PHP (اختصار Hypertext Preprocessor) بديلاً لتقنية Microsoft Active Server Pages (ASP).

    PHP هي لغة مفتوحة المصدر من جانب الخادم تُستخدم لإنشاء صفحات ويب ديناميكية. يمكن تضمينه في HTML. تُستخدم PHP عادةً مع قاعدة بيانات MySQL على خوادم الويب Linux / UNIX. ربما تكون لغة البرمجة النصية الأكثر شيوعًا.

  53. 73

    لقد وجدت الحل أعلاه لا يعمل بشكل صحيح.
    أحتاج إلى التغيير إلى:

    $ qqq = "SELECT *، (((acos (sin ((". $ latitude. "* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((". خط العرض $. "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ خط الطول." - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) كمسافة من `السجل`" ؛

  54. 75
  55. 76

    مرحبًا ، من فضلك سأحتاج حقًا إلى مساعدتك في هذا الشأن.

    لقد قدمت طلب الحصول على خادم الويب الخاص بي http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = خط العرض بالدولار
    -2.23389 = خط الطول بالدولار
    و 20 = المسافة التي أريد استردادها

    ومع ذلك باستخدام الصيغة الخاصة بك ، فإنه يسترد جميع الصفوف الموجودة في db الخاص بي

    النتائج $ = DB :: select (DB :: raw (“SELECT *، (((acos (sin ((". $ latitude. * pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((". $ latitude." * pi () / 180)) * cos ((lat * pi () / 180)) * cos ((". $ longitude." - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) كمسافة من العلامات التي لديها مسافة> = “. $ مسافة)) ؛

    [{"id": 1، "name": "Frankie Johnnie & Luigo Too"، "address": "939 W El Camino Real، Mountain View، CA"، "lat": 37.386337280273، "lng": - 122.08582305908، "مسافة": 16079.294719663}، {"id": 2، "name": "Amici's East Coast Pizzeria"، "address": "790 Castro St، Mountain View، CA"، "lat": 37.387138366699، "lng": -122.08323669434 ، "المسافة": 16079.175940152} ، {"id": 3 ، "name": "Kapp's Pizza Bar & Grill" ، "العنوان": "191 Castro St ، Mountain View ، CA" ، "lat": 37.393886566162 ، "lng": - 122.07891845703 ، "المسافة": 16078.381373826} ، {"id": 4 ، "name": "Round Table Pizza: Mountain View" ، "العنوان": "570 N Shoreline Blvd، Mountain View، CA"، "خط الطول": 37.402652740479 ، "lng": - 122.07935333252 ، "المسافة": 16077.420540582} ، {"id": 5 ، "الاسم": "Tony & Alba's Pizza & Pasta"، "address": "619 Escuela Ave، Mountain عرض ، CA "،" عرض ": 37.394012451172 ،" lng ": - 122.09552764893 ،" مسافة ": 16078.563225154} ، {" id ": 6 ،" name ":" Oregano's Wood-Fired Pizza "،" address ":" 4546 El Camino Real، Los Altos، CA "،" lat ": 37.401725769043،" lng ": - 122.11464691162 ،" المسافة ": 16077.937560795} ، {" معرف ": 7،" name ":" The Bars and grills "،" address ":" 24 Whiteley Street، Manchester "،" lat ": 53.485118865967،" lng ": - 2.1828699111938،" المسافة ": 8038.7620112314}]

    أريد استرداد صفوف بطول 20 ميلاً فقط ، لكنها تجمع كل الصفوف. من فضلك ماذا أفعل خطأ

ما رأيك؟

يستخدم هذا الموقع نظام Akismet لتقليل الرسائل الضارة. تعرف كيف تتم معالجة بيانات تعليقك.