Umkreis um eine Koordinate berechnen und alle Koordinaten in DB suchen

Hallo,

auch wenn dieser Thread schon recht alt ist, hole ich ihn einmal aus der Versenkung - schließlich gibt es immer wieder Linkbacks dazu...

Inzwischen hat sich die Struktur der OpenGeoDB etwas geändert, deshalb habe ich einen kleinen Artikel / Tutorial dazu geschrieben. Dieser ist unter http://www.mamat-online.de/umkreissuche/opengeodb.php zu finden.

Über Feedback würde ich mich sehr freuen. Viel Spaß :)
 
Mathematisch ist mir das auf jeden Fall viel zu hoch und ich finde es bewundernswert. Ich wollte mich in nächster Zeit aber auch mal mit dem Thema auseinandersetzen und hoffte darauf eine fertige Lösung zu finden. Daher wird mir diese Thema und dein Beispiel sicher auch weiter helfen, danke.

Bei meiner Recherche habe ich mir eine Google Code FAQ Seite gebookmarked auf der man eine Query findet:

Code:
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

"find the closest 20 locations that are within a radius of 25 miles to the 37, -122 coordinate"
Nur wie kommt man an die Koordinaten (37,122)?
So könnte man einen Umkreis von 25 Meilen abfragen.
"To search by kilometers instead of miles, replace 3959 with 6371"

Das wirkt auf mich, für mich als Anwender, als super einfach einzusetzen. Jetzt
frage ich mich nur, da eure Lösungen mir nicht so simple erscheinen, ob mit dem
Beispiel evtl doch was nicht ganz in Ordnung ist (es irgendwelche Nachteile mit sich
bringt usw., das Query wird hier ja nicht an einer kompletten Koordinaten DB durchgeführt).
 
Zuletzt bearbeitet:
SQL:
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Ich würd mal sagen durch die 37 und -122 in dem Query kommt man an die Koordinaten. Wenn man die Zahl 37 und die Zahl -122 ersetzen würde mit anderen Zahlen bekommt man mit Sicherheit den Umkreis von 25 Meilen um diese Koordinate. Man müsste aber beachten das die 37 zweimal in dem Query vorkommt. Also müsste man auch beide ersetzten.
 
Zuletzt bearbeitet von einem Moderator:
Ich habe eine Geosuche auf Basis der Googlemap gebaut.
Dort habe ich die Abfrage des Users an Google geschickt und den vermeintlichen Ort in Geokoordinaten erhalten, aufgrund dieser Informationen habe ich dann den Code benutzt den ich auf http://geokodierung.net/
gefunden habe. Habe ihn noch ein bisschen angepasst, aber das ist dann kein Problem mehr.
 
Zuletzt bearbeitet:
Hi,

die Mathematik hinter Google's Vorschlag werde ich mir mal ansehen. Prinzipiell scheint es aber recht ähnlich gelagert zu sein.

Um Werbung für meinen Vorschlag zu machen: die trigonometrischen Funktionen sind recht aufwändig zu berechnen (z. B. über Tabellen) - Subtraktion und Quadrieren (wie in meinem kurzen Artikel) sollte deutlich schneller sein ;)

Die 37 und -122 werden einfach die Länge und Breite eines Ortes sein (nämlich San Francisco: 37° 47? N, 122° 25? W laut Wikipedia). Im Rechtssystem werden Angaben nach Norden und Osten positiv, nach Süden und Westen mit negativem Vorzeichen betrachtet, daher +37 für 37° N und -122 für 122° W.

Mamphil
 
Hallo Zusammen,

Dieses nun mitlerweile sehr alte Thema würde ich auch gerne nochmal hoch holen :)
Gibt es mitlerweile eine ideale Lösung? Ich habe auch mit der ersten Formel und einer "Fehlertoleranz" von 1.45 gearbeitet und bekomme so schon sehr akzeptable Werte. Aber eben nicht zu 100% genau :/
Ich würde mich freuen wenn jemand nochmals eine Lösung vorstellen könnte.

Viele Grüße
Geri
 

Neue Beiträge

Zurück