PHP ir SQL: apskaičiuokite arba pateikite užklausą „Didžiojo apskritimo atstumas tarp platumos ir ilgumos taškų“ naudodami „Haversine“ formulę

Haversine Formula - Apskaičiuokite didelį rato atstumą naudodami PHP arba MySQL

Šį mėnesį gana daug programavau PHP ir MySQL, atsižvelgiant į GIS. Šniukštinėdamas aplink tinklą, man iš tikrųjų buvo sunku rasti kai kuriuos iš Geografiniai skaičiavimai norėdamas sužinoti atstumą tarp dviejų vietų, norėjau jomis pasidalinti čia.

Skrydžio žemėlapis Europoje su dideliu atstumu apskritime

Paprastas atstumo tarp dviejų taškų apskaičiavimo būdas - naudojant Pitagoro formulę - apskaičiuoti trikampio hipotenuzą (A² + B² = C²). Tai vadinama Euklido atstumas.

Tai įdomi pradžia, tačiau ji netaikoma geografijai, nes atstumas tarp platumos ir ilgumos linijų yra ne vienodas atstumas atskirai. Priartėjus prie pusiaujo, platumos linijos tolsta viena nuo kitos. Jei naudojate kokią nors paprastą trikampio lygtį, ji gali tiksliai išmatuoti atstumą vienoje vietoje, o kitoje - labai klaidingą dėl Žemės kreivumo.

Didelis rato atstumas

Dideliais atstumais aplink Žemę nuvažiuoti maršrutai yra žinomi kaip Didelis rato atstumas. Tai yra ... trumpiausias atstumas tarp dviejų sferos taškų skiriasi nuo plokščio žemėlapio taškų. Derinkite tai su tuo, kad platumos ir ilgumos linijos nėra vienodos ... ir jums sunku apskaičiuoti.

Štai fantastiškas vaizdo įrašo paaiškinimas, kaip veikia „Didieji ratai“.

Haversine formulė

Atstumas, naudojant Žemės kreivumą, yra įtrauktas į Haversine formulė, kuri naudoja trigonometriją, kad būtų galima atlikti žemės kreivumą. Kai randate atstumą tarp 2 vietų žemėje (kaip paukščiai skraido), tiesė tikrai yra lankas.

Tai taikytina skrendant oru - ar kada nors žiūrėjote į tikrąjį skrydžių žemėlapį ir pastebėjote, kad jie yra išlenkti? Taip yra todėl, kad skristi arka tarp dviejų taškų yra trumpiau, nei tiesiai į vietą.

PHP: Apskaičiuokite atstumą tarp 2 platumos ir ilgumos taškų

Bet kokiu atveju, čia yra PHP formulė, skirta apskaičiuoti atstumą tarp dviejų taškų (kartu su mylia prieš kilometrą), suapvalintą iki dviejų skaičių po kablelio.

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: Visų įrašų nuskaitymas diapazone, apskaičiuojant atstumą myliomis, naudojant platumą ir ilgumą

Taip pat galima naudoti SQL atlikti skaičiavimus, norint rasti visus įrašus per tam tikrą atstumą. Šiame pavyzdyje ketinu pateikti užklausą „MyTable“ sistemoje „MySQL“, norėdamas rasti visus įrašus, kurie yra mažesni arba lygūs kintamam $ atstumui (myliomis) iki mano vietos $ platumoje ir $ ilgumoje:

Užklausa gauti visus įrašus iš konkretaus atstumas apskaičiuojant atstumą myliomis tarp dviejų platumos ir ilgumos taškų yra:

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

Turėsite tai pritaikyti:

  • $ ilgumos - tai yra PHP kintamasis, kur aš praleidžiu taško ilgumą.
  • $ platumos - tai yra PHP kintamasis, kur aš praleidžiu taško ilgumą.
  • $ atstumas - tai atstumas, kurį norėtumėte rasti, kad visi įrašai būtų mažesni ar lygūs.
  • lentelė - tai lentelė ... norėsite ją pakeisti savo lentelės pavadinimu.
  • platuma - tai yra jūsų platumos laukas.
  • ilguma - tai jūsų ilgumos laukas.

SQL: Visų įrašų nuskaitymas diapazone, apskaičiuojant atstumą kilometrais, naudojant platumą ir ilgumą

Štai SQL užklausa, naudojant MySQL kilometrus:

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

