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.
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.
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); }
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.
Villmools Merci Peter a Kerry! Wann Dir gär un GIS Projete schafft, géif ech recommandéieren:
Villmols Merci... 😀
Ech hunn de ganzen Dag no Distanzberechnungen gesicht an den Harversine Algorithmus fonnt, merci fir Iech d'Beispill ze ginn wéi een et an eng sql Ausso setzt. Merci a Gréiss, Daniel
Freet Iech ze hëllefen, Schinne Frënd!
Elo sinn ech op der Sich no enger 'in Polygon' PHP Funktioun déi eng Array vu sequenzéierte Breedegraden a Längt Koordinaten hëlt an erausfannen ob en anere Punkt bannent oder ausserhalb vum Polygon ass.
Ech hunn de fonnt Equatioun fir erauszefannen ob e Punkt an engem Polygon!
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.
Hallo David,
Wann Dir iergendeng Aart vu GROUP BY Ausso maacht, braucht Dir HAVING. Ech maachen dat net am Beispill hei uewen.
Doug
Zënter MySQL 5.x kënnt Dir keen Alias op enger WHERE Klausel benotzen http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
Benotzt HAVING amplaz WHERE an den uewe genannten Ufroen
Villmools Merci. Dir hutt super Aarbecht gemaach Dat ass d'Saach wat ech eigentlech wëll. Villmols merci.
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.
Ech si geseent Lieser vill méi clever ze hunn wéi ech!
🙂
Déi uewe genannte Formel spuert mir vill Zäit. Villmools Merci.
Ech muss och tëscht dem NMEA Format an Degrees wiesselen. Ech hunn eng Formel op dëser URL um Enn vun der Säit fonnt. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
Weess iergendeen wéi dëst z'iwwerpréiwen?
Merci!
Harry
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
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.
Villmols Merci fir de Skript a mysql geschriwwen, hu just e puer kleng Upassunge missen maachen (HAVE) 🙂
Gutt Aarbecht
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 ^_^
merci vill funktionnéiert super
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.
Klenge Feeler am Beispill ... dat wier fir bannent 50 km (net 100) well mir de "Radius" vun eisem ... Quadrat kucken.
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!
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.
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 ...
Ersetzen "WHERE Distanz" duerch "HAVING Distanz".
Wierker wéi e Charme, merci, Douglas!
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.
Moien Douglas,
villmools Merci fir dësen Artikel - Dir hutt mech just vill Zäit gespuert.
Pass op dech op,
nimrod @Israel
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.
Merci vill Wierker gutt
Villmols Merci fir dës Formule. Et raséiert e puer Zäit op engem Buttek Standuert Projet datt op mech giess.
Merci e Bündel. Dës kleng Zeil vum Code huet mir eng bedeitend Zäit an engem Geschäft Location Projet gespuert!
#1054 - Onbekannt Kolonn 'Distanz' an 'wou Klausel'
approuvéieren
D'selwecht hei! Wat ass de Problem :-/? wéi de "Distanz" ze léisen - Kolonn Problem? Hëlleft eis, wann ech glift!! 🙂
Probéiert HAVING ze benotzen amplaz WHERE
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
amplaz WHERE Klausel benotzt:
Distanz <50
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!
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!
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!
Villmols Merci!
Villmols Merci!
Ech denken net datt de Code méi erschéngt. Vläicht ass et firefox?
Ech hu just souwuel am Firefox a Chrome getest an et ass erschéngt. Versich et nach eng Kéier?
Salut. Villmols Merci. Dëst funktionnéiert wéi e Charme.
Villmols Merci Douglas. Dëst funktionnéiert perfekt.
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?
Tim, fir eng voll Erklärung vun der Haversine Formel (dat ass kee Code), kuckt de Wikipedia Artikel: http://en.wikipedia.org/wiki/Haversine_formula
Schéin! Dëst huet mir immens gehollef!
Great Saachen Douglas. Hutt Dir probéiert de Kräizungspunkt ze kréien mat der Laang / Lat / Lager vun zwee Punkten?
Hunn dat nach net gemaach, Khanh!
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!
Ech kréien ëmmer Feelermessage: Onbekannt Kolonn 'Distanz' an 'wou Klausel' op der MySQL Query.
Peter, liest w.e.g. duerch déi aner Kommentarer. Et schéngt, datt e puer Leit eng aner Syntax fir WHERE / HAVING hu misse benotzen.
Merci fir dëse super Artikel! Just de Code op menger DB getest an huet super geschafft!
Douglas, merci fir dësen erstaunleche Code. Huet mäi Kapp geknackt wéi ech dëst op mengem GPS Gemeinschaftsportal maachen. Du hues mech Stonnen gespuert.
Super ze héieren, Ash!
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
egal, ech hunn erausfonnt wéi d'"Funktioun" an php funktionnéiert
$dis=getDistanceBetweenPointsNew($userLati, $userLongi, $lati, $longi, $unit = 'Km')
villmols merci!!
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
Merci fir dësen Artikel. Schafft gutt mat mengem Code. 🙂
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.
Merci! Ech hunn de Post e bësse geännert ... awer d'Equatioune huelen sou vill Plaz an si sou laang datt ech net sécher sinn datt et ze vill hëlleft.
Villmools Merci.
Hei wa mir mat der Funktioun benotzen, kréie mir eng Zort Distanz
Ech wäert d'Distanz tëscht zwee Staat net berechnen
Villmools Merci fir tan hermoso codigo...
Thisd ech gutt Cosinus Funktiounen. Ech weess net Mathematik, mee merci!
Super Aarbecht… 🙂 (y)
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;
Merci…
net schaffen wann
"WOU Distanz"
schaffen wann
„Distanz“
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.
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` ";
Merci Kupendra!
merci Här wroking perfekt .. mee ech hunn eng Fro wann ech ouni Dezimalpunkt erausginn wëll dann wat kann ech maachen ..?
Merci am Viraus.
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
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 -