检索一个国家的城市列表

6

哪个API是检索给定国家所有城市的最佳API? 我尝试从geonames下载,但数据似乎不可靠。 在overpass api中是否可能查询城市、州和国家?

请您推荐更好的下载城市及其点的方法。


如果您还没有这样做,我建议您在GIS网站上搜索并发布问题:https://gis.stackexchange.com。OSM也有自己的帮助论坛,其中包含类似于此问题的问题:https://help.openstreetmap.org/questions/13877/how-to-find-cities-and-states-using-osm-overpass-api。 - AlexK
4个回答

2
我利用Overpass API和Python包overpy完成了类似的任务。
首先,我使用查询语句检索了该国家的所有州。
    [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服务器的一项非常巨大的任务。只获取你真正需要的数据。

1
如果你正在寻找获取特定国家的国家列表和城市列表的API,那么可以尝试使用https://github.com/shivammathur/countrycity
以下是使用方法:
  1. 只需GET https://shivammathur.com/countrycity/countries即可获取所有国家的列表。
  2. https://shivammathur.com/countrycity/countries/ind 可以获取包含“ind”的国家列表。
  3. https://shivammathur.com/countrycity/cities/India 可以获取印度的所有城市。
  4. 在前端应用程序中使用上述URL可能会遇到CORS问题,在这种情况下,请尝试使用https://countrystatecity.in/。您可以通过填写谷歌表单一天内获得API密钥。
如果你想要JSON格式的数据,请参考:https://dev59.com/TlkS5IYBdhLWcg3wAiR8#40798401

1
如果您需要特定的城市、州或国家名称,则可以使用此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')

0

我来回答一下你的第二个问题,有关 Overpass API。你可以使用该 API 查询特定国家的城市。为了展示其功能,OSM 有一个名为 Overpass Turbo(http://overpass-turbo.eu)的基于 Web 的查询工具,您可以提交查询并显示和下载数据。例如,以下查询将提供美国所有城市:

{{geocodeArea:"United States"}}->.searchArea;
(
  node["place"="city"](area.searchArea);
);
out body;
>;
out skel qt;

查询将返回以下内容:

enter image description here

根据OSM Wiki,"city"标签用于“识别领土内最大的定居点或定居点,包括国家、州和省会以及其他主要都市区。”在同一维基页面上,有一个关于区分城市和城镇的注释。在上述查询中,“city”可以替换为“town”。这里列出了其他可能的值(包括国家和州):https://wiki.openstreetmap.org/wiki/Key:place#Values 如果您想从数据中获取城市到州的关系,您可能不总是能得到可靠的结果。例如,您可能会得到Duluth,MN的以下详细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"
    },


但只有 Madison, WI 的以下条目:
{
      "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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接