2011-07-01 18 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) 
     } 

Şimdi kullandığım şey bu, ve bu zamanın% 90'ında çalışıyor. Diğer zamanlar, formatted_address devlet ile birlikte bir şehir ve bir şehir, diğer zamanlarda sadece şehir ve şehir, hayal edebileceğiniz her şey içerir.Google Haritalar'dan ayrıştırma şehir/eyalet Google Haritalar istek

Henüz bir ALWAYS sonucunu şehir/eyaleti Google Haritalar API'sı sonucundan satın aldım. İçinizden biri var mı? Teşekkürler.

Örnek Google, sayfadaki bir örnek olarak kullandığı bir tepkinin:

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

Bazen bu alanları değerlerini yok, bazen öyle.

+0

Birkaç farklı yanıt türü sağlayabilir misiniz - belki de güvenilir bir şekilde çalışacak düzenli bir ifade oluşturulabilir. – Sampson

+0

Tam değerlere sahip olan bir yanıtın bir örneği eklendi – slandau

+0

Aldığınız “formatted_address” birkaç başka örnek gösterebilir misiniz? – Sampson

cevap

12

Neden formatted_address ayrıştırıyorsunuz?

address_components vardır, bunları adım ve burada

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

olanlar için bakabilirsiniz bir örnek: http://jsfiddle.net/doktormolle/QWPCL/ Bu şimdiye kadar benim için çalışmak gibi görünüyor

+0

+1 İyi yakalama, Dr.Molle! – Sampson

+0

Teşekkürler adamım. Sadece onların içinden geçecek bir şeyler yazacağım. – slandau

+0

Sonuç "street_address" türündeyse ne olur? Sonra ayrıştırmak veya başka bir yerelleştirme hizmetini kullanmak zorundasınız. –

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 
İlgili konular