2011-06-06 78 views
6

我使用Google's Geocoding API來處理自由格式的地址數據,並試圖理解結果(subpremiseadministrative_area_level_2等)。在這一點上,我只對美國的地址感興趣,並希望將結果格式化爲街道地址,城市和州代碼。州代碼似乎很直接(administrative_area_level_1),但其他人更模糊。是城市locality還是sublocality或兩者甚至更多?街道地址本身似乎可以是其他領域的任意數量的組合。使谷歌地理編碼API結果有意義

理想情況下,我只想拿formatted_address,去掉城市,州,郵政編碼和國家代碼,並保留我的「街道地址」。對於處理所有這些字段是否有任何指導或建議,至少對於大多數情況(常規地址,單元號碼地址等)?

回答

1

documentation似乎涵蓋了各個領域的意思很清楚。

你還沒有說你在用什麼語言工作,但我認爲這將是help

+0

我正在Objective-C爲iOS應用程序工作,但我的問題是關於API本身。文檔給出了每個字段的描述,但是我的問題是將其映射回標準美國地址格式。換句話說,聽起來美國的城市總是會進入「本地」領域,但這仍然不明確。 'street_address'不會響應我的測試請求,並且沒有解釋如何從其餘字段構建有效的街道地址。 – jrdioko 2011-06-13 17:10:25

1

我在搜索頁面上對Nearlots.com進行反向地理編碼。基本上,用戶在地圖上的某處放置標記,然後在搜索框中打印地址。

我只是在打印'formatted_address'並放棄它是否存在。這會給你這樣的東西:「275-291 Bedford Ave,Brooklyn,NY 11211,USA」。這綽綽有餘 - 最後你總是可以剝離美國。

+0

'formatted_address'已關閉,但我需要將其分成三個不同的字段:街道地址,城市和州代碼。打破逗號儘可能接近,但我認爲'formatted_address'的格式不能保證。 – jrdioko 2011-06-13 21:13:00

0

我認爲你需要使用'路由'作爲街道地址。

我使用相同的服務,從我的經驗來看,'路線'總是相當於街道地址,即使位置實際上不是街道!

我想你已經決定如何弄清楚城市名稱。這是我採取的相同的方法;查看幾個不同位置的各種API結果,並查看哪個字段爲您提供最一致的結果。

+0

'route'不包含街道地址開頭的數字,即'street_number'。而在我的測試單元號碼和街道地址的其他部分在其他領域,所以'路線'不是一個完整的地址。 – jrdioko 2011-06-15 19:28:47

+0

對不起,我的意思是'路線'包含街道名稱,不包括門牌號碼。我發現街道名稱主要在我的國家的「路線」上。 – Mullins 2011-06-15 22:20:22

7
  • 街道地址是street_numberroute
  • locality
  • 狀態administrative_area_level_1
  • ZIP是postal_code
  • 國家是country

注意,谷歌忽略任何單位號碼(例如'Apt 13A')。你必須將自己添加回來。

通過地理編碼器運行您的數據樣本並手動檢查結果應確認您獲得了所需的內容。

+1

好吧,它不會減少單位數量,它包括它(通常在我見過的'subpremise'中)。我可以運行一個樣例並打大多數情況,但我希望能有更好的方法來獲得所有或幾乎所有的地址(即使它們有「樓層」或「房間」或「前提」) 。 – jrdioko 2011-06-15 19:30:24

+0

更正從API返回的位置對象確實包含「subpremise」值,其中包含單元號(使用澳大利亞地址進行測試)。 – 2015-05-27 06:12:25

0

經過幾個小時的工作後,我無法一直提取平面/房間/分前提。具有這些細節比能夠明確區分它更重要,所以我使用它來解決它。

var componentForm = { 
    locality: 'long_name', 
    administrative_area_level_1: 'short_name', 
    country: 'long_name', 
    postal_code: 'short_name' 
}; 

function fillInAddress(place) { 
    for (var component in componentForm) { 
     document.getElementById(component).value = ''; 
     document.getElementById(component).disabled = false; 
    } 
    for (var i = 0; i < place.address_components.length; i++) { 
     var addressType = place.address_components[i].types[0]; 
     if (componentForm[addressType]) { 
      var val = place.address_components[i][componentForm[addressType]]; 
      document.getElementById(addressType).value = val; 
     } 
    } 
    var parts = $("#searchField").val().split(","); 
    $("#street_number").val(parts[0]); 
} 

我已經提取自動完成的信息正常,雖然跳過「街道號」和「路線」。然後在選擇後對自動完成的值進行簡單分割,並使用第一部分,將街道地址作爲一個整體返回(包括工廠/平面/前提和街道名稱)。

此解決方案爲我提供了適合我所需的結果。祝你好運!