Suchen Sie mit Hilfe von MySQL Spatial Extensions den nächsten Zeilenstring von einem Punkt

8

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?

    
John Hancock 02.10.2012, 03:29
quelle

3 Antworten

2

Sie können zwei Funktionen in der Datenbank erstellen:

  1. Entfernung: Dies gibt Ihnen die Entfernung zwischen zwei Punkten
  2. DistanceFromLine: Hier wird die Entfernung von jedem Punkt in der Linie berechnet und Sie erhalten die kürzeste Entfernung.

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%
sumitarora 23.01.2013 13:12
quelle
0

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%     
Scott Kraus 08.08.2017 05:19
quelle
0

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.

    
user3108425 02.03.2018 21:00
quelle

Tags und Links