Найти название округа для Lat/Long

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

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

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

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

Знает ли кто-нибудь о каких-либо API-интерфейсах, которые будут принимать Lat/Long и возвращать графство, связанное с этим местоположением? И если у вас есть примеры, это было бы здорово.

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

Ответ 1

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

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

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

Политика их использования ограничена (от [email protected])

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

Ответ 2

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

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

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

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

Здесь из API геокодирования docs,

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

Ответ 3

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

Ответ 4

Другая опция:

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

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

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

Недостатки:

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

Ответ 5

Возможно, это отличное решение. Оно находится в формате 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);