【问题标题】:How to get a country region code for a given address如何获取给定地址的国家/地区代码
【发布时间】:2021-04-18 06:40:02
【问题描述】:

我让用户填写他们所在城市的表格。为了简化我使用 Mapbox 地理编码 API 的过程:用户开始填写他的城市名称,API 会建议结果。

用户选择一个结果,我将数据以下列格式存储在我的数据库中:

{
  "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>

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

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

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

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

【问题讨论】:

    标签: mongodb datasource geojson geocoding reverse-geocoding


    【解决方案1】:

    我们找到了不同的解决方案。我们在 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 → 格式化 KMZ (level1)。我们可以使用QGIS 简化区域路径(菜单:矢量 → 几何工具 → 简化...)。然后将它们导出到 geoJSON 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多