sql >> Database >  >> RDS >> Mysql

Krijg polygonen dicht bij een lat,long in MySQL

Een langzame versie (zonder ruimtelijke indexen):

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

Om gebruik te maken van de ruimtelijke indexen, moet u uw tabel denormaliseren, zodat elk hoekpunt van de polygoon in zijn eigen record wordt opgeslagen.

Maak vervolgens de SPATIAL INDEX op het veld dat de coördinaten van de hoekpunten bevat en voer deze vraag uit:

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

De dingen zullen veel gemakkelijker zijn als u UTM opslaat coördinaten in uw database in plaats van breedte- en lengtegraad.



  1. Back-up van database(s) met behulp van query zonder mysqldump

  2. MySQL ODBC 5.1-stuurprogramma retourneert verkeerd gegevenstype naar ADODB

  3. Hoe MySQL-databases weergeven op een PHP-script?

  4. Geldige tijdreeksindelingen voor SQLite-datum-/tijdfuncties