Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni poligoni vicini a un lat,long in MySQL

Una versione lenta (senza indici spaziali):

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

Per utilizzare gli indici spaziali, devi denormalizzare la tua tabella in modo che ogni vertice del poligono sia memorizzato nel proprio record.

Quindi crea l'SPATIAL INDEX sul campo che contiene le coordinate dei vertici e basta emettere questa query:

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

Le cose saranno molto più facili se memorizzi UTM coordinate nel database anziché latitudine e longitudine.