Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich Polygone in MySQL, die einem Lat,Long nahe kommen

Eine langsame Version (ohne räumliche Indizes):

SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Um die räumlichen Indizes nutzen zu können, müssen Sie Ihre Tabelle denormalisieren, sodass jeder Polygonscheitel in einem eigenen Datensatz gespeichert wird.

Erstellen Sie dann den SPATIAL INDEX auf das Feld, das die Koordinaten der Scheitelpunkte enthält, und geben Sie einfach diese Abfrage ein:

SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Die Dinge werden viel einfacher, wenn Sie UTM speichern Koordinaten in Ihrer Datenbank statt Längen- und Breitengrad.