Vypočítajte alebo dopytujte vzdialenosť veľkého kruhu medzi bodmi zemepisnej šírky a dĺžky pomocou vzorca Haversine (príklady PHP, Python, MySQL, MSSQL)

Haversine vzorec - Veľká kruhová vzdialenosť - PHP, Python, MySQL

Tento mesiac som dosť programoval v PHP a MySQL s ohľadom na GIS. Sopkajúc po sieti som skutočne ťažko našiel niektoré z nich Geografické výpočty aby som zistil vzdialenosť medzi dvoma miestami, tak som ich chcel zdieľať tu.

Letová mapa Európa s veľkou vzdialenosťou z kruhu

Jednoduchý spôsob výpočtu vzdialenosti medzi dvoma bodmi je pomocou Pythagorovho vzorca na výpočet prepočtu trojuholníka (A² + B² = C²). Toto je známe ako Euklidovská vzdialenosť.

Je to zaujímavý začiatok, ale neplatí to pre geografiu, pretože vzdialenosť medzi zemepisnými šírkami a dĺžkou je nie rovnaké vzdialenosti od seba. Keď sa priblížite k rovníku, línie zemepisnej šírky sa vzdialia ďalej. Ak použijete nejaký druh jednoduchej triangulačnej rovnice, môže zmerať vzdialenosť presne na jednom mieste a na druhom strašne zle kvôli zakriveniu Zeme.

Veľká vzdialenosť kruhu

Trasy, ktoré sa cestujú na veľké vzdialenosti okolo Zeme, sú známe ako Veľká vzdialenosť kruhu. To znamená... najkratšia vzdialenosť medzi dvoma bodmi na gule je iná ako medzi bodmi na plochej mape. Skombinujte to so skutočnosťou, že čiary zemepisnej šírky a dĺžky nie sú rovnako vzdialené... a máte ťažký výpočet.

Tu je fantastické video vysvetlenie toho, ako Great Circles fungujú.

Haversinov vzorec

Vzdialenosť pomocou zakrivenia Zeme je zakomponovaná do Haversinov vzorec, ktorá využíva trigonometriu na zakrivenie Zeme. Ak nachádzate vzdialenosť medzi 2 miestami na Zemi (vzdušnou čiarou), je priamka skutočne oblúk.

Toto platí pre letecký let - pozreli ste si niekedy skutočnú mapu letov a všimli ste si, že sú klenuté? Je to preto, že je kratšie lietať v oblúku medzi dvoma bodmi ako priamo na dané miesto.

PHP: Vypočítajte vzdialenosť medzi 2 bodmi zemepisnej šírky a dĺžky

Tu je vzorec PHP na výpočet vzdialenosti medzi dvoma bodmi (spolu s prepočtom míľa vs. kilometer) zaokrúhlený na dve desatinné miesta.

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)); 
}

Premenné sú:

  • $Latitude1 – premenná pre zemepisnú šírku vášho prvého miesta.
  • $Longitude1 – premenná pre zemepisnú dĺžku vášho prvého miesta
  • $Latitude2 – premenná pre zemepisnú šírku vášho druhého miesta.
  • $Longitude2 – premenná pre zemepisnú dĺžku vášho druhého miesta.
  • $jednotka – predvolená bytosť míle. Toto môže byť aktualizované alebo odovzdané ako kilometre.

Python: Vypočítajte vzdialenosť medzi 2 bodmi zemepisnej šírky a dĺžky

Každopádne, tu je pythonovský vzorec na výpočet vzdialenosti medzi dvoma bodmi (spolu s prevodom míľa vs. kilometer) zaokrúhlený na dve desatinné miesta. Poďakovanie patrí môjmu synovi, Billovi Karrovi, ktorý je Data Scientist pre OpenINSIGHTS, pre kód.

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)

Premenné sú:

  • zemepisná šírka1 – premenná pre vaše prvé umiestnenie zemepisná šírka.
  • zemepisná dĺžka 1 – premenná pre vaše prvé umiestnenie zemepisná dĺžka
  • zemepisná šírka2 – premenná pre vaše druhé miesto zemepisná šírka.
  • zemepisná dĺžka 2 – premenná pre vaše druhé miesto zemepisná dĺžka.
  • jednotka – predvolená bytosť míle. Toto môže byť aktualizované alebo odovzdané ako kilometre.

