2011-07-01 57 views
7
var geocoder = new google.maps.Geocoder(); 
      geocoder.geocode({'latLng': foundLoc}, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
        if (results[1]) { 
         var loc = getCityState(results); 
        } 
       } 
      }); 

function getCityState(results) 
     { 
      var citystateArray = results[1].formatted_address.split(",",2); 
      var city = citystateArray[0]; 
      var state = citystateArray[1].substring(1, 3); 
      return (city + ', ' + state) 
     } 

這就是我現在使用的方式,而且這項工作大約90%的時間都適用。其他時候,formatted_address包含一個城鎮和一個城市以及州,其他時間只是城鎮和城市,其他時間您可以夢想的一切。從Google地圖請求中解析城市/州

我還沒有找到總是從Google Maps API結果中獲取城市/州的一致方式。你們有沒有一個人?謝謝。

,谷歌使用它們的頁面上一例中的一個響應示例:

{ 
    "status": "OK", 
    "results": [ { 
    "types": [ "street_address" ], 
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", 
    "address_components": [ { 
     "long_name": "1600", 
     "short_name": "1600", 
     "types": [ "street_number" ] 
    }, { 
     "long_name": "Amphitheatre Pkwy", 
     "short_name": "Amphitheatre Pkwy", 
     "types": [ "route" ] 
    }, { 
     "long_name": "Mountain View", 
     "short_name": "Mountain View", 
     "types": [ "locality", "political" ] 
    }, { 
     "long_name": "California", 
     "short_name": "CA", 
     "types": [ "administrative_area_level_1", "political" ] 
    }, { 
     "long_name": "United States", 
     "short_name": "US", 
     "types": [ "country", "political" ] 
    }, { 
     "long_name": "94043", 
     "short_name": "94043", 
     "types": [ "postal_code" ] 
    } ], 
    "geometry": { 
     "location": { 
     "lat": 37.4219720, 
     "lng": -122.0841430 
     }, 
     "location_type": "ROOFTOP", 
     "viewport": { 
     "southwest": { 
      "lat": 37.4188244, 
      "lng": -122.0872906 
     }, 
     "northeast": { 
      "lat": 37.4251196, 
      "lng": -122.0809954 
     } 
     } 
    } 
    } ] 
} 

有時,這些字段沒有值,有時他們做的。

+0

您能否提供幾種不同類型的響應 - 也許可以構建一個可靠的正則表達式。 – Sampson

+0

添加了一個恰好具有完整值的響應示例 – slandau

+0

您可以顯示一些您可能會收到的'formatted_address'的其他示例嗎? – Sampson

回答

12

你爲什麼要解析formatted_address

還有的address_components,你可以穿行其中,並尋找那些與

"types": [ "administrative_area_level_1", "political" ]// the state 
"types" : [ "locality", "political" ]//the city 

下面是一個例子:http://jsfiddle.net/doktormolle/QWPCL/

+0

+1好,@ Dr.Molle! – Sampson

+0

謝謝你。我會寫一些東西來循環所有這些。 – slandau

+0

如果結果是「street_address」類型,該怎麼辦?那麼你必須解析或使用其他本地化服務 –

0

這似乎爲我工作至今...

readCityAndStateFromResult: (data) -> 
    displayName = [] 
    for component in data[0].address_components 
     if component.types and component.types.length 
     switch true 
      when 'locality' in component.types 
      displayName.push component.long_name 
      when 'administrative_area_level_1' in component.types or 'administrative_area_level_2' in component.types 
      displayName.push component.short_name 
    return displayName.join ', ' if displayName.length 
    return null 
相關問題