如何获取给定地址的国家/地区代码

How to get a country region code for a given address

我让用户填写一份表格,说明他们居住的城市。为了简化我使用 Mapbox 地理编码 API 的过程:用户开始填写他所在城市的名称,API 提示结果。

用户 select 是一个结果,我将数据存储在我的数据库中,格式如下:

{
  "city": "Paris",
  "region": "TX, //Texas
  "country": "US"
}

我有按地区划分的国家 svg 地图。

<svg>
  <g>
    <path id="US-AK" title="Alaska" d="..." />
    <path id="US-TX" title="Texas" d="..." />
    ...
  </g>
</svg>

现在我可以从数据库中 select 居住在德克萨斯州的所有用户,并在 svg 地图上显示信息(居住在该地区的用户数量)。

问题是 API 并不总是在响应中给我区域信息。 例如 Paris, France

我已经测试了 6 different API 但他们给我的有关区域的数据并不一致。有时 APIs 不包含任何有关区域的信息。有时候信息是错误的。

我只看到一个解决方案:存储有关区域的所有数据(不同语言的代码和名称)并让用户自己 select 他们的国家区域。 但也许您看到了另一个更简单的解决方案?

我们找到了不同的解决方案。我们在 MongoDB 中以 geoJSON 格式存储区域的形状。对于 API 返回的每个地址,我们都有 GPS 坐标。所以我们总能找到一个地区的代码。

// Insert regions to DB

db.getCollection('region').insert({
    "code": "FR-IDF",
    "polygons": {
        "type":"MultiPolygon",
        "coordinates": <multi polygon shape>
    }
});

// Find regions by gps coordinates

db.getCollection('region').find({
    "polygons": {
        $geoIntersects: {
            $geometry:{
                "type":"Point",
                "coordinates" : [ 7.0174, 43.5528 ]
            }
        }
    }
});

我从这里获取区域详细信息:https://gadm.org/download_country_v3.html → format KMZ (level1). We can simplify regions paths with QGIS(菜单:矢量 → 几何工具 → 简化...)。然后将它们导出到 geoJSON 文件。