如何限制Google Maps API AutocompleteService超出建议范围

时间:2019-04-12 14:22:46

标签: java google-maps google-maps-api-3

目前,我正在使用Google Maps API中的AutocompleteService类。在documentation中,我使用bounds来应用纽约市的边界。但是,我从新泽西州和宾夕法尼亚州得到了结果。

AutocompleteService类没有strictBounds选项,这使得很难将结果限制为仅在范围之内。这是我为纽约市提供的以下界限:

/**
 * NYC Bound Parameters for Google Maps API
 * @enum {object}
 */
 OfficeMap.NYC_BOUNDS = {
   'south': 40.4773991,
   'west': -74.25908989999999,
   'north': 40.9175771,
   'east': -73.7002721
 };

但是,由于纽约以外的建议已经表明,这不能完全按预期进行: enter image description here

如上图所示,显示了PA的建议。

  /** @private {this._google.maps.places.Autocomplete}Autocomplete instance */
    this._service = new this._google.maps.places.AutocompleteService();

  // Attach handler for the autocomplete search box. This updates the map
    // position and re-sorts locations around that position.
    this._searchEl.addEventListener('keyup', event => {
      if(event.target.value) {
        this._service.getPlacePredictions({
           input: event.target.value,
           offset: 3,
           types: ['geocode'],
           componentRestrictions: {country: 'us'},
           bounds: OfficeMap.NYC_BOUNDS
        }, predictions => {
          if(predictions) {
            let results = predictions.map(e => [e['description']]);
            this._inputAutocomplete._autocomplete.options = results;
            const autocompleteSelf = this._inputAutocomplete._autocomplete;

            this._inputAutocomplete._autocomplete.select = () => {
                if (autocompleteSelf.highlightedIndex !== -1) {
                  autocompleteSelf.input.value = autocompleteSelf
                    .scoredOptions[autocompleteSelf.highlightedIndex]
                    .displayValue;
                  autocompleteSelf.removeDropdown();

                  let nameOfLocation = autocompleteSelf.input.value;
                  let googlePlaceObj = this.getGooglePlaceByName(nameOfLocation,
                                                                 predictions);

                  this.displayPlacesOnMap(googlePlaceObj);
                }
              };
            }
        });
      }
    });

方法getPlacePredictions仅应给出NYC建议,因为它是传递的NYC界限参数。来自documentation 没有办法限制它。

如何限制AutocompleteService getPlacePredictions仅返回边界内的对象?

2 个答案:

答案 0 :(得分:0)

特别是因为AutocompleteService@private,因此似乎应该使用Autocomplete类,该类确实支持strictBounds

答案 1 :(得分:0)

我们为此功能请求添加了一个条目,用于在我们的Google公开问题跟踪器中添加自动完成服务的strictBounds

问题跟踪器中的问题由Google Maps Platform API专家直接管理,只要有工程团队的消息,他们就会在问题跟踪器中提供更新。

我们热烈邀请您在问题跟踪器中查看问题,并加注星标以表示您的兴趣。这将使您订阅该问题的技术更新。为问题加注星标还可以为我们提供关于问题对客户的重要性的宝贵反馈,并增加了产品工程团队对问题的重视。

您可以在此处查看问题并加注星标: -https://issuetracker.google.com/36219203

此问题跟踪工具条目是有关此问题的公共信息的权威来源,所有与公共相关的更新都将发布在此处。