2010-06-29 8 views
0

J'utilise MySQL GIS et Spatial Extensions.Trouver des régions qui incluent un point avec MySQL

J'ai une table avec des régions "circulaires" décrites par la latitude, la longitude et le rayon.

J'ai besoin d'une requête pour obtenir toutes les lignes dont la région inclut un point donné défini par une latitude et une longitude. Les régions "circulaires" peuvent se croiser et donc le point peut tomber dans plus d'une région.

+0

Il y a une question similaire ici: http://stackoverflow.com/questions/1078386/see-if-lat-long-falls-within-a-polygon-using-mysql La réponse de Paul Dixon (qui est fondamentalement que vous ne pouvez pas le faire en utilisant les fonctions MySQL GIS) correspond à ma compréhension de la situation. – Mike

Répondre

0

Je suis venu avec une solution et je voudrais l'afficher ici juste pour avoir une opinion à ce sujet. Notez que la structure de la table ci-dessus a été légèrement modifiée en ajoutant une nouvelle colonne "POINT d'emplacement" qui est construite en utilisant la latitude et la longitude à chaque insertion.

CREATE PROCEDURE GetRequestsAroundLocation(IN lat DOUBLE, 
              IN lon DOUBLE) 
BEGIN 
    SET @answerLocation = GeomFromText(CONCAT('POINT(', lat, ' ', lon, ')')); 

    SELECT id, token, latitude, longitude FROM Request 
    WHERE answerId = -1 AND 
     Intersects(@answerLocation, 
        GeomFromText(CONCAT('POLYGON((', latitude - radius, ' ', longitude - radius, ',', 
                 latitude + radius, ' ', longitude - radius, ',', 
                 latitude + radius, ' ', longitude + radius, ',', 
                 latitude - radius, ' ', longitude + radius, ',', 
                 latitude - radius, ' ', longitude - radius, '))'))) AND 
     SQRT(POW(ABS(lat - latitude), 2) + POW(ABS(lon - longitude), 2)) < radius; 
END //   
Questions connexes