Google maps api 3 Google map places API getPlace()仅返回某些地址的name属性

Google maps api 3 Google map places API getPlace()仅返回某些地址的name属性,google-maps-api-3,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=

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

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
对象{地址\组件:数组[7],adr\地址:“430 Queen St,…n>,新西兰”,格式化\地址:“430 Queen St,奥克兰,奥克兰1010,新西兰”,几何体:对象,图标:http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png“..}地址\u组件:数组[7]adr\u地址:“新西兰奥克兰皇后街430号,奥克兰1010”格式化的_地址:“新西兰奥克兰皇后街430号,奥克兰1010”几何体:对象HTML_属性:数组[0]图标:http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png“id:“00fce9b1c43ac960068949cbf32eecb587b0b020”姓名:“430皇后街”地点id:“ChIJQfHW8OVHDW0RyHgQRLy8fKc”“参考资料:”CQBLGAAIDNKWNQ4CMU624Fv6L洎Baxmi27CZOYTMZRREWAVAXGR5LCZUFQT1CL3WIMZHZHZHlUVWPFJQMW3QWKIKGJ02HRVu5x6PtUVEPPNPV-08pin_PvRU-uu3n2; mmH3n2Viliolm任何FMQNG5ARF4CHZXJJXJZJZJ6VK7PI3OR或JE1W6QJIXOPGESLL379E4WUKGJJ0F3KG7WJ3KQQQZB7WJJJ0F4F-8F-8MSE5KJ5KKYQQQQQQQQQQG4G4K4KZB7ZB7ZB7ZB7W7ZB4F-G4"https://maps.google.com/maps/place?q=430+Queen+St、+Auckland、+Auckland+1010、+New+Zealand&ftid=0x6D0D47E5F0D6f16lang1024:0xA77CBC441078C8“附近地区:奥克兰”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我发现有人在2012年提出了一个问题,似乎没有人参加。

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

也许谷歌服务无法对您的地址进行地理编码,只能返回给您地址的名称找到。原因可能是服务没有提供这些地址的传统数据。 您不能向用户显示这些不完整的地址,也不能尝试通过另一项服务(如
OSM Geocoder

来自:

返回由用户选择的地点的详细信息(如果详细信息已更改) 已成功检索。否则返回存根位置对象,其中包含 名称属性设置为输入字段的当前值

所以答案是getPlace方法对于特定的位置是失败的。不知道如何解决这个问题,但它让我们离答案更近了一步

编辑:修正了

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

更改:

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


这个问题对我来说是断断续续的,而且通常是出乎意料的

事实证明,如果您只使用name属性从Autocomplete获得结果,则可以使用google.maps.places.AutocompleteService来完成作业

例如,如果只返回一个名称,则调用此函数(以el形式发送输入元素)

这对我帮助很大

该代码在99%的位置都有效。但是,它在某些目的地子集上始终不起作用。Silver Peak是一个,El Paso TX是另一个。如果我在google place对象上运行console.log,下面是结果:object{name:“Silver Peak,NV,United States”}谷歌有时会返回这些地址的数据,所以我知道它是可用的。这些位置ID来自谷歌的自动完成结果,我如何才能将它们过滤出来给用户?如果可能的话,你可以通过修改源代码来做到这一点,或者你可以将你自己的地理编码器请求数据绑定到几个地理编码器服务。或者你也可以例如,使用postgreSQL/postGIS与您共享您自己的地理编码器服务。可能您达到了允许的最大请求,并且没有向您发送全部数据。Fwiw,这在stock JS中运行良好,但在Typescript中有点问题。文档()显示PlacesService.getDetails应该期望PlaceDetails请求,但该接口上没有“引用”。不知道如何让TS满意。好的,对于Typescript,您可以绕过以下事实:
reference
作为
getDetails()的一个选项
未记录。这不太好,但看起来像
const ref={'reference':list[0]。reference}
maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=places,geometry
        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);
                        }
                    });
                });
            }
        }