2016-08-29 2 views
0

Ich muss überprüfen, ob die Entfernung zwischen zwei geografischen Punkt weniger als N km ist. Ich versuche, diese Abfrage auszuführen:Mariadb: Geographie

select st_distance(
    ST_GeomFromText('point(45.764043 4.835658999999964)', 4326), 
    ST_GeomFromText('point(45.750371 5.053963)', 4326) 
) < :n 

Aber es funktioniert nicht, weil:

Bisher ist die SRID Eigenschaft nur ein Dummy in MySQL ist, es als Teil einer Geometrien gespeichert Metadaten, aber alle tatsächlichen Berechnungen ignorieren sie und Berechnungen erfolgen unter der Annahme einer euklidischen (planaren) Geometrie.

(https://mariadb.com/kb/en/mariadb/st_transform-missing/)

Ihr Ziel ist es, diesen Abstand zu dem metrischen Abstand zu konvertieren oder die N den Grad zu konvertieren.

Wie kann ich es tun? Vielleicht kennen Sie eine bessere Lösung?

P.S. Ich brauche eine Lösung basierend auf den räumlichen Methoden (oder besser für die Leistung).

Antwort

0

Ich glaube nicht, dass die „Entfernung“ -Funktion verfügbar ist (noch) nicht in SPATIAL. Es gibt eine regelmäßige FUNCTION in https://mariadb.com/kb/en/latitudelongitude-indexing/, die die Arbeit erledigt. Die Argumente und die Ausgabe sind jedoch skaliert lat/lng (10000 * Grad). Der Code könnte geändert werden, um die Skalierung zu vermeiden, aber er wird im Zusammenhang mit dieser Blogseite benötigt.

+0

Leider ist es zu hart codiert. Wirklich, es gibt keine Lösungen out of the box oder in einigen Erweiterungen? –

+0

Oracle MySQL 5.7.6 hat 'ST_Distance_Sphere()' und 'ST_MakeEnvelope()'. Ich weiß nicht, wann MariaDB es hinzufügen wird. –