2010-02-28 66 views
1

我使用谷歌地图API地址解析服务来获得位置的国家名称,邮政编码等谷歌地图的地理编码服务

JSON响应:

{ 
    "name": "1600 Amphitheatre Parkway, Mountain View, CA, USA", 
    "Status": { 
    "code": 200, 
    "request": "geocode" 
    }, 
    "Placemark": [ 
    { 
     "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", 
     "AddressDetails": { 
     "Country": { 
      "CountryNameCode": "US", 
      "AdministrativeArea": { 
      "AdministrativeAreaName": "CA", 
      "SubAdministrativeArea": { 
       "SubAdministrativeAreaName": "Santa Clara", 
       "Locality": { 
       "LocalityName": "Mountain View", 
       "Thoroughfare": { 
        "ThoroughfareName": "1600 Amphitheatre Pkwy" 
       }, 
       "PostalCode": { 
        "PostalCodeNumber": "94043" 
       } 
       } 
      } 
      } 
     }, 
     "Accuracy": 8 
     }, 
     "Point": { 
     "coordinates": [-122.083739, 37.423021, 0] 
     } 
    } 
    ] 
} 

这里的问题是 - 有时(尽管检查未定义)我得到一个国家未定义的错误。

var country = document.getElementById("id_country"); 
if(place.AddressDetails.Country.CountryNameCode != undefined){ 
    country.value = place.AddressDetails.Country.CountryNameCode; 
} 

另外如何访问PostalCodeNumber?

place.AddressDetails.AdministrativeArea.SubAdministrativeArea.PostalCode.PostalCodeNumber 

回答

1

大多数时候,当我尝试这样的代码:

place.AddressDetails.AdministrativeArea. //etc. 

我没有得到任何东西,我不知道该如何解释,但我的队友写了一个脚本来手动解析它它对我们来说很好(代码虽然很多)。您可以尝试并编辑它以获取剩余字段(您的邮政编码):

//[MARKEL]: Returns object type: obj.ad1, obj.ad2, obj.ad3, obj.state, obj.country 
function ResolveGeoCode(point, returnCall) { 
    //[MARKEL]: initialize geocoder 
    geocoder = new GClientGeocoder(); 

    geocoder.getLocations(point, function getAddress(response) { 
     //[MARKEL]: Create a object to call proxy location Set location variable to be global 
     //because it will be assigned in call-back function 
     var Location; 

     if (!response || response.Status.code != 200) { 
      //MARKEL: [TODO] => Set code here to alert that the address id invalid 
     } 
     else { 
      place = response.Placemark[0]; 
      place = response.Placemark[0]; 
      point = new GLatLng(place.Point.coordinates[1], 
         place.Point.coordinates[0]); 

      var len = place.address.toString().split(",").length; 
      var array = place.address.toString().split(","); 
      //alert(place.address); 
      //alert(len); 
      if (len >= 3) { 
       if (array[0].length > 2) { 
        Location = { 
         Street: array[0], 
         State: array[1], 
         Country: array[2] 
        }; 
       } 
       else { 
        Location = { 
         Street: array[1], 
         State: "", 
         Country: array[2] 
        }; 
       } 
      } 
      else if (len == 2) { 
       Location = { 
        Street: "", 
        State: array[0], 
        Country: array[1] 
       }; 

      } 

      else if (len == 1) { 
       Location = { 
        Sreet: "", 
        State: "", 
        Country: array[0] 
       }; 
      } 
      else { 
       //[MARKEL]: [TODO] => Place code here to indicate that the address is not valid. 
      } 

     } 
     returnCall(Location); 
     return Location; 
    }); 

}