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

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

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

Заранее здравствуйте...


person Stephen Newman    schedule 02.11.2009    source источник


Ответы (4)


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

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

person Ewan Todd    schedule 02.11.2009

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

person Lorenzo Boccaccia    schedule 02.11.2009

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

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

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

person pavium    schedule 02.11.2009
comment
@Pavium - я думал о том, чтобы найти список широт и долгот для населенных пунктов и выполнить поиск по нему, но я бы предпочел не вести этот список, если мне это сойдет с рук. - person Stephen Newman; 02.11.2009
comment
Да, это был бы большой список, который нужно поддерживать. Есть много вещей типа «Google Maps». Вы знаете, конечно, о overstated.net/projects/lat_lon, надеюсь, вы найдете что-то еще ' программно полезно. - person pavium; 02.11.2009

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

Таблица 1:

T_CityPopulation

Поля:

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

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

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

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

person Darknight    schedule 02.11.2009
comment
Я согласен, что введение еще одной службы также приведет к еще одной точке отказа, но я надеялся, что существует способ получить эту информацию непосредственно из веб-служб виртуальной Земли, к которым я все равно обращаюсь — в идеале вызов, который будет выполнять обратное геокодирование. и включить в результат ближайший крупный населенный пункт. - person Stephen Newman; 02.11.2009