Turėsite tai pritaikyti:

  • $ ilgumos - tai yra PHP kintamasis, kur aš praleidžiu taško ilgumą.
  • $ platumos - tai yra PHP kintamasis, kur aš praleidžiu taško ilgumą.
  • $ atstumas - tai atstumas, kurį norėtumėte rasti, kad visi įrašai būtų mažesni ar lygūs.
  • lentelė - tai lentelė ... norėsite ją pakeisti savo lentelės pavadinimu.
  • platuma - tai yra jūsų platumos laukas.
  • ilguma - tai jūsų ilgumos laukas.

Šį kodą panaudojau įmonės žemėlapių platformoje, kurią panaudojome mažmeninės prekybos parduotuvėje, turinčioje daugiau nei 1,000 vietų visoje Šiaurės Amerikoje, ir jis puikiai veikė.

77 komentarai

  1. 1

    Labai ačiū, kad dalinatės. Tai buvo lengvas kopijavimo ir įklijavimo darbas ir puikiai veikia. Jūs sutaupėte man daug laiko.
    FYI visiems, kurie perkelia į C:
    dvigubas deg2radas (dvigubas laipsnis) {grįžimo laipsnis * (3.14159265358979323846 / 180.0); }

  2. 2

    Labai gražus komandiruotės darbas - labai gerai veikė - man reikėjo pakeisti tik lentelės pavadinimą, laikantį lat-long. Tai veikia gana greitai .. Turiu pakankamai nedaug ilgų ilgių (<400), bet manau, kad tai būtų gražiai išplėsta. Puiki svetainė - ką tik įtraukiau ją į savo del.icio.us paskyrą ir reguliariai tikrinsiuosi.

  3. 4
  4. 5
  5. 8

    manau, kad jūsų SQL reikia turėti teiginį.
    vietoj WHERE atstumas <= $ atstumas, kurio jums gali prireikti
    naudokite HAVING distance <= $ distance

    kitaip ačiū, kad sutaupei krūvą laiko ir energijos.

  6. 10
  7. 11
  8. 12
  9. 14
  10. 15
  11. 16

    Taip pat radau, kad WHERE man netiko. Pakeitė jį į HAVING ir viskas veikia puikiai. Iš pradžių neperskaičiau komentarų ir perrašiau juos naudodamas įdėtą pasirinkimą. Abu veiks puikiai.

  12. 17
  13. 18

    Nepaprastai naudinga, labai ačiū! Aš turėjau tam tikrų problemų dėl naujojo „HAVING“, o ne „WHERE“, tačiau kartą perskaičiusi čia komentarus (po maždaug pusvalandžio nusivylusi dantimis sukrėtusi = P), man tai gerai pavyko. Ačiū ^ _ ^

  14. 19
  15. 20

    Atminkite, kad toks pasirinktas teiginys bus labai intensyvus skaičiavimais ir todėl lėtas. Jei turite daug tokių užklausų, tai gana greitai gali užklupti.

    Kur kas mažiau intensyvus metodas yra atlikti pirmąjį (neapdorotą) pasirinkimą naudojant kvadrato plotą, apibrėžtą apskaičiuotu atstumu, ty „pasirinkti * iš lentelės pavadinimo, kur platuma tarp lat1 ir lat2 ir ilguma tarp lon1 ir lon2“. lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, panašus į lon. latdiff ~ = atstumas / 111 (km) arba atstumas / 69 mylių, nes 1 platumos laipsnis yra ~ 111 km (nedidelis skirtumas, nes žemė yra šiek tiek ovali, bet šiam tikslui pakanka). londiff = atstumas / (abs (cos (deg2rad (platuma)) * 111)) - arba 69 mylių (iš tikrųjų galite paimti šiek tiek didesnį kvadratą, kad būtų atsižvelgta į pokyčius). Tada paimkite to rezultatą ir padėkite jį į radialinį pasirinkimą. Tiesiog nepamirškite atsižvelgti į už ribų esančias koordinates - ty priimtinos ilgumos diapazonas yra nuo -180 iki +180, o priimtinos platumos diapazonas yra nuo -90 iki +90 - jei jūsų latdifas ar londifas eina už šio diapazono ribų . Atkreipkite dėmesį, kad daugeliu atvejų tai gali būti netaikoma, nes tai veikia tik skaičiavimus, einančius per Ramiojo vandenyno liniją nuo ašigalio iki ašigalio, nors ir kertasi dalį chukotkos ir dalį alaskos.

    Tai, ką mes pasiekiame, yra reikšmingas taškų, pagal kuriuos jūs atliekate šį skaičiavimą, skaičiaus sumažėjimas. Jei duomenų bazėje yra milijonas pasaulinių taškų, paskirstytų maždaug tolygiai ir norite ieškoti 100 km atstumu, jūsų pirmoji (greita) paieška yra 10000 kv. M. Ploto ir tikriausiai duos apie 20 rezultatų (remiantis tolygiu paskirstymu per paviršiaus plotas yra apie 500 mln. kv. km), o tai reiškia, kad kompleksinį atstumo skaičiavimą atliksite 20 kartų, o ne milijoną kartų.

    • 21

      Nedidelė klaida pavyzdyje ... tai būtų 50 km (ne 100) atstumu, nes žiūrime į savo ... kvadrato „spindulį“.

      • 22

        Fantastiškas patarimas! Aš iš tikrųjų dirbau su kūrėju, kuris parašė funkciją, kuri ištraukė vidinį kvadratą, o po to - rekursinę funkciją, kuri perimetrą sudarė „kvadratus“, kad būtų įtraukti ir neįtraukti likusieji taškai. Rezultatas buvo neįtikėtinai greitas - jis galėjo įvertinti milijonus taškų mikrosekundėmis.

        Mano požiūris aukščiau tikrai yra „neapdorotas“, bet sugebantis. Ačiū dar kartą!

        • 23

          Dougas,

          Aš bandžiau naudoti „mysql“ ir „php“, norėdamas įvertinti, ar lato ilgio taškas yra daugiakampyje. Ar žinote, ar jūsų draugas kūrėjas paskelbė pavyzdžių, kaip atlikti šią užduotį. Ar žinote gerų pavyzdžių. Ačiū iš anksto.

  16. 24

    Sveiki visi, tai mano bandomasis SQL sakinys:

    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

    ir MySQL man sako, kad atstumas neegzistuoja kaip stulpelis, aš galiu naudoti tvarką pagal, galiu tai padaryti be WHERE, ir tai veikia, bet ne su juo ...

  17. 26

    Tai puiku, tačiau kaip tik paukščiai skrenda. Būtų puiku pabandyti į tai kažkaip įtraukti „Google Maps“ API (galbūt naudodamiesi keliais ir pan.) Tiesiog norėdami pateikti idėją naudodami kitokią transporto formą. Aš vis dar neturiu atlikti imituotos atkaitinimo funkcijos PHP, kuri galėtų pasiūlyti efektyvų keliaujančio pardavėjo problemos sprendimą. Bet manau, kad galėsiu pakartotinai panaudoti tam tikrą jūsų kodą.

  18. 27

    Sveiki, Douglasai
    labai ačiū už šį straipsnį - jūs tiesiog sutaupėte man daug laiko.
    rūpinkis,
    nimrodas @Izraelis

  19. 28

    Geras straipsnis! Radau daug straipsnių, kuriuose aprašyta, kaip apskaičiuoti atstumą tarp dviejų taškų, bet tikrai ieškojau SQL fragmento.

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

    2 dienų tyrimai, kad pagaliau rastų šį puslapį, kuris išspręstų mano problemą. Atrodo, kad geriau išvarysiu savo „WolframAlpha“ ir papildysiu savo matematiką. Pakeitus „WHERE“ į „HAVING“ scenarijus veikia tinkamai. AČIŪ

  25. 37
  26. 39

    Norėčiau, kad tai būtų pirmas mano surastas puslapis. Išbandžius daugybę skirtingų komandų, tai vienintelis veikė tinkamai ir su minimaliais pakeitimais, kad tilptų mano duomenų bazėje.
    Thanks a lot!

  27. 40

    Norėčiau, kad tai būtų pirmas mano surastas puslapis. Išbandžius daugybę skirtingų komandų, tai vienintelis veikė tinkamai ir su minimaliais pakeitimais, kad tilptų mano duomenų bazėje.
    Thanks a lot!

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

    Žinau, kad ši formulė veikia, bet nematau, kur atsižvelgiama į žemės spindulį. Prašau, ar kas nors gali mane apšviesti?

  34. 49
  35. 50
  36. 52
  37. 53

    Aš vis gaunu „Errormessage“: „MySQL“ užklausos nežinomas stulpelis „Atstumas“ į „where clause“.

  38. 55
  39. 56
  40. 58

    ačiū, kad paskelbėte šį naudingą straipsnį,  
    bet kažkodėl norėčiau paklausti
    kaip gauti atstumą tarp „mysql db“ viduje esančių ir vartotojo į PHP įdėtų koordų?
    aiškiau apibūdinti:
    1. vartotojas turi įterpti [id], kad pasirinktų nurodytus duomenis iš db ir paties vartotojo koordinatorių
    2. php failas gauna tikslinius duomenis (koordinates) naudodamas [id] ir apskaičiuoja atstumą tarp vartotojo ir tikslinio taško

    ar galite tiesiog gauti atstumą nuo žemiau esančio kodo?

    $ qry = „SELECT *, (((acos (sin ((„. $ platuma. “* pi () / 180)) * sin ((„ Platuma “* pi () / 180)) + cos ((“. $ platuma. “* pi () / 180)) * cos ((„ Platuma “* pi () / 180)) * cos (((„. $ ilguma. “-„ Ilguma “) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) kaip atstumas nuo „MyTable“ WHERE atstumas> = „. $ Atstumas“. >>>> ar galiu „išimti“ atstumą nuo čia?
    Ačiū dar kartą,
    Timmy S.

    • 59

      nesvarbu, aš supratau, kaip „funkcija“ veikia php
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      labai ačiū!! 

  41. 60

    gerai, viskas, ką bandžiau, neveikia. Noriu pasakyti, kad tai, ką turiu, veikia, bet atstumai yra toli.

    Ar kas nors gali pamatyti, kas negerai su šiuo kodu?

    if (isset ($ _ POST ['pateikta'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['spindulys']; aidas „Rezultatai pagal“. $ z; $ sql = mysql_query („SELECT DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. miestas, z1.state NUO mrk m, zip z1, zip z2 KUR m.zipcode = z1.zipcode AND z2.zipcode = $ z AND (3963 * acos (sutrumpinti (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 ") arba mirti (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ store = $ row ['LocAddSt']. ""; $ store. = $ row ['LocAddCity']. ",„. $ row ['LocAddState']. " „. $ Row ['zipcode']; $ latitude1 = $ eilutė ['lat']; $ longitude1 = $ eilutė ['lon']; $ platuma2 = $ eilutė ['y1']; $ longitude2 = $ eilutė ['x1']; $ city = $ row ['miestas']; $ state = $ row ['valstija']; $ dis = getnew ($ platuma1, $ ilguma1, $ platuma2, $ ilguma2, $ vienetas = 'Mi'); // $ dis = atstumas ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ row ['patikrinta']; if ($ verified == '1') {aidas ""; aidas „”. $ parduotuvė. ””; aidas $ dis. „Mylios (-ų) atstumas“; aidas „“; } dar {aidas “”. $ parduotuvė. ””; aidas $ dis. „Mylios (-ų) atstumas“; aidas „“; }}}

    mano funkcijos.php kodas
    funkcija getnew ($ platuma1, $ ilguma1, $ platuma2, $ ilguma2, $ vienetas = 'Mi') {$ theta = $ ilguma1 - $ ilguma2; $ atstumas = (sin (deg2rad ($ platuma1)) * sin (deg2rad ($ platuma2))) + (cos (deg2rad ($ platuma1)) * cos (deg2rad ($ platuma2)) * cos (deg2rad ($ theta)) ); $ atstumas = acos ($ atstumas); $ atstumas = rad2deg ($ atstumas); $ atstumas = $ atstumas * 60 * 1.1515; jungiklis ($ vienetas) {atvejis 'Mi': pertrauka; atvejis „Km“: $ atstumas = $ atstumas * 1.609344; } grįžimas (turas ($ atstumas, 2)); }

    Iš anksto dėkoju

  42. 61
  43. 62

    Ei Douglas, puikus straipsnis. Man labai įdomu paaiškinti jūsų geografines sąvokas ir kodą. Vienintelis mano pasiūlymas būtų tarpas ir rodomas kodas (pvz., „Stackoverflow“). Suprantu, kad norite išsaugoti erdvę, tačiau įprastas tarpai tarp kodų / įtraukos man, kaip programuotojui, būtų daug lengviau skaityti ir išskaidyti. Šiaip ar taip, tai mažas dalykas. Tęskite puikų darbą.

  44. 64
  45. 65

    čia naudodamiesi su funkcija gauname vieno tipo atstumą .. tuo tarpu naudojant užklausą ateinančio kito tipo atstumas

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

    atrodo greičiau („mysql 5.9“) du kartus naudoti formulę pasirinkime ir kur:
    $ formulė = “(((acos (sin ((“. $ platuma. ”* pi () / 180)) * sin ((„ Platuma “* pi () / 180)) + cos ((„. $ platuma. ”* Pi () / 180)) * cos ((„ Platuma “* pi () / 180)) * cos (((„. $ Ilguma. “-„ Ilguma “) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) “;
    $ sql = 'SELECT *,'. $ formulė. ' kaip atstumas nuo lentelės WHERE '.. $ formulė.' <= '. $ atstumas;

  51. 71
  52. 72

    Labai ačiū už šio straipsnio kirpimą. Tai labai naudinga.
    Iš pradžių PHP buvo sukurta kaip paprasta scenarijaus platforma, pavadinta „Asmeninis pagrindinis puslapis“. Šiais laikais PHP („Hypertext Preprocessor“ trumpinys) yra „Microsoft Active Server Pages“ (ASP) technologijos alternatyva.

    PHP yra atviro kodo serverio kalba, naudojama kuriant dinaminius tinklalapius. Ją galima įterpti į HTML. PHP paprastai naudojamas kartu su „MySQL“ duomenų baze „Linux / UNIX“ žiniatinklio serveriuose. Tai turbūt populiariausia scenarijų kalba.

  53. 73

    Radau, kad aukščiau pateiktas sprendimas neveikia tinkamai.
    Turiu pakeisti:

    $ qqq = „PASIRINKITE *, (((acos (sin ((„. $ platuma. “* pi () / 180)) * sin ((„ latt “* pi () / 180)) + cos ((“. $ platuma. “* pi () / 180)) * cos ((„ latt “* pi () / 180)) * cos ((((”. $ ilguma. “-„ longt “) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) kaip atstumas nuo „registro“ “;

  54. 75
  55. 76

    Sveiki, prašau man tikrai reikės jūsų pagalbos šiuo klausimu.

    Aš pateikiau užklausą į savo interneto serverį http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ platuma
    -2.23389 = $ ilguma
    ir 20 = atstumas, kurį noriu gauti

    Tačiau naudojant jūsų formulę, ji gauna visas mano db eilutes

    $ rezultatai = DB :: select (DB :: raw („SELECT *, (((acos (sin ((„. $ platuma. “* pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((„. $ platuma.“ * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((„. $ ilguma.“ - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) kaip atstumas nuo žymeklių, turinčių atstumą> = “. $ Atstumas));

    [{„Id“: 1, „vardas“: „Frankie Johnnie ir Luigo Too“, „adresas“: „939 W El Camino Real, Mountain View, CA“, „lat“: 37.386337280273, „lng“: - 122.08582305908, ”Distance”: 16079.294719663}, {“id”: 2, “name”: “Amici's East Coast Pizzeria”, “address”: ”790 Castro St, Mountain View, CA”, “lat”: 37.387138366699, “lng”: -122.08323669434, „distance“: 16079.175940152}, {„id“: 3, „name“: „Kapp's Pizza Bar & Grill“, „address“: „191 Castro St, Mountain View, CA“, „lat“: 37.393886566162, ”Lng”: - 122.07891845703, “distance”: 16078.381373826}, {“id”: 4, “name”: “Round Table Pizza: Mountain View”, “address”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, “distance”: 16077.420540582}, {“id”: 5, “name”: “Tony & Alba's Pizza & Pasta”, “address”: ”619 Escuela Ave, Mountain View, CA “,„ lat “: 37.394012451172,„ lng “: - 122.09552764893,„ distance “: 16078.563225154}, {„ id “: 6,„ name “:„ Oregano's Wood-Fired Pizza “,„ address “:” 4546 „El Camino Real“, Los Altas, Kalifornija “,„ lat “: 37.401725769043,„ lng “: - 122.11464691162,„ atstumas “: 16077.937560795}, {“ id “: 7,„ name “:„ Barai ir grotelės “,„ adresas “:„ 24 Whiteley Street, Mančesteris “,„ lat “: 53.485118865967,„ lng “: - 2.1828699111938,„ distance “: 8038.7620112314}]

    Noriu gauti tik eilutes su 20 mylių, bet tai atneša visas eilutes. Prašau ką aš darau ne taip

  56. 77

    Aš ieškau panašios užklausos, bet šiek tiek patobulinau - trumpai tariant, tai reikia sugrupuoti visas koordinates, esančias 2 mylių atstumu nuo kiekvienos koordinatės, ir tada suskaičiuoti, kiek kiekvienos grupės koordinačių, ir išvesti tik vieną grupę, kuri turi daugiausiai koordinačių - net jei tarp grupių, kuriose yra daugiausiai koordinačių, turite daugiau nei vieną grupę - tiesiog išveskite atsitiktinę grupę iš grupių, turinčių tą patį didžiausią skaičių -

Ką manote?

Ši svetainė naudoja "Akismet", kad sumažintų šlamštą. Sužinokite, kaip apdorojamas jūsų komentaras.