2014-10-29 26 views
7

我使用谷歌地圖自動完成庫的地址搜索框:谷歌地圖的地方API getPlace()只返回name屬性爲一些地址

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

有一個奇怪的時刻,一個地址只能返回name屬性:

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 

我發現了一個similar issue,它在2012年由某人提出,看起來沒有出席。

+0

代碼工作的地點99%。但是,它始終不能在某些目標子集上運行。銀峯是其中之一,埃爾帕索TX是另一個。如果我在google地點對象上使用console.log,則結果如下: Object {name:「Silver Peak,NV,United States」} – CHawk 2016-04-06 18:20:03

回答

2

令人驚訝的是,現在返回正確數據的地址非常相同,谷歌必須儘快查看這些錯誤並修復它們。

1

也許Google服務無法對您的地址進行地址解析,只能返回找到的地址的名稱。原因可能是該服務沒有任何關於這些地址的輔助數據。 你可以只是沒有顯示這些不完整的地址給用戶,或者嘗試通過其他服務來進行地址解析該地址像OSM Geocoder http://wiki.openstreetmap.org/wiki/Nominatim

+0

Google有時會返回這些地址的數據,所以我知道它是可用的。這些位置ID來自Google自動填充結果,我如何能夠將它們過濾到用戶? – CHawk 2016-04-14 10:57:41

+0

您可以通過修改源代碼來完成此操作,或者您可以將自己的地理編碼器請求數據綁定到多個地理編碼器服務。或者,您也可以使用postgreSQL/postGIS爲您創建自己的地理編碼器服務。也許你到達了最大的請求允許,並沒有給你發送整個數據。 – 2016-04-14 11:25:05

1

Google Maps Autocomplete Reference

返回由用戶選擇的地點的詳細信息,如果細節分別成功檢索到 。 否則返回一個存根對象,其中 的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 
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

+0

Fwiw,這工作很好股票JS,但它在打字稿有點問題。文檔(https://developers.google.com/maps/documentation/javascript/reference#PlacesService)顯示PlacesService.getDetails應該有一個PlaceDetailsRequest,但該接口沒有「引用」。不知道如何讓TS高興。 – leff 2017-06-27 22:05:23

+0

好吧,對於Typescript,你可以避開'reference'作爲'getDetails()'的選項沒有記錄的事實。這不是很好,但它看起來像'const ref = {'reference':list [0] .reference}' – leff 2017-06-27 22:46:13

相關問題