MySQL: Získavanie všetkých záznamov v rámci rozsahu výpočtom vzdialenosti v míľach pomocou zemepisnej šírky a dĺžky

Je tiež možné použiť SQL na vykonanie výpočtu na vyhľadanie všetkých záznamov v konkrétnej vzdialenosti. V tomto príklade sa chystám vyhľadať MyTable v MySQL, aby som našiel všetky záznamy, ktoré sú menšie alebo rovné premennej $ distance (v míľach) k mojej polohe na $ latitude a $ longitude:

Dotaz na načítanie všetkých záznamov v konkrétnom vzdialenosť výpočtom vzdialenosti v míľach medzi dvoma bodmi zemepisnej šírky a dĺžky sú:

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

Toto budete musieť prispôsobiť:

  • $ zemepisná dĺžka - toto je premenná PHP, kde prechádzam zemepisnú dĺžku bodu.
  • $ zemepisná šírka - toto je premenná PHP, kde prechádzam zemepisnú dĺžku bodu.
  • $ vzdialenosť - toto je vzdialenosť, na ktorú by ste chceli nájsť všetky záznamy menšie alebo rovné.
  • tabuľka - toto je tabuľka ... budete ju chcieť nahradiť názvom svojej tabuľky.
  • zemepisná šírka - toto je pole vašej zemepisnej šírky.
  • zemepisná dĺžka - toto je pole vašej zemepisnej dĺžky.

MySQL: Získavanie všetkých záznamov v rámci rozsahu výpočtom vzdialenosti v kilometroch pomocou zemepisnej šírky a dĺžky

A tu je dotaz SQL využívajúci kilometre v 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."

Toto budete musieť prispôsobiť:

  • $ zemepisná dĺžka - toto je premenná PHP, kde prechádzam zemepisnú dĺžku bodu.
  • $ zemepisná šírka - toto je premenná PHP, kde prechádzam zemepisnú dĺžku bodu.
  • $ vzdialenosť - toto je vzdialenosť, na ktorú by ste chceli nájsť všetky záznamy menšie alebo rovné.
  • tabuľka - toto je tabuľka ... budete ju chcieť nahradiť názvom svojej tabuľky.
  • zemepisná šírka - toto je pole vašej zemepisnej šírky.
  • zemepisná dĺžka - toto je pole vašej zemepisnej dĺžky.

Tento kód som použil v platforme podnikového mapovania, ktorú sme použili v maloobchode s viac ako 1,000 XNUMX pobočkami v Severnej Amerike, a fungoval nádherne.

Geografická vzdialenosť servera Microsoft SQL: STD vzdialenosť

Ak používate Microsoft SQL Server, ponúkajú svoje vlastné funkcie, STDodstup na výpočet vzdialenosti medzi dvoma bodmi pomocou typu údajov Geografia.

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);  

Klobúk pre Manash Sahoo, viceprezidenta a architekta Highbridge.

