开发者

Google maps geocoding service

I am using google maps API geocoding service to get location's country name, postal code etc.

JSON response:

{
  "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": {
              "SubAdministrative开发者_开发问答AreaName": "Santa Clara",
              "Locality": {
                "LocalityName": "Mountain View",
                "Thoroughfare": {
                  "ThoroughfareName": "1600 Amphitheatre Pkwy"
                },
                "PostalCode": {
                  "PostalCodeNumber": "94043"
                }
              }
            }
          }
        },
        "Accuracy": 8
      },
      "Point": {
        "coordinates": [-122.083739, 37.423021, 0]
      }
    }
  ]
}

Here is the problem - sometimes (despite checking for undefined) I get an error that country is undefined.

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

Also how can I access PostalCodeNumber?

place.AddressDetails.AdministrativeArea.SubAdministrativeArea.PostalCode.PostalCodeNumber


Most of the time when I try code such as:

place.AddressDetails.AdministrativeArea. //etc.

I dont get anything and I have no idea how to explain it, but my team mate wrote a script to manually parse it and it works fine for us (code is alot though). You can try it and edit it for getting the rest of missing fields (your postal code):

//[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;
    });

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