Ich habe die folgende MySQL-Tabelle erstellt, um Längen- und Breitenkoordinaten zusammen mit einem Namen für jeden Punkt zu speichern:
%Vor%Ich versuche zu fragen:
Alle Beispiele, die ich gefunden habe, beziehen sich auf die Verwendung eines minimalen Begrenzungsrechtecks (MBR) anstelle eines Radius. Die Tabelle enthält ungefähr 1 Million Punkte, daher muss diese Notwendigkeit so effizient wie möglich sein.
Für MySQL 5.7 +
Gegeben haben wir die folgende einfache Tabelle,
%Vor%Mit den folgenden einfachen Daten,
%Vor%Sie würden die Punkte innerhalb eines gegebenen Bereichs eines anderen Punktes (Anmerkung: wir müssen innerhalb eines Polygons suchen) mit der folgenden Kombination von st Funktionen erhalten:
%Vor%Sie sollten so etwas wie folgt sehen:
%Vor%Wenn wir die Abhängigkeit entfernen, sieht das Ergebnis für den Testpunkt wie folgt aus:
%Vor%Note 1 : Das Feld heißt Inglat, da dies die richtige Reihenfolge ist, wenn Sie Punkte als (x, y) betrachten und auch die Reihenfolge der meisten Funktionen (wie Punkt) den Parameter akzeptieren
Hinweis 2 : Sie können räumliche Indizes nicht wirklich nutzen, wenn Sie Kreise verwenden. Beachten Sie auch, dass das Punktfeld so eingestellt werden kann, dass es null akzeptiert. Räumliche Indizes können es jedoch nicht indexieren, wenn es nullfähig ist (alle Felder im Index müssen nicht null sein).
Hinweis 3 : st_buffer wird (in der Dokumentation) als schlecht für diesen Anwendungsfall angesehen
Hinweis 4 : Die obigen Funktionen (insbesondere st_distance_sphere) werden als schnell, aber nicht unbedingt supergenau dokumentiert; Wenn Ihre Daten supersensitiv sind, fügen Sie der Suche ein wenig Spielraum hinzu und führen Sie eine Feinabstimmung auf die Ergebnismenge durch
Radius ist nicht effizient indexierbar. Sie sollten das umgebende Rechteck verwenden, um schnell die Punkte zu erhalten, nach denen Sie wahrscheinlich suchen, und dann Punkte außerhalb des Radius zu filtern.
Tags und Links mysql database gis spatial mysql-spatial