Abfragepunkte innerhalb eines bestimmten Radius in MySQL

8

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 Punkte innerhalb eines n Meilenradius eines bestimmten Punkts;
  • die Entfernung jedes zurückgegebenen Punktes vom angegebenen Punkt

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.

    
gjb 09.03.2010, 18:30
quelle

4 Antworten

3

Danke euch beiden für eure Antworten.

Ich fand schließlich die Lösung bei Ссылка .

    
gjb 10.03.2010, 12:48
quelle
3

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

    
srcspider 13.09.2016 11:25
quelle
2

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.

    
Lukáš Lalinský 09.03.2010 18:36
quelle
0

Ich habe das für einen Punkt innerhalb des Kreises mit Radius

getan %Vor%

Details und eine weitere Beispielabfrage hier Ссылка , hoffe das hilft

    
dexxtr 23.04.2014 05:11
quelle