PHP və SQL: The Haversine Formulu ilə Enlem və Boylam nöqtələri arasındakı böyük dairə məsafəsini hesablayın və ya soruşun.

Haversine Formula - PHP və ya MySQL ilə böyük dairə məsafəsini hesablayın

Bu ay GIS ilə bağlı PHP və MySQL-də bir az proqram hazırladım. Şəbəkəni gözdən qaçırarkən, bəzilərini tapmaqda çətinlik çəkdim Coğrafi hesablamalar iki yer arasındakı məsafəni tapmaq üçün onları burada bölüşmək istədim.

Böyük dairə məsafəsi ilə Avropaya uçuş xəritəsi

İki nöqtə arasındakı məsafəni hesablamağın sadə yolu üçbucağın (A² + B² = C²) hipotenusunu hesablamaq üçün Pifaqor düsturundan istifadə etməkdir. Bu kimi tanınır Evklid məsafəsi.

Bu maraqlı bir başlanğıcdır, ancaq coğrafiya ilə tətbiq olunmur, çünki enlem və boylam xətləri arasındakı məsafə bərabər məsafə deyil ayrı. Ekvatora yaxınlaşdıqca enlik xətləri bir-birindən uzaqlaşır. Bir növ sadə üçbucaq tənliyindən istifadə edirsinizsə, Yerin əyriliyi səbəbi ilə bir yerdə məsafəni dəqiq, digərində olduqca səhv ölçə bilər.

Böyük dairə məsafəsi

Yer kürəsi ətrafında uzun məsafələrə gedən marşrutlar Böyük dairə məsafəsi. Yəni ... kürədəki iki nöqtə arasındakı ən qısa məsafə düz xəritədəki nöqtələrdən fərqlidir. Onu enlem və boylam xətlərinin eyni məsafədə olmaması ilə birləşdirin ... və çətin bir hesablama apardınız.

Budur Böyük Dairələrin necə işlədiyini göstərən fantastik video izahatı.

Haversine Formulu

Yerin əyriliyindən istifadə olunan məsafə Haversin qarışığı, yerin əyriliyinə imkan vermək üçün trigonometriyadan istifadə edir. Yer üzündə 2 yer arasındakı məsafəni tapdığınız zaman (qarğa uçduğu kimi), düz bir xətt həqiqətən bir qövsdür.

Bu hava uçuşlarında tətbiq olunur - heç uçuşların həqiqi xəritəsinə baxmısınızmı və onların tağlı olduğuna diqqət yetirmisiniz? Bunun səbəbi iki nöqtə arasındakı bir tağda uçmaq birbaşa yerə deyil, daha qısa olmasıdır.

PHP: Enlem və Boylam 2 nöqtəsi arasındakı məsafəni hesablayın

Hər halda, burada iki nöqtə arasındakı məsafəni (Mil və Kilometr çevrilmə ilə birlikdə) hesablamaq üçün PHP formulu.

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: Genişlik və Boylam istifadə edərək Millərdəki məsafəni hesablayaraq bir aralıqdakı bütün qeydləri əldə etmək

Bütün qeydləri müəyyən bir məsafədə tapmaq üçün hesablama aparmaq üçün SQL istifadə etmək də mümkündür. Bu nümunədə MyTQL-də dəyişmədən az olan və ya bərabər olan $ məsafəni (Mil-də) yerləşməyimə $ enlik və $ uzunluqda olan bütün qeydləri tapmaq üçün MySQL-də sorğu göndərəcəyəm:

Bütün qeydləri konkret daxilində almaq üçün sorğu məsafə enlem ve boylam iki nöqtəsi arasındakı məsafəni hesablayaraq bunlardır:

$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."

Bunu fərdiləşdirməlisiniz:

  • uzunluq - bu nöqtənin uzunluğunu keçdiyim bir PHP dəyişənidir.
  • $ enlem - bu nöqtənin uzunluğunu keçdiyim bir PHP dəyişənidir.
  • $ məsafə - bütün qeydləri daha az və ya bərabər tapmaq istədiyiniz məsafə.
  • masa - bu cədvəl ... bunu masa adınızla əvəz etmək istərdiniz.
  • Enlem - bu sizin enliyinizin sahəsi.
  • uzunluq - bu sənin boyunun sahəsidir.

