【问题标题】:Google map auto complete call without place details request没有地点详细信息请求的谷歌地图自动完成呼叫
【发布时间】:2019-02-19 00:55:59
【问题描述】:

我在我的网站上使用谷歌地图 java 脚本自动完成

这是我用于渲染谷歌自动完成的 java 脚本代码

 <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 自动完成,没有 Places 详细信息
2.Places API 地点详情

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

如何在不触发地点详细信息请求的情况下调用谷歌地图自动完成

【问题讨论】:

  • AFAIK,地点详细信息是当您使用地点服务的getDetails() 方法或通过地点 API 直接请求Places Details 时。您不是在网站的其他部分或其他网站上使用它吗?
  • 未在我的网站@MrUpsidown 的其他网站/其他部分使用它
  • 仍然应该是这样。您总是可以创建一个新的 API 密钥,撤销您现在使用的那个,实施新的,然后看看会发生什么。您在上面发布的代码不应计入地点详细信息请求。如果在尝试后这些请求仍然被计算在内,您可能需要直接与 Google 联系。
  • 我会检查一下。将 gecode 经纬度转换使用地点详细信息吗? @MrUpsidown
  • 可能是reverse geocode 请求。不过不确定。

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


【解决方案1】:

同样的问题。 我试试

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 {
            ...
        }
    });
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 您好,如何在不调用 getPlace() 且仅使用自动完成对象的情况下提取 geometry.location.lat() 和 geometry.location.lng()?
    • 在drupal项目中我应该在哪里写这段代码?
    【解决方案3】:

    解决了这个问题。每次您选择或单击自动完成建议时,都会自动调用 PlaceService.GetPlaceDetails,即使您的代码中没有 autocomplete.getPlace() 函数也是如此。 此外,使用自动完成小部件,当用户选择一个预测时,小部件将为您调用地点详细信息,因此当您在 place_changed 事件上调用 autocomplete.getPlace() 时,将可以获得完整的地点结果。 如果您不想调用 Place Details,请在初始化小部件时使用 {placeIdOnly: true}。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多