Как получить ближайший значимый населенный пункт по широте и долготе? - PullRequest
1 голос
/ 02 ноября 2009

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

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

Приветствия заранее ...

Ответы [ 5 ]

2 голосов
/ 02 ноября 2009

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

Предположим, вы находитесь в точке (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.

2 голосов
/ 02 ноября 2009

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

0 голосов
/ 02 ноября 2009

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

Таблица 1:

T_CityPopulation

Поля:

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

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

EDIT:

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

0 голосов
/ 02 ноября 2009

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

Это - ссылка на страницу, на которой несколько десятков пользователей по всему миру.

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

0 голосов
/ 02 ноября 2009

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

...