CRM ir duomenų platformos„Analytics“ ir testavimasrinkodaros įrankiai

Apskaičiuokite didžiojo apskritimo atstumą tarp platumos ir ilgumos taškų arba pateikite užklausą naudodami Haversino formulę (PHP, Python, MySQL, MSSQL pavyzdžiai)

Šį 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 vienodi atstumai 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ų taškų sferoje skiriasi nuo taškų plokščiame žemėlapyje. Sujunkite tai su tuo, kad platumos ir ilgumos linijos nėra vienodo atstumo... ir jūs turite sudėtingą skaičiavimą.

Š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ų

Štai PHP formulė, skirta apskaičiuoti atstumą tarp dviejų taškų (kartu su mylios ir kilometro konvertavimu), suapvalinta 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)); 
}

Kintamieji yra:

  • $platuma1 – jūsų pirmosios vietos platumos kintamasis.
  • $ilguma1 – pirmosios vietos ilgumos kintamasis
  • $platuma2 – antrosios vietos platumos kintamasis.
  • $ilguma2 – antrosios vietos ilgumos kintamasis.
  • $ vienetas – numatytoji būtybė mylių. Tai gali būti atnaujinta arba perduodama kaip kilometrų.

Python: apskaičiuokite atstumą tarp 2 platumos ir ilgumos taškų

Bet kokiu atveju, čia yra Python formulė, skirta apskaičiuoti atstumą tarp dviejų taškų (kartu su mylios ir kilometro konvertavimu), suapvalinta iki dviejų skaičių po kablelio. Nuopelnas mano sūnui Billui Karrui, kuris yra duomenų mokslininkas OpenINSIGHTS, už kodą.

from numpy import sin, cos, arccos, pi, round

def rad2deg(radians):
    degrees = radians * 180 / pi
    return degrees

def deg2rad(degrees):
    radians = degrees * pi / 180
    return radians

