Berechent oder frot grouss Kreesdistanz tëscht Punkte vu Breet a Längt mat der Haversine Formel (PHP, Python, MySQL, MSSQL Beispiller)

Haversine Formel - Great Circle Distanz - PHP, Python, MySQL

Dëse Mount hunn ech zimlech vill a PHP a MySQL am Bezuch op GIS programméiert. Um Netz schnupperen, hat ech et schwéier eng Partie vun de Geografesch Berechnungen d'Distanz tëscht zwou Standuerter ze fannen also wollt ech se hei deelen.

Fluchkaart Europa Mat grousser Circle Distance

Den einfache Wee fir eng Distanz tëscht zwee Punkten ze berechnen ass mat der Pythagorasescher Formel d'Hypotenuse vun engem Dräieck ze berechnen (A² + B² = C²). Dëst ass bekannt als de Euklidescher Distanz.

Dat ass en interessante Start awer et gëllt net fir Geographie well d'Distanz tëscht Breedegrad a Längt ass net gläich Distanzen auserneen. Wann Dir méi no beim Äquator kënnt, gi Breetlinne méi wäit auserneen. Wann Dir eng Aart einfach Triangulatiounsgleichung benotzt, kann et d'Distanz genau op enger Plaz moossen an op der anerer schrecklech falsch, wéinst der Krëmmung vun der Äerd.

Grouss Krees Distanz

D'Routen déi laang Distanze ronderëm d'Äerd gereest gi sinn als Grouss Krees Distanz. Dat ass ... déi kuerst Distanz tëscht zwee Punkten op enger Kugel ass anescht wéi d'Punkten op enger flaacher Kaart. Kombinéiert dat mat der Tatsaach, datt d'Breet- a Längtelinnen net equidistant sinn ... an Dir hutt eng schwiereg Berechnung.

Hei ass eng fantastesch Video Erklärung wéi Great Circles funktionnéieren.

D'Haversine Formel

D'Distanz mat der Krëmmung vun der Äerd ass an der Haversine Formel, déi Trigonometrie benotzt fir d'Krümmung vun der Äerd z'erméiglechen. Wann Dir d'Distanz tëscht 2 Plazen op der Äerd fënns (wéi de Kräie flitt), ass eng riichter Linn wierklech e Bou.

Dëst ass uwendbar am Fluchfluch - hutt Dir jeemools op der aktueller Kaart vu Flich gekuckt a gemierkt datt se archéiert sinn? Dat ass well et méi kuerz ass an engem Bogen tëscht zwee Punkten ze fléien wéi direkt op de Standuert.

PHP: Berechent Distanz Tëscht 2 Punkte Breet a Längt

Hei ass d'PHP Formel fir d'Distanz tëscht zwee Punkten ze berechnen (zesumme mat Mile vs Kilometer Konversioun) op zwou Dezimalplazen ofgerënnt.

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

D'Variabelen sinn:

  • $ Breedegrad 1 - eng Variabel fir d'Breet vun Ärer éischter Plaz.
  • $ Längt 1 - eng Variabel fir d'Längt vun Ärer éischter Plaz
  • $ Breedegrad 2 - eng Variabel fir d'Breet vun Ärer zweeter Plaz.
  • $ Längt 2 - eng Variabel fir d'Längt vun Ärer zweeter Plaz.
  • $ Eenheet - d'Default sinn Dausende vu Leit. Dëst kann aktualiséiert oder iwwerginn ginn als Kilometer.

Python: Berechent Distanz tëscht 2 Punkte Breet a Längt

Jiddefalls, hei ass d'Python Formel fir d'Distanz tëscht zwee Punkten ze berechnen (zesumme mat Mile vs Kilometer Konversioun) op zwou Dezimalplazen ofgerënnt. Kreditt u mäi Jong, Bill Karr, deen en Datewëssenschaftler ass fir OpenINSIGHTS, fir de Code.

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)

D'Variabelen sinn:

  • Breet1 - eng Variabel fir Är éischt Plaz Breedegrad.
  • Längt 1 - eng Variabel fir Är éischt Plaz Längt
  • Breet2 - eng Variabel fir Är zweet Plaz Breedegrad.
  • Längt 2 - eng Variabel fir Är zweet Plaz Längt.
  • Apparat - d'Default sinn Dausende vu Leit. Dëst kann aktualiséiert oder iwwerginn ginn als Kilometer.

MySQL: All Rekorder bannent engem Beräich zréckzéien andeems d'Distanz an de Meilen berechent mat Breet a Längt

