2011-07-01 14 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の結果から市/州を取得するという一貫性のある方法はまだ見つかりませんでした。あなたは誰か持っていますか?ありがとう。 Googleはそのページ上の例のように使用する1つの応答の

例:

{ 
    "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

完全な値を持つ1つのレスポンスの例を追加しました – 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 
関連する問題