Какой API лучше всего подходит для получения всех городов в данной стране? Пробовал скачивать с geonames. но кажется, что данные ненадежны.` Можно ли запросить город, а также штат и страну в Overpass API?
Не могли бы вы предложить лучший способ загрузки городов и их точек?
Я отвечу на ваш второй вопрос относительно Overpass API. Вы можете запрашивать города для определенной страны, используя этот API. Чтобы продемонстрировать его возможности, существует веб-инструмент запросов для OSM под названием Overpass Turbo (http://overpass-turbo.eu), где вы можете отправлять запросы, а также отображать и загружать данные. Следующий запрос предоставит все города в Соединенных Штатах, например:
{{geocodeArea:"United States"}}->.searchArea;
(
node["place" = "city"](area.searchArea);
);
out body;
>;
out skel qt;
Запрос вернет следующее:
В соответствии с ОСМ вики тег «город» используется «для обозначения крупнейшего поселения или поселений на территории, включая столицы страны, штата и провинции, а также другие крупные мегаполисы». На той же вики-странице есть примечание о различиях между городами и поселками. В приведенном выше запросе «город» можно заменить на «город». Другие возможные значения (включая страну и штат) перечислены здесь: https://wiki.openstreetmap.org/wiki/Ключ:место#Значения.
Если вы хотите получить отношения между городами и штатами из данных, вы не всегда можете получить надежные результаты. Например, вы можете получить следующую подробную запись GeoJSON для Дулута, Миннесота:
{
"type": "Feature",
"properties": {
"@id": "node/19188464",
"is_in": "Minnesota USA",
"is_in:continent": "North America",
"is_in:country": "USA",
"is_in:country_code": "US",
"is_in:state": "Minnesota",
"name": "Duluth",
"name:ja": "ダルース",
"name:oj": "Onigamiinsing",
"name:ru": "Дулут",
"place": "city",
"population": "86265",
"population:source": "2010",
"wikidata": "Q485708",
"wikipedia": "en:Duluth, Minnesota"
},
"geometry": {
"type": "Point",
"coordinates": [
-92.1251218,
46.7729322
]
},
"id": "node/19188464"
},
но только следующая запись для Мэдисона, Висконсин:
{
"type": "Feature",
"properties": {
"@id": "node/29941752",
"alt_name:ru": "ÐœÑдиÑон",
"capital": "4",
"is_in:continent": "North America",
"is_in:country": "USA",
"name": "Madison",
"name:en": "Madison",
"name:pl": "Madison",
"name:ru": "МадиÑон",
"name:ta": "மேடிசனà¯",
"name:uk": "МедіÑон",
"place": "city",
"population": "243344",
"state_capital": "yes",
"website": "http://www.cityofmadison.com/",
"wikidata": "Q43788",
"wikipedia": "en:Madison, Wisconsin"
},
"geometry": {
"type": "Point",
"coordinates": [
-89.3837613,
43.074761
]
},
"id": "node/29941752"
},
Здесь следует подчеркнуть одну строку с >
... эта так называемая рекурсия делает синтаксис довольно кратким.
Я выполнил аналогичную задачу, используя эстакада API с помощью переусердствовать, который представляет собой пакет Python.
Во-первых, я получил все штаты страны, используя запрос
[out:json];
area["ISO3166-1" = "IN"];
(rel(area)["admin_level" = "4"];);
out;
Теперь я получил все районы для каждого штата, который admin_level=5
.
[out:json];
area["ISO3166-2" = "IN-KL"];
(rel(area)["admin_level" = "5"];);
out;
Состояние ISO3166-2
из данных, полученных от API.
Теперь вы можете получать города для каждого района, используя данные из API.
[out:json];
area["ISO3166-2" = "{0}"]["admin_level" = "4"];
(rel["name" = "Thiruvananthapuram"](area);)->.center;
node(around.center:10000)["place"];
out;"""
Это сработало для меня. Помните, что получение данных обо всех городах страны — это очень сложная задача для серверов OSM. Получите данные, которые вам действительно нужны.
если вам нужно конкретное название города, штата или страны, вы можете использовать этот API. https://pypi.org/project/geosky/
Этот API ведет учет всех стран, штатов и городов. Вот пример кода...
from geosky import geo_plug
geo_plug.all_CountryNames()
geo_plug.all_Country_StateNames()
geo_plug.all_State_CityNames(name)# name == 'all' or state name
geo_plug.all_State_CityNames('Odisha')
Если вы ищете API для получения списка стран и списка городов определенной страны, попробуйте https://github.com/shivammathur/countrycity
https://shivammathur.com/countrycity/countries
, чтобы получить список всех стран.https://shivammathur.com/countrycity/countries/ind
получить только
округа, в которых есть слово «ind».https://shivammathur.com/countrycity/cities/India
получить все города Индии.Или, если вы ищете JSON, содержащий эти данные, обратитесь к: https://stackoverflow.com/a/40798401/16087692
Если вы еще этого не сделали, рекомендую поискать и разместить вопрос на сайте ГИС: gis.stackexchange.com. У OSM также есть собственный справочный форум с подобными вопросами, такими как этот: help.openstreetmap.org/questions/13877/…