Et ass och méiglech SQL ze benotzen fir eng Berechnung ze maachen fir all Dossieren an enger spezifescher Distanz ze fannen. An dësem Beispill ginn ech MyTable op MySQL nofroen fir all records ze fannen déi manner wéi oder gläich wéi variabel $ Distanz (a Meilen) op meng Plaz op $ Breedegrad an $ Längt sinn:

D'Fro fir all d'Dateien an engem spezifeschen ze kréien Distanz duerch Berechnung vun der Distanz a Meilen tëscht zwee Breedegraden a Längt sinn:

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

Dir musst dëst personaliséieren:

  • $ Längt - dëst ass eng PHP Variabel wou ech d'Längt vum Punkt passéieren.
  • $ Breet - dëst ass eng PHP Variabel wou ech d'Längt vum Punkt passéieren.
  • $ Distanz - dëst ass d'Distanz déi Dir gär hätt all records manner oder gläich ze fannen.
  • Dësch - dëst ass den Dësch ... Dir wëllt deen duerch Ären Dësch Numm ersetzen.
  • Breedegrad - dëst ass d'Feld vun Ärer Breet.
  • Längt - dëst ass d'Feld vun Ärer Längt.

MySQL: All Rekorder bannent engem Beräich zréckzéien andeems d'Distanz a Kilometer berechent mat Breet a Längt

An hei ass d'SQL Ufro mat Kilometer a 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."

Dir musst dëst personaliséieren:

  • $ Längt - dëst ass eng PHP Variabel wou ech d'Längt vum Punkt passéieren.
  • $ Breet - dëst ass eng PHP Variabel wou ech d'Längt vum Punkt passéieren.
  • $ Distanz - dëst ass d'Distanz déi Dir gär hätt all records manner oder gläich ze fannen.
  • Dësch - dëst ass den Dësch ... Dir wëllt deen duerch Ären Dësch Numm ersetzen.
  • Breedegrad - dëst ass d'Feld vun Ärer Breet.
  • Längt - dëst ass d'Feld vun Ärer Längt.

Ech hunn dëse Code an enger Entreprise Mapping Plattform benotzt déi mir fir e Geschäftsgeschäft mat iwwer 1,000 Standuerter an Nordamerika benotzt hunn an et huet schéi geschafft.

Microsoft SQL Server Geographesch Distanz: STDistance

Wann Dir Microsoft SQL Server benotzt, bidden se hir eege Funktioun, STDistanz fir d'Berechnung vun der Distanz tëscht zwee Punkten mat der Geographie Datentyp.

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

Hutt Tipp ze Manash Sahoo, VP an Architekt vun Highbridge.

