Как получить ближайший значимый населенный пункт по широте и долготе?
В настоящее время я пытаюсь изменить геокодирование ряда координат широты / долготы с помощью веб-сервисов 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 миль. Затем отсортируйте результаты по населению.
РЕДАКТИРОВАТЬ:
Даже если вы не хотите поддерживать таблицу, ее нужно где-то хранить, я думаю, что если вы поддерживаете ее самостоятельно, по крайней мере, у вас есть контроль над ней, вместо того, чтобы полагаться на другую службу.
Похоже, вы ищете базу данных широт и долгот крупных городов, чтобы вы могли рассчитать расстояния.
Это ссылка на страницу, содержащую несколько десятков по всему миру.
Могут быть и другие, скорее всего, ориентированные на США (но это может быть то, что вы хотите).