Google地图放置API getPlace()仅返回某些地址的名称属性

时间:2014-10-29 03:10:56

标签: google-maps-api-3

我有一个使用谷歌地图自动填充库的地址搜索框:

var autocompleter = new google.maps.places.Autocomplete(item);

奇怪的是,地址只返回名称属性:

Object {name: "138 Manukau Road, Pukekohe, New Zealand"} 

但其他地址提供的数据更多,例如:

Object {address_components: Array[7], adr_address: "<span class="street-address">430 Queen St</span>, …n>, <span class="country-name">New Zealand</span>", formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand", geometry: Object, icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"…}address_components: Array[7]adr_address: "<span class="street-address">430 Queen St</span>, <span class="extended-address">Auckland</span>, <span class="locality">Auckland</span> <span class="postal-code">1010</span>, <span class="country-name">New Zealand</span>"formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand"geometry: Objecthtml_attributions: Array[0]icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"id: "00fce9b1c43ac960068949cbf32eecb587b0b020"name: "430 Queen St"place_id: "ChIJQfHW8OVHDW0RyHgQRLy8fKc"reference: "CqQBlgAAAIDnkWNQ4cmU624FV6l_bAxmI27czZoytmzrrEWVaXgR5LcZuFqt1cL3WIMzoWhmZNhftRzhLUVwpFjqmw3qwKIqugj02HrvU5x6PtUvepPNPV-08pin_PvRU-__mMMH3N2vILIOLM_AnYFMqNG5MArF4ChZXJxZj6vk7PI3ORJe1W6QjIXoPgesL379E4WUCjrZ0fjv3KgqzB-G4f-8A5MSEN5S47-QZqkY5sl37cIQFWQaFLg4InSVLpYGg8n1gGO958TcA4UK"scope: "GOOGLE"types: Array[1]url: "https://maps.google.com/maps/place?q=430+Queen+St,+Auckland,+Auckland+1010,+New+Zealand&ftid=0x6d0d47e5f0d6f141:0xa77cbcbc441078c8"vicinity: "Auckland"__proto__: Object

我在2012年找到了一个由某人提出的similar issue,看起来没有参加。

4 个答案:

答案 0 :(得分:3)

这个问题对我来说是间歇性地发生的,而且通常是突然发生的。

事实证明,如果您只使用名称属性从自动填充中获得结果,则可以使用google.maps.places.AutocompleteService完成作业。

例如,如果您只返回一个名称(在el中发送输入元素),则调用此方法

        function getPlace(result, el, callback) {
            var autocompleteService = new google.maps.places.AutocompleteService();
            if (result.name.length > 0) {
                var d = { input: result.name, offset: result.name.length };
                autocompleteService.getPlacePredictions(d, function (list, status) {
                    if (list == null || list.length == 0) callback(null);

                    var placesService = new google.maps.places.PlacesService(el);
                    var ref = { 'reference': list[0].reference }

                    placesService.getDetails(ref, function (detailsResult, placesServiceStatus) {
                        if (placesServiceStatus == google.maps.GeocoderStatus.OK) {
                            callback(detailsResult);
                        }
                        else {
                            callback(null);
                        }
                    });
                });
            }
        }

这对我帮助很大 http://plnkr.co/edit/GF3nM3XfYX9El2w11pGo?p=preview

答案 1 :(得分:2)

令人惊讶的是,同一地址现在返回正确的数据,谷歌必须正在观察这些错误并尽快修复它们。

答案 2 :(得分:1)

也许谷歌服务无法对您的地址进行地理编码,只返回找到的地址名称。原因可能是该服务没有为您提供这些地址的附加数据。 您不能向用户显示这些不完整的地址,也不能尝试通过6等其他服务对该地址进行地理编码 http://wiki.openstreetmap.org/wiki/Nominatim

答案 3 :(得分:1)

来自Google Maps Autocomplete Reference

  

如果有详细信息,则返回用户选择的地点的详细信息   成功检索。 否则返回存根Place对象,with   name属性设置为输入字段的当前值

所以答案是getPlace方法只是针对特定的地方失败了。不知道如何解决这个问题,但让我们更接近答案。

编辑:固定它!

对于我的应用,我正在为谷歌地图(几何和地点)加载多个库。切换库加载的顺序修复了问题,我不知道为什么。

变化:

maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=geometry,places

maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=places,geometry