77 Comments

  1. 1

    Villmols Merci fir d'Deelen. Dëst war eng einfach Kopie a Paste Aarbecht a funktionnéiert super. Du hues mech vill Zäit gespuert.
    FYI fir jiddereen deen op C portéiert:
    duebel deg2rad (duebel deg) { zréckginn deg * (3.14159265358979323846/180.0); }

  2. 2

    Ganz flott Stéck Astelle - geschafft ganz flott - Ech hu just den Numm vun der Dësch hält d'Lat-laang änneren. Et funktionnéiert zimmlech séier ze .. Ech hunn eng raisonnabel kleng Zuel vu Lat-Longs (<400) awer ech mengen dat géif gutt skaléieren. Schéine Site och - ech hunn et just op mäi del.icio.us Kont bäigefüügt a wäerte regelméisseg iwwerpréiwen.

  3. 4
  4. 5
  5. 8

    Ech mengen Är SQL brauch eng mussen Ausso.
    amplaz WHERE Distanz <= $Distanz Dir musst
    benotzen HAVE Distanz <= $Distanz

    soss merci fir mech eng Rëtsch vun Zäit an Energie spueren.

  6. 10
  7. 11
  8. 12

    Villmools Merci fir dës Code deelen. Et huet mech vill Entwécklungszäit gespuert. Och Merci un Är Lieser fir drop hiweisen datt eng HAVING Ausso fir MySQL 5.x néideg ass. Ganz hëllefräich.

  9. 14
  10. 15

    Hallo,

    Eng aner Fro. Gëtt et eng Formel fir NMEA Strings wéi déi hei ënnen?

    1342.7500,N,10052.2287,E

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

    Merci,
    Harry

  11. 16

    Ech hunn och fonnt datt WHERE net fir mech geschafft huet. Huet et op HAVING geännert an alles funktionnéiert perfekt. Fir d'éischt hunn ech d'Kommentaren net gelies an et iwwerschriwwen mat engem nestet Select. Béid wäerte just gutt funktionnéieren.

  12. 17
  13. 18

    Onheemlech hëllefräich, villmools Merci! Ech hat e puer Problemer mam neien "HAVING", anstatt "WOU", awer eemol ech d'Kommentaren hei gelies hunn (no ongeféier eng hallef Stonn Zänn an Frustratioun geschmiert =P), hunn ech et gutt geschafft. Merci ^_^

  14. 19
  15. 20

    Denkt drun datt eng gewielt Ausso wéi déi ganz computationell intensiv wäert sinn an dofir lues. Wann Dir vill vun dësen Ufroen hutt, kann et d'Saachen zimlech séier erofgoen.

    Eng vill manner intensiv Approche ass eng éischt (grouss) Auswiel auszeféieren mat engem SQUARE Beräich definéiert duerch eng berechent Distanz dh "wielt * aus Dëschnumm wou Breedegrad tëscht lat1 a lat2 a Längt tëscht lon1 an lon2". lat1 = Targetlatitude - latdiff, lat2 = Targetlatitude + latdiff, ähnlech mat lon. latdiff ~= Distanz / 111 (fir km), oder Distanz/69 fir Meilen well 1 Breetgrad ~ 111 km ass (liicht Variatioun well d'Äerd liicht oval ass, awer genuch fir dësen Zweck). londiff = Distanz / (abs(cos(deg2rad(breedegrad))*111)) - oder 69 fir Meilen (Dir kënnt tatsächlech e bësse méi grouss Quadrat huelen fir Variatiounen ze berechnen). Dann huelt d'Resultat vun deem a fiddert et an de Radialauswiel. Vergiesst just net fir ausserhalb Koordinaten ze berücksichtegen - dh d'Gamme vun akzeptablen Längt ass -180 bis +180 an d'Gamme vun akzeptable Breedegraden ass -90 bis +90 - am Fall wou Är Latdiff oder Londiff ausserhalb vun dësem Beräich leeft . Notéiert datt dëst an de meeschte Fäll net applicabel ass well et nëmmen Berechnungen iwwer eng Linn duerch de Pazifesche Ozean vu Pol op Pol beaflosst, obwuel et en Deel vun Chukotka an en Deel vun Alaska schneit.

    Wat mir duerch dëst erreechen ass eng bedeitend Reduktioun vun der Unzuel vun de Punkte géint déi Dir dës Berechnung maacht. Wann Dir eng Millioun globale Punkten an der Datebank ongeféier gläichméisseg verdeelt hutt an Dir wëllt bannent 100 km sichen, dann ass Är éischt (schnell) Sich vun engem Gebitt 10000 km² a wäert wahrscheinlech ongeféier 20 Resultater bréngen (baséiert op gläichméisseg Verdeelung iwwer eng Fläch vun ongeféier 500M sq km), dat heescht datt Dir déi komplex Distanzberechnung 20 Mol fir dës Ufro leeft anstatt eng Millioun Mol.

    • 21
      • 22

        Fantastesch Rotschléi! Ech hunn tatsächlech mat engem Entwéckler geschafft deen eng Funktioun geschriwwen huet déi de bannenzege Quadrat gezunn huet an dann eng rekursiv Funktioun déi 'Plaze' ronderëm de Perimeter gemaach huet fir déi verbleiwen Punkten opzehuelen an auszeschléissen. D'Resultat war en onheemlech séier Resultat - hie konnt Millioune Punkten a Mikrosekonnen evaluéieren.

        Meng Approche hei uewen ass definitiv 'ruh' awer kapabel. Merci nach eemol!

        • 23

          Doug,

          Ech hu probéiert mysql a php ze benotzen fir ze evaluéieren ob e Lat-Langpunkt an engem Polygon ass. Wësst Dir ob Ären Entwécklerfrënd Beispiller publizéiert huet wéi Dir dës Aufgab maache kënnt. Oder kennt Dir gutt Beispiller. Merci am Viraus.

  16. 24

    Salut jiddereen, dëst ass meng Test SQL Ausso:

    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 seet mir datt d'Distanz net als Kolonn existéiert, ech kann Uerdnung benotzen, ech kann et ouni WHERE maachen, an et funktionnéiert, awer net mat der ...

  17. 26

    Dëst ass super, awer et ass grad wéi d'Villercher fléien. Et wier super fir ze probéieren d'Google Maps API zu dësem iergendwéi z'integréieren (vläicht mat Stroossen etc.) Just fir eng Iddi mat enger anerer Form vun Transport ze ginn. Ech hunn nach ëmmer eng simuléiert annealing Funktioun am PHP ze maachen, déi fäeg wier eng effizient Léisung fir de reesend Verkeefer Problem ze bidden. Awer ech denken datt ech fäeg sinn e puer vun Ärem Code ze benotzen fir dat ze maachen.

  18. 27
  19. 28

    Gudden Artikel! Ech hunn vill Artikelen fonnt, déi beschreiwen wéi d'Distanz tëscht zwee Punkte berechnen, awer ech war wierklech no der SQL Snippet gesicht.

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

    2 Deeg Fuerschung fir endlech dës Säit ze fannen déi mäi Problem léist. Gesäit aus wéi wann ech besser mäi WolframAlpha ausbriechen a meng Mathematik oppassen. D'Ännerung vu WHERE op HAVING huet mäi Skript am funktionnéierenden Zoustand. MERCI

  25. 37
    • 38

      Merci Georgi. Ech hunn ëmmer weider Kolonn 'Distanz' net fonnt. Eemol hunn ech d'WOU änneren an HAVE et huet wéi e Charme geschafft!

  26. 39

    Ech wënschen dat war déi éischt Säit déi ech op dëser fonnt hunn. Nodeems ech vill verschidde Befehle probéiert hunn, war dëst deen eenzegen deen richteg funktionnéiert, a mat minimale Ännerunge fir meng eegen Datebank ze passen.
    Villmools Merci!

  27. 40

    Ech wënschen dat war déi éischt Säit déi ech op dëser fonnt hunn. Nodeems ech vill verschidde Befehle probéiert hunn, war dëst deen eenzegen deen richteg funktionnéiert, a mat minimale Ännerunge fir meng eegen Datebank ze passen.
    Villmools Merci!

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

    Ech weess datt dës Formel funktionnéiert, awer ech kann net gesinn wou de Radius vun der Äerd berécksiichtegt gëtt. Kann iergendeen mech opklären, wann ech glift?

  34. 49
  35. 50
  36. 52

    Merci Douglas, d'SQL Query ass genau dat wat ech gebraucht hunn, an ech hu geduecht datt ech et selwer muss schreiwen. Dir hutt mech vu méiglecherweis Stonnen Breedegrad Längegrad Léierkurve gerett!

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

    merci fir dësen hëllefräichen Artikel ze posten,  
    mee aus iergendengem Grond wollt ech froen
    Wéi kritt een d'Distanz tëscht Koorden bannent mysql db a Koorden, déi vum Benotzer op php agebaut ginn?
    fir méi kloer ze beschreiwen:
    1.User muss [ID] aginn fir spezifizéiert Daten aus db an de Benotzer selwer seng Koorden ze wielen
    2.d'php Datei kritt d'Zildaten (Koorden) mat [id] an berechent dann d'Distanz tëscht Benotzer an Zilpunkt

    oder kann einfach einfach Distanz vum Code ënnert kréien?

    $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) als Distanz VUN `MyTable` WOU Distanz >= ".$Distanz." >>>>kann ech d'Distanz vun hei "aushuelen"?
    Merci nach eemol,
    Timmy S

  41. 60

    ok, alles wat ech probéiert hunn funktionnéiert net. Ech mengen, wat ech hunn funktionnéiert, awer d'Distanzen si wäit ewech.

    Konnt iergendeen eventuell gesinn wat mat dësem Code falsch ass?

    if(isset($_POST['submitted'])){ $z = $_POST['Postcode']; $r = $_POST['radius']; echo "Resultater fir ".$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. city,z1.state VUN mrk m, zip z1, zip z2 WOU m.zipcode = z1.zipcode AN z2.zipcode = $z AN (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 ) ) oder <= $ (mysql_error()); while($row = mysql_fetch_array($sql)) { $store1 = $row['MktName'].""; $store = $row['LocAddSt'].""; $store .= $row['LocAddCity'].”, “.$row['LocAddState']." ".$row['Postcode']; $latitude1 = $row['lat']; $longitude1 = $row['lon']; $latitude2 = $row['y1']; $longitude2 = $row['x1']; $city = $row['Stad']; $stat = $row['Staat']; $dis = getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi'); // $dis = Distanz($lat1, $lon1, $lat2, $lon2); $verifizéiert = $row['verifizéiert']; if($verified == '1'){ echo ""; echo "".$store.""; echo $dis. "Meilen ewech"; echo ""; } else { echo "".$store.""; echo $dis. "Meilen ewech"; echo ""; } }}

    meng functions.php Code
    Funktioun 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)) ); $Distanz = acos($Distanz); $Distanz = rad2deg($Distanz); $ Distanz = $ Distanz * 60 * 1.1515; switch($unit) { Fall 'Mi': break; Fall 'Km' : $Distanz = $Distanz * 1.609344; } zréck (ronn($Distanz,2)); }

    Merci am Viraus

  42. 61
  43. 62

    Hey Douglas, super Artikel. Ech hunn Är Erklärung vun de geographesche Konzepter an de Code wierklech interessant fonnt. Mäin eenzege Virschlag wier de Code fir ze weisen (wéi Stackoverflow, zum Beispill) ze Raumen an z'entdecken. Ech verstinn datt Dir Plaz spuere wëllt, awer konventionell Codeabstand / Indentatioun géif et vill méi einfach maachen fir mech als Programméierer ze liesen an ze dissektéieren. Wéi och ëmmer, dat ass eng kleng Saach. Weiderhin déi super Aarbecht.

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

    et schéngt méi séier (mysql 5.9) zweemol d'Formel an der Auswiel ze benotzen a wou:
    $formula = “(((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)”;
    $sql = 'SELECT *, '.$formula.' als Distanz VUN Dësch WHERE '..$formula.' <= '.$Distanz;

  51. 71
  52. 72

    Villmols Merci fir dësen Artikel ze schneiden, et ass ganz hëllefräich.
    PHP gouf fir d'éischt als einfache Skriptplattform mam Numm "Personal Home Page" erstallt. Hautdesdaags ass PHP (de Kuerz fir Hypertext Preprocessor) eng Alternativ vun der Microsoft Active Server Pages (ASP) Technologie.

    PHP ass eng Open Source Server-Säit Sprooch déi benotzt gëtt fir dynamesch Websäiten ze kreéieren. Et kann an HTML agebonne ginn. PHP gëtt normalerweis a Verbindung mat enger MySQL Datebank op Linux / UNIX Webserver benotzt. Et ass wahrscheinlech déi populärste Skriptsprooch.

  53. 73

    Ech hu fonnt datt d'Léisung net richteg funktionnéiert.
    Ech muss änneren op:

    $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) als Distanz VUN `register` ";

  54. 75
  55. 76

    Moien, w.e.g. brauch ech wierklech Är Hëllef bei dësem.

    Ech hunn eng Ufro op mäi Webserver gemaach http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $breedegrad
    -2.23389 = $ Längt
    an 20 = d'Distanz déi ech wëll recuperéieren

    Wéi och ëmmer andeems Dir Är Formel benotzt, recuperéiert se all Reihen a mengem DB

    $results = 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) als Distanz VUN Markéierer HAVE Distanz >= ".$Distanz ));

    [{"id":1,"Name":"Frankie Johnnie & Luigo Too","address":"939 W El Camino Real, Mountain View, CA","lat":37.386337280273,"lng":-122.08582305908, "Distanz":16079.294719663},{"id":2,"Numm":"Amici's East Coast Pizzeria","Adress":"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,"Distanz":16078.381373826},{"id":4,"name":"Round Table Pizza: Mountain View","Adress":"570 N Shoreline Blvd, Mountain View, CA", "lat":37.402652740479,"lng":-122.07935333252,"Distanz":16077.420540582},{"id":5,"Name":"Tony & Alba's Pizza & Pasta","Adress":"619, Escuela" View, CA","lat":37.394012451172,"lng":-122.09552764893,"Distanz":16078.563225154},{"id":6,"Numm":"Oregano's Wood-Fired Pizza","Adress":"4546" El Camino Real, Los Altos, CA","lat":37.401725769043,"lng":-122.11464691162,"Distanz":16077.937560795},{" id":7,"Numm":"D'Baren a Grillen","Adress":"24 Whiteley Street, Manchester","lat":53.485118865967,"lng":-2.1828699111938,"Distanz":8038.7620112314}]

    Ech wëll just Zeile mat 20 Meilen recuperéieren mee et bréngt all Zeile. W.e.g. wat maachen ech falsch

  56. 77

    Ech sichen no enger ähnlecher Ufro awer sinn e bëssen eropgaang - kuerz, dëst ass all Koordinaten bannent 2 Meilen vun all Koordinaten ze gruppéieren an dann ze zielen wéivill Koordinaten an all Grupp an nëmmen eng Grupp erausginn déi déi meescht Koordinaten huet - och wann Dir hutt méi wéi eng Grupp tëscht de Gruppen déi déi meeschte Koordinaten hunn - gitt einfach déi zoufälleg Grupp aus de Gruppen mat der selwechter gréisst Zuel eraus -

Wat denks du?

Dëse Site benotzt Akismet fir Spam ze reduzéieren. Léiert wéi Är Kommentarfaten veraarbecht ginn.