Google 地图 API Geocoder componentRestrictions 语法

Google Maps API Geocoder componentRestrictions syntax

我在将 componentRestrictions 参数添加到 Google 地图地理编码器对象时遇到问题。我正在使用 JavaScript 客户端 api。具体来说,administrativeArea 属性 对我不起作用。 Docs 说 type 是一个字符串,我已经尝试了很多组合,但仍然没有运气。

这是我的地理编码函数:

function geocodeAddress(geocoder, resultsMap) {
    var address = document.getElementById('address').value;
    geocoder.geocode({'address': address, 'componentRestrictions': {administrativeArea: 'Maricopa County'}}, function(results, status) {
      if (status === 'OK') {
        resultsMap.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
          map: resultsMap,
          position: results[0].geometry.location
        });
        console.log(results)
      } else {
        alert('Geocode was not successful for the following reason: ' + status);
      }
    });
  }

我可以让其他 componentRestriction 属性起作用,例如 postalCodecountry,但 administrativeArea 不行。文档说 属性 匹配所有 administrative_area levels,所以我尝试使用不同的美国县和不同的美国州,但无法让它工作。我想我的语法有误,如有任何帮助,我们将不胜感激!

您的代码是正确的。不幸的是,前段时间组件过滤行为发生了重要变化。地图 JavaScript API 文档似乎尚未更新有关组件限制的内容。

我建议查看已更新并说明以下内容的相应 Web 服务文档

The components that can be filtered include:

  • postal_code matches postal_code and postal_code_prefix.

  • country matches a country name or a two letter ISO 3166-1 country code. Note: The API follows the ISO standard for defining countries, and the filtering works best when using the corresponding ISO code of the country.

The following components may be used to influence results, but will not be enforced:

  • route matches the long or short name of a route.

  • locality matches against locality and sublocality types.

  • administrative_area matches all the administrative_area levels.

来源:https://developers.google.com/maps/documentation/geocoding/intro#ComponentFiltering

因此,如您所见,行政区域不再是严格的过滤器。目前唯一可用的严格过滤器是邮政编码和国家/地区。

希望我的回答能解开你的疑惑。