我正在尝试创建多种语言的全球城市数据集。我找到了一些方法,但似乎都不够可靠。寻找免费/廉价的解决方案。下面是我想要实现的 CSV 数据的理想示例:
country_en,state_en,county_en,name_en,country_es,state_es,county_es,name_es,lat,lng
France,,,Paris,Francia,,,París,48.8566,2.3522
United Kingdom,,,Birmingham,Reino Unido,,,Birmingham,52.4862,-1.8904
United States,Alabama,Jefferson County,Birmingham,Estados Unidos,Alabama,Condado de Jefferson,Birmingham,33.5186,-86.8104
United States,California,Los Angeles,Los Angeles,Estados Unidos,California,Los Ángeles,Los Ángeles,34.0522,-118.2437
United Arab Emirates,,,Dubai,Emiratos Árabes Unidos,,,Dubái,25.276987,55.296249
这里的主要思想是伯明翰是英国一个独特的城市,没有必要存储一个县来对抗它。但在美国,很少有名为伯明翰的城市,因此我们会针对它们存储县和州,以使它们独一无二。
我正在尝试查找/生成所有人口超过 15,000 的城市的多种语言数据集。
到目前为止我还没有找到任何方法来生成这种模式。我能找到的最接近的东西是这个仓库:joelacus/world-cities。这正是我要找的,只不过这个只有英文版。
我也尝试过使用维基数据,但结果往往不可靠(希望是因为我编写良好查询的能力有限)。 这是我尝试过的查询。问题是有些标签不一致。例如,
county
标签有时会返回城市,有时会返回国家/地区。如果是 Birmingham, UK
,则返回到 Birmingham
,而不是 West Midlands
。对于 Moscow, Russia
,county
字段包含 Russia
。
我想到的另一种方法是通过 Google Maps API 获取数据。因为我有一个带有 GPS 坐标的数据集,所以我可以将其提供给查询并返回格式化的城市。
https://maps.googleapis.com/maps/api/geocode/json?latlng=48.8566,2.3522&result_type=locality&language=es&key=your-api-key
大多数情况下这会返回格式良好的字符串:
...
"formatted_address": "París, Francia",
...
我相信我可以使用此端点生成新的 CSV 本地化数据集。然而,这意味着我需要仅针对一种语言到达该端点超过 10 万次,而这可能不会有好结果。
有什么想法吗?
您也可以考虑OpenStreetMap。
您可以使用:
此查询中看到“
population
字段”。请参阅其使用政策。当我查找 Dubai (其中确实包含
population
字段)时,我看到 with Nominatim 140 个名称,可用于多种语言的数据集:
دبي (name)
Doebai (name:af)
ዱባይ (name:am)
Dubai (name:an)
دبي (name:ar)
ডুবাই (name:as)
Дубай (name:ba)
Дубай (name:be)
Дубай (name:bg)
...
Nominatim API 支持多种语言。它可以本地安装,包括使用docker镜像。
我没有找到直接按人口查询的方法,但是,使用本地 OSM 数据集副本,您也许可以查询“
place=city
”并过滤掉符合您条件的数据。