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

Đây là những gì tôi sử dụng ngay bây giờ và điều này hoạt động khoảng 90% thời gian. Lần khác, các formatted_address có một thị trấn và một thành phố cùng với nhà nước, lần khác chỉ là thị trấn và thành phố, lần khác tất cả mọi thứ bạn có thể mơ ước.Phân tích thành phố/tiểu bang từ yêu cầu của Google Maps

Tôi chưa tìm thấy cách nào LUÔN LUÔN LUÔN nhận được thành phố/tiểu bang từ kết quả API Google Maps. Các bạn có ai không? Cảm ơn.

Ví dụ về một phản ứng mà Google sử dụng làm ví dụ trên trang của họ:

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

Đôi khi những cánh đồng không có giá trị, đôi khi họ làm.

+0

Bạn có thể cung cấp một số loại phản hồi khác nhau - có lẽ một biểu thức chính quy có thể được xây dựng có thể hoạt động đáng tin cậy. – Sampson

+0

Đã thêm ví dụ về một câu trả lời có giá trị đầy đủ – slandau

+0

Bạn có thể hiển thị một vài ví dụ khác về 'formatted_address' mà bạn có thể nhận được không? – Sampson

Trả lời

12

Tại sao bạn phân tích cú pháp formatted_address?

Có những address_components, bạn có thể đi bộ qua chúng và tìm kiếm những người thân với

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

Dưới đây là một ví dụ: http://jsfiddle.net/doktormolle/QWPCL/

+0

+1 Bắt tốt, @ Dr.Molle! – Sampson

+0

Cảm ơn người đàn ông. Tôi sẽ chỉ viết một cái gì đó để lặp qua tất cả chúng. – slandau

+0

nếu kết quả là loại "street_address" thì sao? Sau đó, bạn buộc phải phân tích cú pháp hoặc sử dụng một số dịch vụ bản địa hóa khác –

0

Điều này dường như làm việc cho tôi cho đến nay ...

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 
Các vấn đề liên quan