为什么属性“radius”不起作用getPlacePredictions google maps

时间:2018-03-23 14:22:33

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

我使用getPlacePredictions获取结果自动填充谷歌地图。我在莫斯科使用中心地图。我阅读了文档https://developers.google.com/maps/documentation/javascript/reference#AutocompletionRequest

我看到radius类型编号,并以米(50000)指定。但是我得到距离650000的结果。例子我键入“Sara”并获得结果“Saransk,Россия”。我的位置 - 是莫斯科。距离莫斯科和萨兰斯克的距离为65万米。

我的代码示例:https://jsfiddle.net/bg479gna/33/

const autoComplete = new google.maps.places.AutocompleteService();
const input = document.querySelector('#search');
const result = document.querySelector('#result');
const getPlaceAutocomplete = (value) => {
  autoComplete.getPlacePredictions({
    input: value,
    location: new google.maps.LatLng(55.755826, 37.617300), //Moscow
    radius: 50000, //this value 50km. But i get cities on distance 650km. WHY?!?!
    componentRestrictions: {
      country: 'ru',
    },
  }, (data) => {
    data.forEach((item) => {
        result.innerHTML += `<li>${item.description}</li>`
    });
  });
};

input.addEventListener('keyup', () => {
    const value = input.value;

    getPlaceAutocomplete(value)
});

我该如何解决这个问题?

我尝试使用getQueryPredictionsgetPredictions代替getPlacePredictions,但我得到的结果相同。

4 个答案:

答案 0 :(得分:2)

这只是一种偏见,而不是严格的限制。从the documentation你引用(强调我的):

  

位置类型:LatLng    预测偏差的位置。预测将偏向给定的位置和半径。 或者,可以使用边界。

  半径类型:数字   用于预测偏差的区域的半径。半径以米为单位指定,并且必须始终附有位置属性。或者,可以使用边界。

答案 1 :(得分:0)

你可以strictBounds参数。但AutocompleteService不支持。更多info.

here.

答案 2 :(得分:0)

目前,我们只能设置位置的范围。 哟有2种方法:

  1. 使用setLocationBias-该区域的结果为第一
  2. 使用setLocationRestriction-仅从该区域查找结果

例如:

FindAutocompletePredictionsRequest.builder()
  .setLocationRestriction(
     RectangularBounds.newInstance(
        LatLng(
           coordinates.latitude - 0.001,
           coordinates.longitude - 0.001
        ),
        LatLng(
           coordinates.latitude + 0.001,
           coordinates.longitude + 0.001
        )
    )
)
                .setTypeFilter(TypeFilter.ADDRESS)
                .setSessionToken(token)
                .setQuery(constraint.toString())
                .build()

答案 3 :(得分:-1)

如果您想为每个国家/地区设置strict个限制,则需要google.maps.places.ComponentRestrictions请参阅AutoCompleteService Class&amp; AutoCompleteService Request

Component Filtering/Restrictions&amp; Country Codes

希望这有帮助!