Поиск регионов, которые включают точку с MySQL - PullRequest
0 голосов
/ 29 июня 2010

Я использую MySQL ГИС и Пространственные расширения.

У меня есть таблица с "круглыми" областями, описанными широтой, долготой и радиусом.

Мне нужен запрос, чтобы получить все строки, чья область включает данную точку, определенную широтой и долготой. «Круглые» области могут пересекаться, и поэтому точка может попадать в более чем одну область.

1 Ответ

0 голосов
/ 30 июня 2010

Я придумала решение, и я хотела бы опубликовать его здесь просто для того, чтобы иметь мнение об этом.Обратите внимание, что приведенная выше структура таблицы была немного изменена путем добавления нового столбца «POINT местоположения», который строится с использованием широты и долготы при каждой вставке.

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 //          
...