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

यही वह है जो मैं अब उपयोग करता हूं, और यह लगभग 9 0% काम करता है। वहीं दूसरी ओर, formatted_address एक शहर और राज्य के साथ एक शहर है, दूसरी बार सिर्फ शहर और शहर है, दूसरी बार सब कुछ आप का सपना कर सकते हैं।Google मानचित्र अनुरोध से शहर/राज्य पार्सिंग

मैं अभी तक हमेशा एक गूगल मैप्स एपीआई परिणाम से शहर/राज्य होने का एक सुसंगत तरीका नहीं मिली है। क्या आप में से कोई भी एक है? धन्यवाद।

एक प्रतिक्रिया है कि गूगल अपने पृष्ठ पर एक उदाहरण के रूप का उपयोग करता है का उदाहरण:

{ 
    "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 अच्छी पकड़, @ डॉ। मोल्ले! – 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 
संबंधित मुद्दे