SQL: Enlem və Boylam istifadə edərək Kilometrlərdə məsafəni hesablayaraq bir aralıdakı bütün qeydləri əldə etmək

Və MySQL-də kilometrlərdən istifadə edən SQL sorğusu:

$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."

Bunu fərdiləşdirməlisiniz:

  • uzunluq - bu nöqtənin uzunluğunu keçdiyim bir PHP dəyişənidir.
  • $ enlem - bu nöqtənin uzunluğunu keçdiyim bir PHP dəyişənidir.
  • $ məsafə - bütün qeydləri daha az və ya bərabər tapmaq istədiyiniz məsafə.
  • masa - bu cədvəl ... bunu masa adınızla əvəz etmək istərdiniz.
  • Enlem - bu sizin enliyinizin sahəsi.
  • uzunluq - bu sənin boyunun sahəsidir.

Bu kodu Şimali Amerika daxilində 1,000-dən çox yeri olan pərakəndə mağaza üçün istifadə etdiyimiz bir müəssisə xəritələşdirmə platformasında istifadə etdim və çox yaxşı işlədi.

76 Şərhlər

  1. 1

    Paylaşdığınız üçün çox sağ olun. Bu asan bir kopyalamaq və yapışdırmaq işi idi və çox yaxşı işləyir. Məni çox vaxt xilas etdin.
    C-yə köçürən hər kəs üçün məlumat:
    ikiqat deg2rad (ikiqat deg) {qayıt deg * (3.14159265358979323846 / 180.0); }

  2. 2

    Çox gözəl yazı parçası - çox gözəl işlədi - masanın adını yalnız lat uzunluğunu tutan dəyişdirməli oldum. Olduqca sürətli işləyir. Məndə çox az sayda lat var (<400), amma bunun gözəl miqyas alacağını düşünürəm. Gözəl sayt da var - onu del.icio.us hesabıma yenicə əlavə etdim və mütəmadi olaraq yoxlayacağam.

  3. 4
  4. 5

    Bütün günü məsafə hesablamalarını axtardım və sql bəyanatına necə qoyulacağına dair nümunə verdiyiniz üçün minnətdarlıq alqoritmini tapdım. Təşəkkür edirəm və salamlayıram Daniel

  5. 8

    Hesab edirəm ki, SQL-nin bir ifadəyə ehtiyacı var.
    WHERE məsafəsi əvəzinə <= $ məsafəsi lazım ola bilər
    HAVING məsafədən istifadə edin = = məsafə

    əks halda mənə bir dəstə vaxt və enerji qənaət etdiyinə görə təşəkkür edirəm.

  6. 10
  7. 11
  8. 12

    Bu kodu paylaşdığınız üçün çox sağ olun. Mənə çox inkişaf vaxtı qazandırdı. Ayrıca, MySQL 5.x üçün HAVING ifadəsinin lazım olduğunu göstərdiyinə görə oxucularınıza təşəkkür edirəm. Çox faydalıdır.

  9. 14
  10. 15

    , Hello

    Başqa bir sual. Aşağıdakı kimi NMEA simləri üçün bir düstur varmı?

    1342.7500, N, 10052.2287, E

    $GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B

    Thanks,
    Harry

  11. 16

    Həm də HARADA mənim üçün işləmədiyini gördüm. HAVING olaraq dəyişdirildi və hər şey mükəmməl işləyir. Əvvəlcə şərhləri oxumadım və içəridəki seçimdən istifadə edərək yenidən yazdım. Hər ikisi də yaxşı işləyəcək.

  12. 17
  13. 18

    İnanılmaz dərəcədə faydalı, çox sağ olun! "HARADA" deyil, yeni "HAVING" ilə bağlı bəzi problemlər yaşadım, ancaq bir dəfə buradakı şərhləri oxudum (təxminən yarım saat əsəbləşərək dişlərimi dişlədikdən sonra = P), işimi yaxşı gördüm. Təşəkkür edirəm ^ _ ^

  14. 19
  15. 20

    Unutmayın ki, bu kimi seçilmiş bir bəyanat çox hesablama baxımından gərgin və dolayısı ilə ləng olacaqdır. Bu sorğuların çoxu varsa, işləri tez bir zamanda həll edə bilər.

    Daha az gərgin bir yanaşma, ilk (xam) seçimi hesablanmış bir məsafə ilə təyin olunmuş KARADENİŞ sahəsindən istifadə etməkdir, yəni “lat1 ilə lat2 arasında enlik və lon1 ilə lon2 arasında enlik olduğu tablename-dən * seçin”. lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, lon ilə oxşar. latdiff ~ = məsafə / 111 (km üçün) və ya 69 enlik dərəcəsindən bəri millər üçün məsafə / 1 ~ 111 km (yer biraz oval olduğundan cüzi dəyişiklik, lakin bu məqsəd üçün kifayətdir). londiff = məsafə / (abs (cos (deg2rad (enlem)) * 111)) - ya da mil üçün 69 (varyasyonları nəzərə almaq üçün bir az daha böyük bir kvadrat ala bilərsiniz). Sonra bunun nəticəsini götürün və radial seçimə verin. Yalnız sərhəd xaricindəki koordinatları hesab etməyi unutmayın - yəni qəbul edilə bilən uzunluq məsafəsi -180 ilə +180 arasındadır və qəbul edilə bilən enli -90 ilə +90 arasındadır. . Diqqət yetirin ki, əksər hallarda bu tətbiq oluna bilməz, çünki bu, yalnız çukotka ilə Alyaskanın bir hissəsini kəsişməsinə baxmayaraq, yalnız Pasifik okeanından qütbdən qütbə keçən bir xətt üzərindəki hesablamalara təsir göstərir.

    Bununla həyata keçirdiyimiz şey, bu hesablamanı apardığınız nöqtələrin sayında əhəmiyyətli bir azalma. Verilənlər bazasında təxminən bərabər paylanmış bir milyon qlobal xalınız varsa və 100 km aralığında axtarış aparmaq istəyirsinizsə, o zaman ilk (sürətli) axtarışınız 10000 kv km ərazidir və ehtimal ki, təxminən 20 nəticə verəcəkdir. səth sahəsi təxminən 500M kv km), yəni bu mürəkkəb məsafə hesablamasını bir milyon dəfə deyil, 20 dəfə apardığınız deməkdir.

    • 21

      Nümunədəki kiçik səhv ... kvadratımızın “radiusuna” baxdığımız üçün 50 km (100 deyil) məsafədə olardı.

      • 22

        Fantastik məsləhət! Əslində daxili kvadratı çəkən bir funksiya yazan və sonra qalan nöqtələri daxil etmək və xaric etmək üçün perimetri ətrafında 'kvadratlar' düzəldən bir rekursiv funksiya yazan bir geliştirici ilə işlədim. Nəticə inanılmaz dərəcədə sürətli bir nəticə oldu - milyonlarla nöqtəni mikrosaniyələrdə qiymətləndirə bildi.

        Yuxarıdakı yanaşmam qətiliklə 'xam' amma bacarıqlıdır. Yenidən Təşəkkürlər!

        • 23

          Doug,

          Lat uzun nöqtəsinin çoxbucaqlı olub olmadığını qiymətləndirmək üçün mysql və php istifadə etməyə çalışdım. Geliştirici dostunuzun bu vəzifəni necə yerinə yetirəcəyinə dair bir nümunə dərc edib etmədiyini bilirsinizmi. Yoxsa yaxşı bir nümunə bilirsinizmi. Əvvəlcədən təşəkkür edirəm.

  16. 24

    Hər kəsə salam, bu mənim test SQL açıqlamam:

    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

    və Mysql mənə məsafəni izah edir, sütun kimi mövcud deyil, sifariş istifadə edə bilərəm, haradasa edə bilərəm və işləyir, amma onunla deyil ...

  17. 26

    Bu çox yaxşıdır, ancaq quşların uçduğu kimi. Google maps API'sini buna bir şəkildə daxil etmək (bəlkə yollardan istifadə etmək və s.) Yalnız başqa bir nəqliyyat formasından istifadə edərək fikir vermək üçün çox yaxşı olardı. Hələ də PHP-də səyyar satıcı probleminə təsirli bir həll təklif edə biləcək süni bir tavlama funksiyası etməmişəm. Ancaq düşünürəm ki, bunun üçün bəzi kodlarınızı yenidən istifadə edə bilərəm.

  18. 27

    Salam Douglas,
    bu yazı üçün çox sağolun - məni çox vaxt qurtardınız.
    özündən müğayət ol,
    nimrod @israel

  19. 28

    Yaxşı məqalə! İki nöqtə arasındakı məsafənin necə hesablanacağını izah edən bir çox məqalə tapdım, amma həqiqətən SQL parçasını axtarırdım.

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

    Problemimi həll edən bu səhifəni tapmaq üçün 2 günlük araşdırma. Deyəsən WolframAlpha-nı sındırıb riyaziyyatımı təmizləməyim daha yaxşı olar. WHERE-dən HAVING-ə dəyişiklik mənim skriptimi işlək vəziyyətdədir. ÇOX SAĞ OL

  25. 37
    • 38

      Təşəkkür edirəm Georgi. 'Məsafə' sütunu tapılmadı. Bir dəfə HARADADA OLMAĞI dəyişirəm, cazibədarlıq kimi işləyirdi!

  26. 39

    Kaş ki, bu barədə tapdığım ilk səhifə olsaydı. Bir çox fərqli əmrləri sınadıqdan sonra bu düzgün işləyən yeganə iş idi və minimal dəyişikliklərlə öz verilənlər bazasına uyğun olmaq lazım idi.
    Thanks a lot!

  27. 40

    Kaş ki, bu barədə tapdığım ilk səhifə olsaydı. Bir çox fərqli əmrləri sınadıqdan sonra bu düzgün işləyən yeganə iş idi və minimal dəyişikliklərlə öz verilənlər bazasına uyğun olmaq lazım idi.
    Thanks a lot!

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

    Bu formulun işlədiyini bilirəm, amma yerin radiusunun harada nəzərə alındığını görə bilmirəm. Xahiş edirəm kimsə məni maarifləndirə bilərmi?

  34. 49
  35. 50
  36. 52

    Təşəkkür edirəm Douglas, SQL sorğusu tam olaraq ehtiyac duyduğum şeydir və bunu özüm yazmalı olduğumu düşünürdüm. Məni bəlkə də bir neçə saatlıq enlem boyu öyrənmə əyrisindən qurtardın!

  37. 53
  38. 55
  39. 56
  40. 58

    bu faydalı məqaləni göndərdiyiniz üçün təşəkkür edirəm,  
    amma nədənsə soruşmaq istərdim
    mysql db daxilindəki koordinatlar və istifadəçi tərəfindən php-ə daxil edilmiş koordinatlar arasındakı məsafəni necə əldə etmək olar?
    daha aydın təsvir etmək üçün:
    1. istifadəçi db və istifadəçinin öz koordinatlarından müəyyən edilmiş məlumatları seçmək üçün [id] əlavə etməlidir
    2. php faylı [id] istifadə edərək hədəf məlumatlarını (koordinatları) alır və sonra istifadəçi ilə hədəf nöqtəsi arasındakı məsafəni hesablayır

    və ya sadəcə aşağıdakı koddan məsafə əldə edə bilərsiniz?

    $ qry = “SEÇME *, (((acos (sin ((.. enlik.” * pi () / 180)) * sin ((`Latitude` * pi () / 180)) + cos ((“. $ enlem. ”* pi () / 180)) * cos ((` Enlem '* pi () / 180)) * cos (((". $ Boylam." - `Boylam') * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) məsafəsi məsafədən 'MyTable` harada məsafə> = “. $ Məsafə.” >>>> buradan məsafəni “çıxara” bilərəmmi?
    yenidən Təşəkkürlər,
    Timmy S

    • 59

      heç düşünməyin, "funksiyanın" php-də necə işlədiyini anladım
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      çox təşəkkür edirəm !! 

  41. 60

    tamam, çalışdığım hər şey işləmir. Demək istədiyim iş var, amma məsafələr çox uzaqdır.

    Bəlkə kimsə bu kodun səhv olduğunu görə bilərmi?

    əgər (isset ($ _ POST ['təqdim' '))) {$ z = $ _POST [' poçt kodu ']; $ r = $ _POST ['radius']; echo ““ üçün nəticələr. $ z; $ sql = mysql_query (“SEÇİN DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. şəhər, z1.state mrk m, zip z1, zip z2 HARADA m.zipcode = z1.zipcode AND 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 ") or die (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ store = $ sıra ['LocAddSt']. ””; $ store. = $ row ['LocAddCity']. ",". $ row ['LocAddState']. " “. $ Sıra ['poçt kodu']; $ Enlem1 = $ sıra ['lat']; $ longitude1 = $ row ['lon']; $ Enlem2 = $ sıra ['y1']; $ longitude2 = $ row ['x1']; $ city = $ row ['city']; $ state = $ row ['state']; $ dis = getnew ($ enlem1, $ uzunluq1, $ enlem2, $ uzunluq2, $ unit = 'Mi'); // $ dis = məsafə ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ row ['doğrulandı']; əgər ($ verified == '1') {echo “”; echo “”. $ store. ””; echo $ dis. " kilometrlərlə uzaqda"; echo “”; } başqa {echo “”. $ mağaza. ””; echo $ dis. " kilometrlərlə uzaqda"; echo “”; }}}

    mənim funksiyalarım.php kodu
    function getnew ($ enlem1, $ uzunluq1, $ enlem2, $ uzunluq2, $ vahid = 'Mi') {$ theta = $ enlem1 - $ uzunluq2; $ məsafə = (sin (deg2rad ($ enlem1)) * sin (deg2rad ($ enlem2))) + (cos (deg2rad ($ enlem1))) * cos (deg2rad ($ enlem2)) * cos (deg2rad ($ theta)) ); $ məsafə = acos ($ məsafə); $ məsafə = rad2deg ($ məsafə); $ məsafə = $ məsafə * 60 * 1.1515; switch ($ unit) {case 'Mi': break; hal 'Km': $ məsafə = $ məsafə * 1.609344; } qayıt (dəyirmi ($ məsafə, 2)); }

    Əvvəlcədən təşəkkür edirik

  42. 61
  43. 62

    Salam Douglas, əla məqalə. Coğrafi anlayışlar və kod barədə izahınızı həqiqətən maraqlı hesab etdim. Yeganə təklifim ekran üçün kodu boşaltmaq və girinti etmək olar (məsələn, Stackoverflow kimi). Yer qorumaq istədiyinizi başa düşürəm, amma şərti kod aralığı / girinti mənim üçün bir proqramçı kimi oxumağı və parçalamağı çox asanlaşdıracaqdı. Hər halda, bu kiçik bir şeydir. Böyük işi davam etdirin.

  44. 64
  45. 65

    burada funksiya ilə istifadə edərkən bir məsafə növü əldə edirik .. sorğu istifadə edərkən gələn digər məsafə növünü

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

    Seçimdə iki dəfə düsturdan istifadə etmək daha sürətli görünür (mysql 5.9) və burada:
    $ formula = “(((acos (sin ((“. $ enlem. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((“. $ enlem. ”* Pi () / 180)) * cos ((` Enlem '* pi () / 180)) * cos (((". $ Boylam." - `Boylam') * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SEÇİN *,'. $ formula. ' məsafədən HARADA cədvəldən məsafədə '.. $ düsturu.' <= '. $ məsafə;

  51. 71
  52. 72

    Bu məqaləni kəsdiyiniz üçün çox sağ olun. Çox faydalıdır.
    PHP əvvəlcə “Şəxsi Əsas Səhifə” adlı sadə bir skript platforması kimi yaradılmışdır. Hal-hazırda PHP (Hypertext Preprocessor üçün qısadır) Microsoft-un Active Server Pages (ASP) texnologiyasının alternatividir.

    PHP, dinamik veb səhifələr yaratmaq üçün istifadə olunan açıq mənbə server tərəfindəki bir dildir. HTML-ə yerləşdirilə bilər. PHP ümumiyyətlə Linux / UNIX veb serverlərindəki MySQL verilənlər bazası ilə birlikdə istifadə olunur. Yəqin ki, ən populyar ssenari dilidir.

  53. 73

    Yuxarıda həll yolunun düzgün işləmədiyini gördüm.
    Dəyişməliyəm:

    $ qqq = “SEÇİN *, (((acos (sin ((.. $ Enlem.” * pi () / 180)) * sin ((`latt` * pi () / 180)) + cos ((”. $ enlem. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((”. $ Boylam.“ - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) məsafəsi olaraq `qeyd`“;

  54. 75

    təşəkkür edirəm cənab mükəmməl bir şəkildə sarsıdır .. amma ondalık nöqtəsiz çıxmaq istəsən bir sualım var, onda nə edə bilərəm ..?

    Qabaqcadan təşəkkür edirik.

  55. 76

    Salam, xahiş edirəm bu barədə köməyinizə həqiqətən ehtiyacım olacaq.

    Veb-serverimə müraciət etmək üçün müraciət etdim http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = enlem
    -2.23389 = uzunluq
    və 20 = almaq istədiyim məsafə

    Ancaq səni istifadə edərək, db-dəki bütün satırları alır

    $ results = DB :: select (DB :: raw (“SELECT *, (((acos (sin ((.. $ Enlem.” * pi () / 180)) * sin ((lat * pi () / 180) )) + cos ((“. $ enlem.” * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((“. $ Boylam.” - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) məsafəsi olan məsafədən HAVING məsafəsi> = “. $ Məsafəsi));

    [{"İd": 1, "ad": "Frankie Johnnie & Luigo Too", "adres": "939 W El Camino Real, Mountain View, CA", "lat": 37.386337280273, "lng": - 122.08582305908, ”Mesafe”: 16079.294719663}, {“id”: 2, “name”: “Amici's East Coast Pizzeria”, ”address”: ”790 Castro St, Mountain View, CA”, ”lat”: 37.387138366699, ”lng”: -122.08323669434, ”məsafə”: 16079.175940152}, {“id”: 3, “name”: “Kapp's Pizza Bar & Grill”, “address”: ”191 Castro St, Mountain View, CA”, ”lat”: 37.393886566162, ”Lng”: - 122.07891845703, ”məsafə”: 16078.381373826}, {“id”: 4, “name”: “Round Table Pizza: Mountain View”, “address”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, ”məsafə”: 16077.420540582}, {“id”: 5, “name”: “Tony & Alba's Pizza & Pasta”, ”adres”: ”619 Escuela prospekti, dağ Görünüş, CA ”,” lat ”: 37.394012451172,” lng ”: - 122.09552764893,” məsafə ”: 16078.563225154}, {“ id ”: 6,“ name ”:” Oregano's Wood-Fired Pizza ”,“ address ”:” 4546 El Camino Real, Los Altos, CA ”,” lat ”: 37.401725769043,” lng ”: - 122.11464691162,” məsafə ”: 16077.937560795}, {“ id ": 7," ad ":" Çubuqlar və ızgaralar "," adres ":" 24 Whiteley Street, Manchester "," lat ": 53.485118865967," lng ": - 2.1828699111938," mesafe ": 8038.7620112314}]

    20 mil məsafədə yalnız satır almaq istəyirəm, amma bütün satırları gətirir. Xahiş edirəm nəyi səhv edirəm

Siz nə düşünürsünüz?

Bu sayt spam azaldılması üçün Akismet istifadə edir. Yorumunuzun necə işləndiyini öyrənin.