如何在Google Maps API中检查地址是否在区域内

4

我有一个地址字符串,例如“新西兰沃汉诺伊岛冈维尔瑞士大道12号”。

根据这个地址,我需要确定它是在新西兰的北岛还是南岛。

如果我将地址传递给Google地图API,我会得到以下数据,但不幸的是它没有告诉我它在哪个岛上。那么,我该如何检查呢?

{
    "results": [
        {
            "address_components": [
                {
                    "long_name": "12",
                    "short_name": "12",
                    "types": [
                        "street_number"
                    ]
                },
                {
                    "long_name": "Swiss Avenue",
                    "short_name": "Swiss Ave",
                    "types": [
                        "route"
                    ]
                },
                {
                    "long_name": "Gonville",
                    "short_name": "Gonville",
                    "types": [
                        "sublocality",
                        "political"
                    ]
                },
                {
                    "long_name": "Wanganui",
                    "short_name": "Wanganui",
                    "types": [
                        "locality",
                        "political"
                    ]
                },
                {
                    "long_name": "Manawatu-Wanganui",
                    "short_name": "Manawatu-Wanganui",
                    "types": [
                        "administrative_area_level_1",
                        "political"
                    ]
                },
                {
                    "long_name": "New Zealand",
                    "short_name": "NZ",
                    "types": [
                        "country",
                        "political"
                    ]
                },
                {
                    "long_name": "4501",
                    "short_name": "4501",
                    "types": [
                        "postal_code"
                    ]
                }
            ],
            "formatted_address": "12 Swiss Avenue, Gonville, Wanganui 4501, New Zealand",
            "geometry": {
                "location": {
                    "lat": -39.9444245,
                    "lng": 175.0239575
                },
                "location_type": "ROOFTOP",
                "viewport": {
                    "northeast": {
                        "lat": -39.9430755197085,
                        "lng": 175.0253064802915
                    },
                    "southwest": {
                        "lat": -39.9457734802915,
                        "lng": 175.0226085197085
                    }
                }
            },
            "types": [
                "street_address"
            ]
        }
    ],
    "status": "OK"
}

你有没有找到解决方案?我正在寻找能够完成这个任务的API,但是一无所获。 - zelusp
2个回答

3
一个选项是获取这两个岛屿的多边形,并在地理位置上进行点与多边形分析。 示例使用由KML定义的多边形geoxml3 概念证明 (使用geoxml3和从gadm.org修改的KML)
============ 旧的选项使用融合表,不再起作用 ============= 使用FusionTables的示例 (注意:不再起作用,Fusion Layers在2019年12月停用) 概念证明(使用Fusion Tables中的自然地球数据集和“州到岛”的地图)(注意:也不再起作用)

0

使用Google地图的API...

您可以从地点自动完成中获取新西兰北岛的placeId,例如ChIJhXgO3F4Uam0RdyMcnMutKMo

然后使用geocode库获取边界,并使用包含函数测试另一个纬度/经度是否在这些边界内。

const geocode = async placeId => {
  const geocoder = new window.google.maps.Geocoder();
  return new Promise((resolve, reject) => {
    geocoder.geocode(
      {
        placeId
      },
      (results, status) => {
        resolve(results[0]);
      }
    );
  });
};

const placeDetails = await geocode('ChIJhXgO3F4Uam0RdyMcnMutKMo');
const somePlace = getPlaceDetails(someOtherPlaceId);

const isInNorthIsland = placeDetails.geometry.bounds.contains(somePlace.geometry.location);


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