Найти название округа для 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);