【问题标题】:Google places api not returning geometry谷歌放置 api 不返回几何
【发布时间】:2016-05-21 06:43:16
【问题描述】:

我正在使用“谷歌地点自动完成 API”来使用 javascript 获取有关不同城市的数据:

var service = new google.maps.places.Autocomplete(document.getElementById('search-btn'));
service.addListener('place_changed', function () { 
    var place = service.getPlace();
    console.log(place.geometry.location);
});

问题:对象没有 (lat,lng) 但它有这个消息

TypeError: 'caller' 和 'arguments' 是受限函数 属性,并且无法在此上下文中访问。

在 Function.remoteFunction (:3:14)

在 Object.InjectedScript.callFunctionOn (:750:66)

【问题讨论】:

  • 你的search-btn是一个按钮?
  • @MrNeo 这是一个文本框:<input type="text" id="search-btn" placeholder="Search for more locations"/>
  • 我临时找到了一个解决方案,在我将 json 对象放入“place”变量后,我使用类似的位置地址从 google geocode api 请求 (lat,lng):$.getJSON("https://maps.googleapis.com/maps/api/geocode/json?address=" + place.formatted_address + "&key=myKey", function (data, statue) { var geomtry_arr = [data['results'][0].geometry.location['lat'], data['results'][0].geometry.location['lng']];});

标签: javascript google-maps google-places-api


【解决方案1】:

我遇到了同样的问题。我的 Lat 和 Lng 似乎是函数,但也是错误。 为了获得实际值,您必须实际调用 lat 和 long 作为函数并将其分配给回调中的变量。

  geocoder = new google.maps.Geocoder();
  geocoder.geocode({'address' : addressString}, function(results, status){
    if(status == google.maps.GeocoderStatus.OK){

         ///~~~~~~~~~The part you care about ~~~~~~~~~~///
          var lat = results[0].geometry.location.lat();
          var lng = results[0].geometry.location.lng();

      console.log(lat); // --> 37.7603726
      console.log(lng); // --> -122.47157
    }
  });

【讨论】:

    【解决方案2】:

    我似乎有同样的问题。昨天地图工作正常并返回几何图形,今天它只是空白,没有纬度/经度,同样的错误。

    他们似乎更新了 API 并且出现了问题

    编辑:

    对我来说,通过获取标记坐标而不是尝试对其进行地理编码以获取地址然后获取地址的坐标,这是可以解决的。

    我有类似的代码(12.10.15 工作):

    function geocodePosition(pos) 
                {
                   geocoder = new google.maps.Geocoder();
                   geocoder.geocode
                   ({
                        latLng: pos
                    }, 
                        function(results, status) 
                        {
                            if (status == google.maps.GeocoderStatus.OK) 
                            {
                                $("#address").val(results[0].formatted_address);
                                $("#id_location_0").val(results[0].geometry.location.J);
                                $("#id_location_1").val(results[0].geometry.location.M);
                            } 
    
                        }
                    );
                }
    

    这个停止工作,但能够通过从标记获取坐标来修复它。在我的例子中,Pos 变量是 marker.getPosition()。

                            if (status == google.maps.GeocoderStatus.OK) 
                            {
                                $("#address").val(results[0].formatted_address);
                                $("#id_location_0").val(marker.position.lat());
                                $("#id_location_1").val(marker.position.lng());
                            } 
    

    好像被举报了 https://code.google.com/p/gmaps-api-issues/issues/detail?id=8734

    你可以试试:

    var service = new google.maps.places.Autocomplete(document.getElementById('search-btn'));
    service.addListener('place_changed', function () { 
        var place = service.getPlace();
        console.log(place.geometry.location.lat(), place.geometry.location.lng());
    });
    

    【讨论】:

    • 谢谢,这对我来说非常有用 console.log(place.geometry.location.lat(), place.geometry.location.lng());
    【解决方案3】:

    临时解决方案:

    var lat = results[0]['geometry']['location'].lat();
    var lng = results[0]['geometry']['location'].lng();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2018-12-01
      • 2018-07-16
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多