Ich verwende MySQL Spatial Extensions , um Daten über Straßen und Straßen zu speichern Hotels. Ich speichere die Hoteldaten als Point, während ich die Straßendaten als LineString abspeichere. Die Tabellen sehen so aus.
%Vor%Die Visualisierung einer Instanz wäre so.
Mein Problem ist eine Zahl N und ein Punkt P, was ist die SQL-Abfrage, um N nächstgelegene Straßen von Punkt P zu finden? Die Entfernung wird durch den kleinsten senkrechten Abstand zwischen einem Segment in der Straße und dem Punkt wie oben gezeigt definiert. (obwohl in der Realität die nächste Entfernung zwischen dem Autobahntor und einem Hotel sein sollte, aber in diesem Fall können wir die Autobahn von jedem Punkt aus betreten: P)
Wenn es für dieses Problem keine einzige SQL-Anweisungslösung gibt, sind eine SQL-Zwischenabfrage und eine Nachbearbeitung für mich akzeptabel. Aber was wäre eine effiziente SQL-Abfrage und wie die Daten nachbearbeitet werden?
Sie können zwei Funktionen in der Datenbank erstellen:
Vergleichen Sie den Abstand zwischen Ihrem Punkt und Linien und wählen Sie den kürzesten.
Hier ist die Distanzfunktion
%Vor%Hier ist DistanceFromLine Funktion:
%Vor%Das war eine sehr nützliche Antwort für mich, aber ich benutze MySQL 5.7.18, das fortgeschrittenere oder einfach andere Geo-Query-Funktionen hat. Die angegebene Entfernungsfunktion wird nicht mehr benötigt. Verwenden Sie ST_Distance_Sphere. Also hier ist ein Update des gleichen Codes, um DistanceFromLine kompatibel mit modernen (5.7.6+) MySQL zu machen ...
%Vor%Ich habe auch an diesem Thema gearbeitet, aber leider ist die Suche nach der nächsten Straße für Hotels eine ungünstige Lösung. Ich habe festgestellt, dass der Eingang der Straße ist die definitive Antwort. Mit anderen Worten die Adresse. Dies bedeutet, dass Sie eine Adresstabelle und übereinstimmende Punkte auf nächstgelegene Adressstraße haben.
Tags und Links mysql geospatial