2012-12-19 11 views
7

Ich erstelle eine mobile App mit Phonegap und JQuery.Gleichen Längen- und Breitengrad von der Datenbank erhalten

Die App sammelt die Länge und Breite der Benutzer und speichert sie in einer Datenbank (mit einem PHP-Skript - Web-Service), und mit einem Algorithmus erkennt es, ob es Verkehr gibt oder nicht. Was ich brauche ist, alle Längen- und Breitenwerte aus der Datenbank zu erfassen, die nahe beieinander liegen, sagen wir im selben Straßen-/200m-Bereich.

Nehmen wir an, Sie haben eine Liste in der Datenbank mit 5 lon/lat, die nebeneinander (in der gleichen Straße A), 3 lon/lat, die einander in einigen Street B sind, und einige andere Benutzer darstellen zufällig in anderen Straßen. Kann mir jemand sagen, wie ich die lon/lat-Werte, die nahe beieinander liegen, erkennen kann? Die Werte speichere ich als separate Werte in der MySQL-Datenbank, dh ein Feld für die Länge und ein anderes für die Breite.

Sobald ich den lon/lat erreiche, die nahe beieinander liegen, dann müsste ich den Mittelpunkt zwischen den Benutzern in Straße A und den Benutzern in Straße B finden, um als Verkehrsstau zu markieren (basierend auf einigen anderen Erkennungen).

+0

Je nach Umfang Ihrer Anwendung und wenn sie eine Option, die Sie mögen, anstatt mit PostGIS betrachten. Da es viel bessere SPATIAL Unterstützung als MySQL hat. Dies in PostGIS tun wäre sehr einfach zu sehen http://gis.stackexchange.com/q/27878/3591 –

+0

Hallo Markus, die Skala der Anwendung ist ziemlich einfach. Wir waren in Anbetracht PostGIS aber zurückgegriffen MySQL als wir Hosting gefunden, die billiger war ... Ansonsten ist es wahr PostGIS bessere räumliche Merkmale aufweist:/ – user1809790

Antwort

5

Sie sollten in die Haversine Formel schauen. Siehe unten:

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; 

Dies wird alle Datensätze zurückgeben, die sich innerhalb von 25 Meilen von dem Eingabe Long/Lat-Paar befinden.

+0

MIT Abstand <25 der Abstand Begriff hier - ist es etwas von MySQL erkannt? Einige Funktionen oder etwas Ähnliches? – user1809790

+0

Bitte überprüfen Sie die ans es einen Alias ​​‚Distanz‘ zu machen –

+0

@ M4K Ich denke, das obige Snippet mir alle long/lat bekommen würde, dass beide in Strasse A und Straße B. Gibt es irgendeine Art und Weise zwischen den beiden allerdings zu unterscheiden? Was ich tun müsste, ist, die Punkte zu bekommen, die nahe beieinander liegen (wie oben), und dann alle Punkte auf Straße A oder B zu bekommen und ihren Mittelpunkt zu finden. – user1809790

Verwandte Themen