sql >> Base de Datos >  >> RDS >> Mysql

Obtenga polígonos cerca de un lat, long en MySQL

Una versión lenta (sin índices espaciales):

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

Para hacer uso de los índices espaciales, debe desnormalizar su tabla para que cada vértice de polígono se almacene en su propio registro.

Luego crea el SPATIAL INDEX en el campo que contiene las coordenadas de los vértices y simplemente emita esta consulta:

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

Las cosas serán mucho más fáciles si almacenas UTM coordenadas en su base de datos en lugar de latitud y longitud.