Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha polígonos perto de um lat, long no MySQL


Uma versão lenta (sem índices espaciais):
SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Para fazer uso dos índices espaciais, você precisa desnormalizar sua tabela para que cada vértice do polígono seja armazenado em seu próprio registro.

Em seguida, crie o SPATIAL INDEX no campo que contém as coordenadas dos vértices e apenas emita esta consulta:
SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

As coisas serão muito mais fáceis se você armazenar UTM coordenadas em seu banco de dados em vez de latitude e longitude.