Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir des polygones proches d'un lat, long dans MySQL

Une version lente (sans index spatiaux) :

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

Pour utiliser les index spatiaux, vous devez dénormaliser votre table afin que chaque sommet de polygone soit stocké dans son propre enregistrement.

Créez ensuite l'SPATIAL INDEX sur le champ qui contient les coordonnées des sommets et lancez simplement cette requête :

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

Les choses seront beaucoup plus faciles si vous stockez UTM coordonnées dans votre base de données plutôt que la latitude et la longitude.