Найти ближайшие места по широте и долготе - PullRequest
1 голос
/ 07 января 2011

У меня есть этот сайт, на котором хранятся данные о широте и долготе некоторых мест, и я хочу отобразить ближайшие места (скажем, в радиусе 10 км) определенного места.

Как мне найти в моей таблице MySQL эти места?

1 Ответ

4 голосов
/ 07 января 2011

Я ответил на этот вопрос несколько лет назад на Google Ответы и еще недавно на Uclue .

Я должен отметить, что предпочтительным техническим соглашением является представление долготы на Западе в виде отрицательных значений, но иногда это не наблюдается. Это не будет иметь большого значения, если вы не вычисляете по меридиану, противоположному главному меридиану (где обернута долгота), но вам нужно знать о вашей базе данных и согласованности с другими географическими хранилищами.

Добавлено: Как указано в вопросе Uclue, связанном выше, цель состоит в том, чтобы вычислить две пары значений, MINLATITUDE / MAXLATITUDE и MINLONGITUDE / MAXLONGITUDE, чтобы все точки находились в пределах определенного расстояния от заданного местоположения включены в результаты запроса SQL:

SELECT * FROM Locations  
    WHERE (latitude  between MINLATITUDE  and MAXLATITUDE )  
    and   (longitude between MINLONGITUDE and MAXLONGITUDE)  

Начиная с MySQL 5.0, мы можем связать вычисления пар MIN / MAX вместе с SELECT в удобной хранимой процедуре. Мы даже можем просмотреть результаты такого запроса с помощью курсора и проверить точное расстояние «большого круга», если такая точность желательна. Однако я предполагаю, что упрощенный подход, динамически создающий вышеупомянутый запрос из вызывающей среды, такой как Python или C ++, будет иметь смысл для большинства приложений (чтобы минимизировать работу, выполняемую сервером базы данных).

Дайте мне знать, если мне следует уточнить эти возможности.

...