谷歌自动完成API首先返回我所在州的位置;预期的“;地方

Google autocomplete API returns places in my state first instead of the most "expected" places

本文关键字:位置 地方 API 返回 谷歌      更新时间:2024-06-09

我在输入地址时使用谷歌自动完成,这是一个简单的实现:

autocomplete_origin_address = new google.maps.places.Autocomplete(
  document.getElementById('origin_address'), {types: ["geocode"]}
);

当我开始输入"Lon"时,第一个建议的位置是Long Beach, CA,下一个是"London United Kingdom"——这只是一个例子。

我住在加利福尼亚州。一般来说,当我开始输入地址时,提供给我的地址位于加利福尼亚州。我如何获得整个北美的地址?

我试图修改我的自动完成设置,比如:

autocomplete_origin_address = new google.maps.places.Autocomplete(
  document.getElementById('origin_address'), {types: ["route", "geocode"]}
);

但在这种情况下,自动完成并没有提供任何东西(即使我在数组中只保留route.

如何设置自动补全来建议不是主要来自CA,而是来自北美的地方?

试试这个:

navigator.geolocation.getCurrentPosition(position=> {
  $.getJSON("https://maps.googleapis.com/maps/api/geocode/json?latlng=" 
            + position.coords.latitude + "," + position.coords.longitude
            + "&sensor=false").then(data=> {
    for (let component of data.results[0].address_components) {
      if (component.types.includes("country")) {
        new google.maps.places.Autocomplete(
          $('#origin_address')[0], {types: ["geocode"],
          componentRestrictions: {country: component.short_name}}
        );
        break;
      }
    }
  })
})

首先,它使用broswser的地理定位API获取当前位置。然后它向谷歌地图API提出请求,以获得基于纬度和经度的国家。然后它初始化自动完成,将其限制在这个国家。

请参阅JS Fiddle演示。