【问题标题】:How to check if address in within region on Google Maps API如何在 Google Maps API 上检查地址是否在区域内
【发布时间】:2013-03-29 22:31:22
【问题描述】:

我有一个地址字符串,例如"12 Swiss Ave, Gonville, Wanganui, New Zealand"

鉴于此地址,我需要确定该地址是在新西兰的北岛还是南岛。

如果我将地址传递给 google maps 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 来实现这一点,但我想出了 nill

标签: php google-maps-api-3 region


【解决方案1】:

一种选择是获取两个岛屿的多边形,然后对地理位置进行多边形分析。

Example using Polygons defined by KMLgeoxml3

Proof of concept(使用 geoxml3 和来自 gadm.org 的修改过的 KML)

============ 使用融合表的旧选项,不再有效 =============

Example using FusionTables注意:不再有效,Fusion Layers 在 2019 年 12 月被拒绝)

Proof of concept(使用 Fusion Tables 中的 Natural Earth 数据集和“州到岛”地图)(注意: 也不再有效)

【讨论】:

    【解决方案2】:

    使用谷歌地图的 API..

    你可以从Places Autocomplete得到新西兰北岛的placeId,即ChIJhXgO3F4Uam0RdyMcnMutKMo

    然后使用地理编码库获取边界,并使用contains function 来测试是否有另一个 lat/lng 在这些边界内。

    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);
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 2014-01-25
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多