def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
    
    theta = longitude1 - longitude2
    
    distance = 60 * 1.1515 * rad2deg(
        arccos(
            (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + 
            (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
        )
    )
    
    if unit == 'miles':
        return round(distance, 2)
    if unit == 'kilometers':
        return round(distance * 1.609344, 2)

Kintamieji yra:

  • platuma1 – jūsų pirmosios vietos kintamasis platuma.
  • ilguma1 – jūsų pirmosios vietos kintamasis ilguma
  • platuma2 – jūsų antrosios vietos kintamasis platuma.
  • ilguma2 – jūsų antrosios vietos kintamasis ilguma.
  • vienetas – numatytoji būtybė mylių. Tai gali būti atnaujinta arba perduodama kaip kilometrų.

MySQL: visų įrašų gavimas diapazone skaič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.

MySQL: visų įrašų gavimas diapazone skaič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ė.

„Microsoft SQL Server“ geografinis atstumas: STDistance

Jei naudojate „Microsoft SQL Server“, jie siūlo savo funkciją, STDistumas atstumui tarp dviejų taškų apskaičiuoti naudojant duomenų tipą Geografija.

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);  
SELECT @g.STDistance(@h);  

Skrybėlės patarimas Manashui Sahoo, viceprezidentui ir architektui Highbridge.

Douglas Karr

Douglas Karr yra Martech Zone ir pripažintas skaitmeninės transformacijos ekspertas. Dougas yra a Pagrindinė ir rinkodaros viešoji pranešėja. Jis yra VP viceprezidentas ir vienas iš įkūrėjų Highbridge, įmonė, kurios specializacija yra padėti įmonėms skaitmeniniu būdu transformuoti ir maksimaliai padidinti investicijas į technologijas, naudojant „Salesforce“ technologijas. Jis sukūrė skaitmeninės rinkodaros ir produktų strategijas "Dell Technologies", GoDaddy, Pardavėjai, „Webtrends“, ir „SmartFOCUS“. Douglasas taip pat yra knygos autorius Įmonių dienoraščiai, skirti manekenams ir bendro autorius Geresnio verslo knyga.

Susiję straipsniai

78 komentarai

  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 tiems, kurie perkelia į C:
    double deg2rad(double deg) { return deg*(3.14159265358979323846/180.0); }

  2. Labai gražus įrašas – pavyko labai gražiai – tereikia pakeisti lentelės, kurioje buvo ilgis, pavadinimą. Jis veikia gana greitai.. Turiu pakankamai nedaug platų ilgių (< 400), bet manau, kad tai būtų gerai išplėtota. Taip pat puiki svetainė – ką tik pridėjau ją prie savo del.icio.us paskyros ir reguliariai tikrinsiu.

  3. Taip pat pastebėjau, kad WHERE man netinka. Pakeičiau į HAVING ir viskas veikia puikiai. Iš pradžių aš neskaičiau komentarų ir perrašiau juos naudodamas įdėtą pasirinkimą. Abu veiks puikiai.

  4. Neįtikėtinai naudinga, labai ačiū! Turėjau tam tikrų problemų su naujuoju "HAVING", o ne su "KUR", bet kai perskaičiau komentarus čia (po maždaug pusvalandžio nusivylimo griežiant dantimis =P), jis puikiai suveikė. Ačiū ^_^

  5. Nepamirškite, kad toks pasirinktas teiginys bus labai intensyvus skaičiavimui ir todėl lėtas. Jei turite daug tų užklausų, tai gali greitai užstrigti.

    Daug mažiau intensyvus būdas yra atlikti pirmąjį (neapdorotą) pasirinkimą naudojant SQUARE sritį, apibrėžtą apskaičiuotu atstumu, ty „pasirinkti * iš lentelės pavadinimo, kur platuma tarp platumos1 ir platumos2 ir ilguma tarp lon1 ir lon2“. lat1 = tikslinė platuma – platuma, lat2 = tikslinė platuma + platuma, panašiai kaip lon. latdiff ~ = atstumas / 111 (kilometrams) arba atstumas / 69 mylioms, nes 1 platumos laipsnis yra ~ 111 km (nežymus pokytis, nes žemė yra šiek tiek ovali, bet šiam tikslui pakanka). londiff = atstumas / (abs(cos(deg2rad(platuma))*111)) arba 69 mylioms (iš tikrųjų galite paimti šiek tiek didesnį kvadratą, kad atsižvelgtumėte į skirtumus). Tada paimkite rezultatą ir įdėkite jį į radialinį selekciją. Tiesiog nepamirškite atsižvelgti į už ribų esančių koordinačių – ty priimtinos ilgumos diapazonas yra nuo -180 iki +180, o priimtinos platumos diapazonas yra nuo -90 iki +90, jei jūsų latdiff arba londiff yra už šio diapazono ribų. . Atminkite, kad daugeliu atvejų tai gali būti netaikoma, nes tai turi įtakos tik skaičiavimams per Ramiojo vandenyno liniją nuo ašigalio iki ašigalio, nors ji kerta dalį Chukotkos ir Aliaskos.

    Tai, ką mes pasiekiame, yra žymiai sumažinti taškų, pagal kuriuos atliekate šį skaičiavimą, skaičių. Jei duomenų bazėje yra milijonas pasaulinių taškų, paskirstytų maždaug tolygiai ir norite ieškoti 100 km atstumu, tada pirmoji (greita) paieška yra 10000 20 kv. km plote ir tikriausiai duos apie 500 rezultatų (remiantis tolygiu pasiskirstymu per paviršiaus plotas yra apie 20 mln. kv. km), o tai reiškia, kad pagal šią užklausą sudėtingas atstumo skaičiavimas atliekamas XNUMX kartų, o ne milijoną kartų.

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

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

        1. Dougas,

          Bandžiau naudoti mysql ir php, kad įvertinčiau, ar plataus ilgio taškas yra daugiakampyje. Ar žinote, ar jūsų draugas kūrėjas paskelbė pavyzdžių, kaip atlikti šią užduotį? Arba žinote gerų pavyzdžių. Ačiū iš anksto.

  6. Sveiki visi, tai mano bandomasis SQL teiginys:

    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, galiu naudoti order by, galiu tai padaryti be WHERE, ir tai veikia, bet ne su juo...

  7. Tai puiku, bet taip, kaip paukščiai skrenda. Būtų puiku pabandyti kažkaip į tai įtraukti google maps API (galbūt naudojant kelius ir pan.) Tiesiog tam, kad gautumėte idėją apie kitokią transportavimo formą. Dar turiu sukurti imituojamą atkaitinimo funkciją PHP, kuri galėtų pasiūlyti efektyvų keliaujančio pardavėjo problemos sprendimą. Bet manau, kad galėčiau pakartotinai panaudoti tam tikrą jūsų kodą.

  8. 2 dienos tyrimų, kad pagaliau rastume šį puslapį, kuris išspręstų mano problemą. Atrodo, geriau atsisakyti WolframAlpha ir patobulinti savo matematiką. Pakeitus iš WHERE į HAVING, mano scenarijus veikia. AČIŪ

  9. Norėčiau, kad tai būtų pirmasis puslapis, kurį radau. Išbandžius daugybę skirtingų komandų, ši vienintelė tinkamai veikė ir su minimaliais pakeitimais, kad tilptų mano duomenų bazė.
    Thanks a lot!

  10. Norėčiau, kad tai būtų pirmasis puslapis, kurį radau. Išbandžius daugybę skirtingų komandų, ši vienintelė tinkamai veikė ir su minimaliais pakeitimais, kad tilptų mano duomenų bazė.
    Thanks a lot!

  11. ačiū, kad paskelbėte šį naudingą straipsnį,  
    bet kažkodėl norėčiau paklausti
    kaip gauti atstumą tarp mysql db esančių koordų ir vartotojo įterptų koordų?
    Norėdami aiškiau apibūdinti:
    1.vartotojas turi įterpti [id], kad pasirinktų nurodytus duomenis iš db ir paties vartotojo koordinačių
    2. php failas gauna tikslinius duomenis (koordas) naudojant [id] ir tada apskaičiuoja atstumą tarp vartotojo ir tikslinio taško

    ar galite tiesiog gauti atstumą nuo toliau pateikto 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 FROM „MyTable“ WHERE atstumas >= „.$atstumas“. >>>>ar galiu "išimti" atstumą nuo čia?
    Ačiū dar kartą,
    Timmy S

  12. gerai, viskas, ką bandžiau, neveikia. Turiu omenyje tai, ką turiu, veikia, bet atstumai toli.

    Ar kas nors galėtų pamatyti, kas negerai su šiuo kodu?

    if(isset($_POST['pateikta'])){ $z = $_POST['pašto kodas']; $r = $_POST['spindulys']; echo "Results for ".$z; $sql = mysql_query(“SELECT DISTINCT m.pašto kodas, m.MktName,m.LocAddSt,m.LocAddCity,m.LocAddState,m.x1,m.y1,m.verified,z1.lat,z2.lon,z1. miestas,z1.valstybė FROM mrk m, zip z1, zip z2 WHERE m.pašto kodas = z1.pašto kodas IR z2.pašto kodas = $z IR (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 <= die ) ) ") (mysql_error()); while($row = mysql_fetch_array( $sql )) { $store1 = $row['MktName'].""; $parduotuvė = $row['LocAddSt'].””; $store .= $row['LocAddCity'].", ".$row['LocAddState']." “.$row['pašto kodas']; $platuma1 = $eilutė['platuma']; $ilguma1 = $eilė['ilgis']; $platuma2 = $eilutė['y1']; $ilguma2 = $eilutė['x1']; $miestas = $row['miestas']; $būsena = $eilutė['būsena']; $dis = getnew($platuma1, $ilguma1, $platuma2, $ilguma2, $vienetas = 'Mi'); // $dis = atstumas($lat1, $lon1, $lat2, $lon2); $patvirtinta = $row['patvirtinta']; if($verified == '1'){ echo ""; echo "".$store.""; echo $dis . "myle (-ių) atstumu"; aidas ""; } else { echo "".$store.""; echo $dis . "myle (-ių) atstumu"; aidas ""; } }}

    mano funkcijos.php kodas
    function 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; switch($ unit) { case 'Mi': break; 'Km': $atstumas = $atstumas * 1.609344; } return (round($atstumas,2)); }

    Iš anksto dėkoju

  13. Sveiki, Douglas, puikus straipsnis. Man pasirodė labai įdomus jūsų paaiškinimas apie geografines sąvokas ir kodą. Vienintelis mano pasiūlymas būtų pateikti tarpą ir įtraukti į kodą ekrane (pvz., Stackoverflow). Suprantu, kad norite sutaupyti vietos, bet įprastinis kodo tarpas / įtrauka man, kaip programuotojui, labai palengvintų skaitymą ir skaidymą. Šiaip ar taip, tai smulkmena. Tęskite puikų darbą.

  14. atrodo greičiau (mysql 5.9) naudoti dvigubai didesnę formulę pasirinkime ir kur:
    $formula = “(((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 = 'PASIRINKTI *, '.$formulė.' kaip atstumas nuo lentelės WHERE '..$formula.' <= '.$atstumas;

  15. Labai ačiū, kad parašėte šį straipsnį. Tai labai naudinga.
    Iš pradžių PHP buvo sukurta kaip paprasta scenarijų platforma, vadinama „Asmeniniu pagrindiniu puslapiu“. Šiais laikais PHP (hiperteksto pirminio procesorio trumpinys) yra Microsoft Active Server Pages (ASP) technologijos alternatyva.

    PHP yra atvirojo kodo serverio kalba, naudojama dinaminiams tinklalapiams kurti. Jį galima įterpti į HTML. PHP paprastai naudojamas kartu su MySQL duomenų baze Linux/UNIX žiniatinklio serveriuose. Tai turbūt pati populiariausia scenarijų kalba.

  16. Radau, kad aukščiau pateiktas sprendimas neveikia tinkamai.
    Man reikia pakeisti į:

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

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

    Pateikiau prašymą gauti savo žiniatinklio 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 nuskaito visas mano db eilutes

    $results = DB::select( DB::raw(“SELECT *, (((acos(sin(().$platuma.*pi())/180)) * sin((lat*pi()/180) ))+cos((.$platuma.*pi()/180)) * cos((plat*pi()/180)) * cos(((.$ilguma.- lng)*pi( )/180))))*180/pi())*60*1.1515*1.609344) kaip atstumas NUO žymeklių TURI atstumas >= “.$atstumas ));

    [{"id":1,"name":"Frankie Johnnie & Luigo Too","adresas":"939 W El Camino Real, Mountain View, CA","lat":37.386337280273,"lng":-122.08582305908, "atstumas":16079.294719663},{"id":2,"name":"Amici's East Coast picerija","adresas":"790 Castro St, Mountain View, CA","lat":37.387138366699,"lng": -122.08323669434,"atstumas":16079.175940152},{"id":3,"name":"Kapp's Pizza Bar & Grill","adresas":"191 Castro St, Mountain View, CA","lat":37.393886566162, "lng":-122.07891845703,"atstumas":16078.381373826},{"id":4,"name":"Apvalaus stalo pica: Mountain View","adresas":"570 N Shoreline Blvd, Mountain View, CA", ”lat”:37.402652740479,”lng”:-122.07935333252,”atstumas”:16077.420540582},{“id”:5,”name”:”Tony & Alba's Pica & Makaronai”,”adresas”:”619 Mountain Escuela View, CA”,”lat”:37.394012451172,”lng”:-122.09552764893,”atstumas”:16078.563225154},{“id”:6,”name”:”Raudelio malkomis kūrenama pica”,”adresas”4546 El Camino Real, Los Altosas, CA”,”lat”:37.401725769043,”lng”:-122.11464691162,”atstumas”:16077.937560795},{“ id":7,"name":"Barai ir kepsninės","adresas":"24 Whiteley Street, Mančesteris","lat":53.485118865967,"lng":-2.1828699111938,"atstumas":8038.7620112314}]

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

  18. Ieškau panašios užklausos, bet šiek tiek paspartinau – trumpai tariant, tai yra sugrupuoti visas koordinates 2 mylių atstumu nuo kiekvienos koordinatės ir tada suskaičiuoti, kiek koordinačių yra kiekvienoje grupėje, ir išvesti tik vieną grupę, kuri turi daugiausia koordinačių – net jei jūs turite daugiau nei vieną grupę tarp grupių, turinčių daugiausia koordinačių – tiesiog išveskite atsitiktinę grupę iš grupių, turinčių tokį patį didžiausią skaičių –

Ką manote?

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

Atgal į viršų mygtukas