繁体   English   中英

Google地图地理编码服务

[英]Google maps geocoding service

我正在使用Google Maps 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

在大多数情况下,我尝试执行以下代码:

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM