2016-08-09 49 views
1

Wir haben 2 Tabellen, die Reiseanfragen eine für Kunden und eine vom Fahrer speichern. Wir müssen den Fahrern, die die MYSQL 5.7 GIS-Funktion verwenden, den Fahrern und nächsten Kunden die nächstgelegenen Fahrer zeigen.Berechnung der nächsten Orte mit Mysql GIS-Funktionen

Beide Tabellen speichern den Breiten- und Längengrad der Anforderungen.
Also, wenn ein Fahrer eine Reise anfordert, möchte ich Entfernungen berechnen und die nächsten Kunden in 10km Umkreis und ihre Standorte dem Fahrer aus der Kundenanfrage Tabelle zeigen.

Ich versuchte die st_distance_sphere, die gut für (Point,Point) funktioniert. Aber wenn ich eine multipoint und eine point gebe, gibt es Null zurück.

Shoudnot multipoint,point zurück Strecken zwischen allen Punkten auf dem ersten Platz auf den Punkt auf dem 2. Platz?

Bitte korrigieren Sie, wenn ich falsch liege. Die Abfrage, die ich versuchte, ist unten.

SELECT 
    round(
    st_distance_sphere(
     st_geomfromtext(
     'Multipoint(72.87765590000004 17.385044,73.8567436 18.5204303)' 
    ), 
     st_geomfromtext(
     'POINT (73.8567436 18.5204303)' 
    ) 
    ) 
) as dist; 

Antwort

1

Es gibt den kürzesten Abstand zwischen den beiden Geometrien zurück. In Ihrem Mehr Sie

Multipoint(72.87765590000004 17.385044,73.8567436 18.5204303) 

Der zweite Satz von Punkten haben hier sind genau die, wie

POINT (73.8567436 18.5204303)' 

So ein Abstand von 0 ist die richtige Antwort.

Wenn Sie den Abstand von einem Punkt zu mehreren verschiedenen Stellen finden möchten, müssen Sie sie als separate Datensätze in der Tabelle haben und eine Abfrage wie folgt haben:

SELECT 
    round(
    st_distance_sphere(some_point-field, 
     st_geomfromtext(
     'POINT (73.8567436 18.5204303)' 
    ) 
    ) 
) as dist; 
+0

Ich nahm an, es gibt Entfernungen zu allen Punkten. Wie könnte ich Entfernungen zu allen Punkten bekommen? Ich meine jede Funktion, die verfügbar ist? – coderunner

+0

Bitte beachten Sie das Update – e4c5

+0

ja, die obige Abfrage wird es tun (mit some_point_field ist die letzte bekannte Position von jedem Taxi (existiert als Zeilen in der Tabelle)). Vielleicht möchten Sie auch sehen, ST_Within – e4c5