Как получить ближайший значимый населенный пункт по широте и долготе?

В настоящее время я пытаюсь изменить геокодирование ряда координат широты / долготы с помощью веб-сервисов Virtual Earth/Bing Maps. Несмотря на то, что я могу успешно получить адрес для позиций, мне также нужно иметь возможность найти ближайший значимый населенный пункт для этой позиции, чтобы я мог отображать курс и расстояние до центра ближайшего города / города / мегаполиса и т. Д. Это для случаи, когда местоположение перемещается между местоположениями, например, на шоссе / автомагистрали.

У кого-нибудь есть идеи, как это сделать, так как я уже несколько дней бьюсь головой об это, и я никуда не попал!

Ура заранее...

5 ответов

Решение

Я думаю, можно с уверенностью предположить, что ближайший город всегда достаточно близок по сравнению с размером Земли, поэтому вы можете использовать простой треугольник Пифагора.

Предположим, вы находитесь в точке (lat0, long0), а пробный город - в точке (lat1, long1).

Горизонтальное (EW) расстояние примерно

d_ew = (long1 - long0) * cos(lat0)

Это умножается на cos(lat0) для учета линий долготы, сближающихся на высокой широте.

Вертикальное (NS) расстояние легче

d_ns = (lat1 - lat0)

Таким образом, расстояние между двумя точками

d = sqrt(d_ew * d_ew + d_ns * d_ns)

Вы можете усовершенствовать этот метод для более сложных задач, но этого должно быть достаточно для ближайшего города.

Для сравнения расстояний будет хорошо сравнить d в квадрате, что означает, что вы можете опустить операцию sqrt.

Попробуйте воспользоваться службой определения местоположения в Википедии, описанной здесь http://www.geonames.org/export/wikipedia-webservice.html

Если вы можете найти список координат для крупных населенных пунктов, вот код для расчета расстояний большого круга на основе координат.

Я бы сделал следующее:

Таблица 1:

T_CityPopulation

Поля:

CityTownInfo, население,LonLat

Затем вычислите расстояние между вашими текущими значениями LonLat для каждой записи в таблице 1, используя пороговое значение, игнорирующее города / города за x миль. Затем отсортируйте результаты по населению.

РЕДАКТИРОВАТЬ:

Даже если вы не хотите поддерживать таблицу, ее нужно где-то хранить, я думаю, что если вы поддерживаете ее самостоятельно, по крайней мере, у вас есть контроль над ней, вместо того, чтобы полагаться на другую службу.

Похоже, вы ищете базу данных широт и долгот крупных городов, чтобы вы могли рассчитать расстояния.

Это ссылка на страницу, содержащую несколько десятков по всему миру.

Могут быть и другие, скорее всего, ориентированные на США (но это может быть то, что вы хотите).

Другие вопросы по тегам