Google地图自动完成通话,无需地方详细信息请求

时间:2018-09-14 08:40:47

标签: jquery api dictionary google-maps-api-3 autocomplete

我正在我的网站上使用Google Map Java脚本自动完成

这是我的Java脚本代码,用于呈现google自动完成功能

 <script src="https://maps.googleapis.com/maps/api/js?key={{GOOGLE_MAP_API_KEY}}&libraries=places" type="text/javascript"></script>
<script type="text/javascript">
  function initialize() {

 var options = {
  types: ['(cities)'],
  componentRestrictions: {country: "us"}
 };

 var input = document.getElementById('city');
 var autocomplete = new google.maps.places.Autocomplete(input, options);
  autocomplete.setFields(['address_components', 'geometry', 'icon', 'name']); 
}
initialize(); 

</script>

并且html代码是

<input type="text" class="form-control" id="city" name="city" required="" value="" placeholder="City" autocomplete="off">

在“结算”部分,我需要付费
  1.不带位置详细信息的Places API自动完成
  2.Places API地方详情

我从未在网站的任何地方使用过地点详细信息请求。如何触发此请求?。
 自动完成请求后会自动呼叫吗?我该如何预防呢?
我的网站使用地理位置api将地址转换为经纬度坐标。会使用地方详情api吗?

如何在不触发地点详细信息请求的情况下呼叫Google地图自动填充

3 个答案:

答案 0 :(得分:4)

解决了该问题。每当您选择或单击“自动完成建议”时,即使您的代码中没有autocomplete.getPlace()函数,也会自动调用PlaceService.GetPlaceDetails。 此外,使用“自动完成”小部件,当用户选择一个预测时,该小部件将为您调用“地点详细信息”,这样,当您对place_changed事件调用autocomplete.getPlace()时,完整的“地点”结果将可用。 如果您不希望调用位置详细信息,请在初始化窗口小部件时使用{placeIdOnly:true}。

答案 1 :(得分:3)

placeIdOnly is deprecated(截至2019年1月15日),并且可以在“自动完成”构造函数中设置字段,此代码对我有用,并阻止了自动完成功能调用场所详细信息请求:

 autocomplete = new google.maps.places.Autocomplete(
            document.getElementById('Details_Location'), { fields: ["place_id"] });   

答案 2 :(得分:0)

同样的问题。 我试试

autocomplete = new google.maps.places.Autocomplete(
        document.getElementById('Details_Location'), { fields: ["place_id"] });

要获取geometry.location.lat() 和geometry.location.lng(),您可以使用单独的google.maps.Geocoder(),以及来自自动完成的字符串。 google.maps.Geocoder 比 Places Details 便宜。

代码如下:

autocomplete.addListener("place_changed", setMapCenter);

geocoder = new google.maps.Geocoder();

function setMapCenter() {
    data = {
        address: autocomplete_input_value
    };
    geocoder.geocode( data, function(results, status) {
        if (status == 'OK') {
            // var map = new google.maps.Map();
            map.setCenter(results[0].geometry.location);

        } else {
            ...
        }
    });
}