77 Komentáre

  1. 1

    Ďakujem pekne za zdieľanie. Toto bola jednoduchá úloha na kopírovanie a vkladanie a funguje skvele. Ušetrila si mi veľa času.
    FYI pre kohokoľvek, kto prenáša na C:
    double deg2rad (double deg) {return deg * (3.14159265358979323846 / 180.0); }

  2. 2

    Veľmi pekný príspevok - fungoval veľmi pekne - stačilo mi zmeniť názov tabuľky, ktorá drží lat-long. Funguje to dosť rýchlo. Mám primerane malý počet lat-longov (<400), ale myslím si, že by sa to pekne zmenšilo. Aj pekná stránka - práve som ju pridala do svojho účtu del.icio.us a budem ju pravidelne kontrolovať.

  3. 4
  4. 5
  5. 8

    Myslím, že tvoj SQL potrebuje príkaz.
    namiesto WHERE vzdialenosť <= $ vzdialenosť budete možno musieť urobiť
    použite HAVING distance <= $ distance

    inak dakujem, ze si mi usetril kopu casu a energie.

  6. 10
  7. 11
  8. 12

    Ďakujeme za zdieľanie tohto kódu. Ušetrilo mi to veľa času na vývoj. Ďakujeme tiež vašim čitateľom za upozornenie, že pre MySQL 5.x je potrebné vyhlásenie HAVING. Veľmi nápomocný.

  9. 14
  10. 15

    Ahoj,

    Iná otázka. Existuje vzorec pre reťazce NMEA, ako je tento uvedený nižšie?

    1342.7500, N, 10052.2287, E

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

    Vďaka,
    Sužovať

  11. 16

    Tiež som zistil, že WHERE u mňa nefunguje. Zmenilo sa to na HAVING a všetko funguje perfektne. Spočiatku som komentáre neprečítal a prepísal ich pomocou vnoreného výberu. Oba budú fungovať v poriadku.

  12. 17
  13. 18

    Neskutočne užitočné, ďakujem pekne! Mal som skôr problémy s novým „HAVING“ ako s „WHERE“, ale akonáhle som si prečítal komentáre tu (asi po pol hodine frustrovania zubov = P), začal som pekne fungovať. Ďakujem ^ _ ^

  14. 19
  15. 20

    Pamätajte, že vybrané výroky budú veľmi výpočtovo náročné a teda pomalé. Ak máte veľa z týchto otázok, môže to dosť rýchlo zabrať.

    Oveľa menej intenzívnym prístupom je spustenie prvého (surového) výberu pomocou oblasti SQUARE definovanej vypočítanou vzdialenosťou, tj. „Select * from tablename where latitude between lat1 and lat2 and longitude between lon1 and lon2“. lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, podobne ako lon. latdiff ~ = vzdialenosť / 111 (pre km) alebo vzdialenosť / 69 pre míle, pretože 1 stupeň zemepisnej šírky je ~ 111 km (mierne odchýlky, pretože zem je mierne oválna, ale na tento účel postačuje). londiff = vzdialenosť / (abs (cos (deg2rad (zemepisná šírka)) * 111)) - alebo 69 na míle (pre zohľadnenie odchýlok môžete skutočne vziať trochu väčší štvorec). Potom vezmite výsledok a vložte ho do radiálneho výberu. Nezabudnite zohľadniť mimosmerové súradnice - tj. Rozsah prijateľnej zemepisnej dĺžky je -180 až +180 a rozsah prijateľnej zemepisnej šírky je -90 až +90 - pre prípad, že váš latdiff alebo londiff bude mimo tento rozsah . Upozorňujeme, že vo väčšine prípadov to nemusí byť možné, pretože to ovplyvňuje iba výpočty vedúce cez čiaru Tichého oceánu od pólu k pólu, hoci pretína časť chukotky a časť Aljašky.

    Týmto dosiahneme významné zníženie počtu bodov, proti ktorým vykonáte tento výpočet. Ak máte milión globálnych bodov v databáze distribuovaných zhruba rovnomerne a chcete vyhľadávať do 100 km, potom vaše prvé (rýchle) vyhľadávanie má rozlohu 10000 20 km500 a pravdepodobne prinesie asi 20 výsledkov (na základe rovnomerného rozloženia po čo je znamená, že pre tento dopyt spustíte komplexný výpočet vzdialenosti XNUMX-krát, nie miliónkrát.

    • 21
      • 22

        Fantastická rada! Vlastne som pracoval s vývojárom, ktorý napísal funkciu, ktorá vytiahla vnútorný štvorec a potom rekurzívnu funkciu, ktorá urobila po obvode štvorce, aby zahrnula a vylúčila zvyšné body. Výsledkom bol neuveriteľne rýchly výsledok - dokázal vyhodnotiť milióny bodov v mikrosekundách.

        Môj prístup vyššie je určite „surový“, ale schopný. Ešte raz ďakujem!

        • 23

          Doug,

          Snažil som sa pomocou mysql a php vyhodnotiť, či je lat long point v polygóne. Viete, či váš priateľ vývojára zverejnil nejaké príklady, ako dosiahnuť túto úlohu. Alebo poznáte nejaké dobré príklady. Vopred ďakujem.

  16. 24

    Ahoj všetci, toto je môj testovací príkaz 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

    a Mysql mi hovorí, že vzdialenosť neexistuje ako stĺpec, môžem použiť príkaz do, dokážem to bez WHERE a funguje to, ale nie s ním ...

  17. 26

    To je skvelé, je to však rovnako, ako lietajú vtáky. Bolo by skvelé pokúsiť sa nejako do toho začleniť rozhranie google maps API (napríklad pomocou ciest atď.). Len pre predstavu pomocou inej formy prepravy. Stále ešte musím vytvoriť simulovanú funkciu žíhania v PHP, ktorá by bola schopná ponúknuť efektívne riešenie problému obchodného cestujúceho. Myslím si však, že možno budem môcť znova použiť časť vášho kódu.

  18. 27
  19. 28

    Dobrý článok! Našiel som veľa článkov popisujúcich, ako vypočítať vzdialenosť medzi dvoma bodmi, ale skutočne som hľadal útržok SQL.

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

    2 dni výskumu, aby som konečne našiel túto stránku, ktorá rieši môj problém. Vyzerá to, že by som mal radšej vypustiť svoj WolframAlpha a oprášiť svoju matematiku. Zmena z WHERE na HAVING má môj skript v prevádzkyschopnom stave. ĎAKUJEM

  25. 37
    • 38

      Vďaka Georgi. Stále som dostával stĺpec „vzdialenosť“ nebol nájdený. Akonáhle zmením WHERE na HAVING, fungovalo to ako kúzlo!

  26. 39

    Prial by som si, aby to bola prvá stránka, ktorú som na tejto stránke našiel. Po vyskúšaní mnohých rôznych príkazov to bol jediný, ktorý správne pracoval as minimálnymi zmenami potrebnými na prispôsobenie mojej vlastnej databáze.
    Díky moc!

  27. 40

    Prial by som si, aby to bola prvá stránka, ktorú som na tejto stránke našiel. Po vyskúšaní mnohých rôznych príkazov to bol jediný, ktorý správne pracoval as minimálnymi zmenami potrebnými na prispôsobenie mojej vlastnej databáze.
    Díky moc!

  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

    ďakujeme za zverejnenie tohto užitočného článku,  
    ale z nejakého dôvodu by som sa chcel spýtať
    ako sa dostať na vzdialenosť medzi coordami vo vnútri mysql db a coords vloženými do php používateľom?
    pre jasnejší popis:
    1. užívateľ musí vložiť [id] pre výber zadaných údajov z db a koreňov samotného používateľa
    2. súbor php získa cieľové údaje (coords) pomocou [id] a potom vypočíta vzdialenosť medzi používateľom a cieľovým bodom

    alebo sa môžete jednoducho jednoducho dištancovať od kódu nižšie?

    $ qry = „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) ako vzdialenosť OD `MyTable` WHERE distance> =„. $ Distance. “ >>>> môžem odtiaľto „odtiahnuť“ vzdialenosť?
    ešte raz ďakujem,
    Timmy S.

  41. 60

    ok, všetko, čo som vyskúšal, nefunguje. Myslím tým, čo mám, funguje, ale vzdialenosti sú ďaleko.

    Mohol by niekto vidieť, čo je na tomto kóde?

    if (isset ($ _ POST ['submitted'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['radius']; echo „Výsledky pre“. $ 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. mesto, z1.štát FROM mrk m, zip z1, zip z2 KDE 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 ") alebo zomrieť (mysql_error ()); while ($ riadok = mysql_fetch_array ($ sql)) {$ store1 = $ riadok ['MktName']. ""; $ store = $ riadok ['LocAddSt']. ””; $ store. = $ riadok ['LocAddCity']. ",". $ riadok ['LocAddState']. " „. $ Riadok ['zipcode']; $ latitude1 = $ riadok ['lat']; $ longitude1 = $ riadok ['lon']; $ latitude2 = $ riadok ['y1']; $ longitude2 = $ riadok ['x1']; $ city = $ riadok ['city']; $ state = $ riadok ['state']; $ dis = getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi'); // $ dis = vzdialenosť ($ lat1, $ lon1, $ lat2, $ lon2); $ ověřené = $ riadok ['overený']; if ($ checked == '1') {echo “”; echo „“. $ store. ”“; echo $ dis. " na míle ďaleko"; ozvena „“; } else {echo "". $ store. ""; echo $ dis. " na míle ďaleko"; ozvena „“; }}}

    môj functions.php kód
    funkcia getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ distance = (sin (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ); $ distance = acos ($ distance); $ vzdialenosť = rad2deg ($ vzdialenosť); $ vzdialenosť = $ vzdialenosť * 60 * 1.1515; switch (jednotka $) {case 'Mi': break; prípad 'Km': $ vzdialenosť = $ vzdialenosť * 1.609344; } návrat (zaokrúhlenie ($ vzdialenosť, 2)); }

    Vopred ďakujem

  42. 61
  43. 62

    Ahoj Douglas, super článok. Vaše vysvetlenie geografických pojmov a kódu mi pripadalo skutočne zaujímavé. Môj jediný návrh by bol medzera a odsadenie kódu na zobrazenie (napríklad Stackoverflow). Rozumiem, že chcete šetriť priestor, ale konvenčné medzery a odsadenie kódu by mi ako programátorovi oveľa uľahčilo čítanie a pitvanie. To je každopádne maličkosť. Pokračujte v skvelej práci.

  44. 64
  45. 65
  46. 66
  47. 67
  48. 68
  49. 69
  50. 70

    zdá sa rýchlejšie (mysql 5.9) použiť vo vzorci a kde:
    $ formula = “(((acos (sin ((“. $ latitude. * pi () / 180)) * sin ((`Latitude` * pi () / 180)) + cos ((„. $ latitude. „* Pi () / 180)) * cos ((` `Zemepisná šírka` * pi () / 180)) * cos ((((„. $ Zemepisná dĺžka. “-` Zemepisná dĺžka`) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) “;
    $ sql = 'SELECT *,'. $ formula. ' ako vzdialenosť OD tabuľky, KDE '.. $ vzorec.' <= '. $ vzdialenosť;

  51. 71
  52. 72

    Ďakujem pekne za strihanie tohto článku. Je to veľmi užitočné.
    PHP bolo najskôr vytvorené ako jednoduchá skriptovacia platforma s názvom „Personal Home Page“. V dnešnej dobe je PHP (skratka pre Hypertext Preprocessor) alternatívou technológie Microsoft Active Server Pages (ASP).

    PHP je otvorený jazyk na strane servera, ktorý sa používa na vytváranie dynamických webových stránok. Môže byť vložený do HTML. PHP sa zvyčajne používa v spojení s databázou MySQL na webových serveroch Linux / UNIX. Je to pravdepodobne najpopulárnejší skriptovací jazyk.

  53. 73

    Našiel som vyššie uvedené riešenie, ktoré nefunguje správne.
    Potrebujem zmeniť na:

    $ qqq = “SELECT *, (((acos (sin ((“. $ latitude. * pi () / 180)) * sin ((`latt` * pi () / 180)) + cos ((”. $ latitude. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos ((((„. $ longitude.“ - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) ako vzdialenosť OD „registra“ “;

  54. 75
  55. 76

    Dobrý deň, prosím, budem v tejto veci skutočne potrebovať vašu pomoc.

    Uskutočnil som žiadosť o získanie prístupu na môj webový server http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ zemepisná šírka
    -2.23389 = zemepisná dĺžka
    a 20 = vzdialenosť, ktorú chcem získať

    Avšak pri použití tvojho vzorca načíta všetky riadky v mojom db

    $ results = DB :: select (DB :: raw (“SELECT *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((„. $ zemepisná šírka. * pi () / 180)) * cos ((lat * pi () / 180)) * cos ((((.. zemepisná dĺžka. - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ako vzdialenosť FROM značiek HAVING distance> = “. $ Vzdialenosť));

    [{“Id”: 1, ”name”: ”Frankie Johnnie & Luigo Too”, ”address”: ”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 Altos, CA ”,” lat ”: 37.401725769043,” lng ”: - 122.11464691162,” vzdialenosť ”: 16077.937560795}, {“ id ”: 7,” name ”:” The bars and grills ”,” address ”:” 24 Whiteley Street, Manchester ”,” lat ”: 53.485118865967,” lng ”: - 2.1828699111938,” distance ”: 8038.7620112314}]

    Chcem načítať iba riadky s 20 míľami, ale prinesie to všetky riadky. Prosím, čo robím zle

  56. 77

    Hľadám podobný dotaz, ale trochu som sa rozšíril - v skratke ide o zoskupenie všetkých súradníc do 2 míľ od každej súradnice a potom spočítanie počtu súradníc v každej skupine a výstup iba jednej skupiny, ktorá má najviac súradníc - aj keď máte viac ako jednu skupinu medzi skupinami, ktoré majú najväčší počet súradníc - jednoducho vydajte náhodnú skupinu zo skupín s rovnakým najväčším počtom -

Čo si myslíte?

Táto stránka používa Akismet na zníženie spamu. Zistite, ako sa spracúvajú údaje vašich komentárov.