Получить список городов страны

Какой API лучше всего подходит для получения всех городов в данной стране? Пробовал скачивать с geonames. но кажется, что данные ненадежны.` Можно ли запросить город, а также штат и страну в Overpass API?

Не могли бы вы предложить лучший способ загрузки городов и их точек?

Если вы еще этого не сделали, рекомендую поискать и разместить вопрос на сайте ГИС: gis.stackexchange.com. У OSM также есть собственный справочный форум с подобными вопросами, такими как этот: help.openstreetmap.org/questions/13877/…

AlexK 12.04.2019 10:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
1
9 139
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я отвечу на ваш второй вопрос относительно 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"
    },

Здесь следует подчеркнуть одну строку с > ... эта так называемая рекурсия делает синтаксис довольно кратким.

Vojta F 27.05.2019 15:23
Ответ принят как подходящий

Я выполнил аналогичную задачу, используя эстакада 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

  1. Вы можете просто ПОЛУЧИТЬ https://shivammathur.com/countrycity/countries, чтобы получить список всех стран.
  2. https://shivammathur.com/countrycity/countries/ind получить только округа, в которых есть слово «ind».
  3. https://shivammathur.com/countrycity/cities/India получить все города Индии.
  4. Вы можете столкнуться с проблемой CORS для вышеупомянутых URL-адресов для использования во внешних приложениях, в этом случае попробуйте https://countrystatecity.in/ . API-ключ для которого можно получить за сутки, заполнив гугл-форму.

Или, если вы ищете JSON, содержащий эти данные, обратитесь к: https://stackoverflow.com/a/40798401/16087692

Другие вопросы по теме