Найти название округа для лата / лонга - PullRequest
16 голосов
/ 03 мая 2011

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

http://where.yahooapis.com/geocode?q=39.76144296429947,%20-104.8011589050293

Но он не заполняет адресную информацию.Я пробовал с некоторыми из вариантов "флагов" там тоже безрезультатно.

Я также просмотрел API-интерфейсы Googles, но я читал несколько мест, которые не заполняют округ.

Так кто-нибудь знает какие-либо API, которые возьмут лат / лонг и вернут округ, связанный с этим местоположением?И если у вас есть примеры, это было бы замечательно.

Я также хотел бы знать, какие API разрешают использовать в коммерческом приложении.Многие данные, которые я нашел, говорят о том, что вы не можете использовать эти данные, чтобы заработать деньги.Возможно, я неправильно их читаю, но я хочу создать сервис, за который я бы, вероятно, взял плату, который использовал бы эти данные.Так что мне нужны варианты.Может быть, бесплатные услуги, пока я изучаю варианты, и оплачивать услуги в будущем.

Ответы [ 5 ]

19 голосов
/ 09 июня 2011

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

https://www.fcc.gov/developers/census-block-conversions-api

FCC предоставляет API именно для этой проблемы и использует данные переписи для выполнения поиска.

Политика их использования ограничена (От developer@fcc.gov)

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

17 голосов
/ 03 мая 2011

Google заполняет округ для вашего примера,

http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false

В ответе посмотрите под ключом address_components, который содержит этот объект, представляющий "Adams" округ,

{
    long_name: "Adams"
    short_name: "Adams"
    -types: [
        "administrative_area_level_2"
        "political"
    ]
}

Вот из API геокодирования документы ,

administrative_area_level_2 указывает на гражданский объект второго порядка ниже уровня страны. В Соединенных Штатах эти административные уровни являются округами. Не все страны имеют такие административные уровни.

1 голос
/ 09 июня 2011

Другой вариант:

  • Загрузить базу данных городов из http://download.geonames.org/export/dump/
  • Добавить каждый город как широту / долготу -> Отображение страны в пространственный индекс, такой как R-Дерево (некоторые БД также имеют функциональность)
  • Используйте поиск ближайших соседей, чтобы найти страну, соответствующую ближайшему населенному пункту для любой заданной точки

Преимущества:

  • Не зависит от доступности внешнего сервера
  • Гораздо быстрее (легко выполняет тысячи поисков в секунду)

Недостатки:

  • Может давать неправильные ответы близко к границам, особенно в малонаселенных районах
1 голос
/ 03 мая 2011

Возможно, вы захотите взглянуть на Данные о тигре и посмотреть, есть ли в нем полигоны, содержащие название округа в атрибуте. Если это так, Java Geotools API позволяет работать с этими данными. Вы будете выполнять точку в запросах полигонов для полигонов округов, за которыми последует поиск атрибутов объектов.

0 голосов
/ 03 мая 2011

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

http://maps.google.com/maps/geo?ll=10.345561,123.896932

И просто извлекаю информацию, используя php.

$x = file_get_contents("http://maps.google.com/maps/geo?ll=10.345561,123.896932");

$j_decodex = json_decode($x);

print_r($j_decodex);
...