谷歌地图地理编码服务

发布于 2024-08-22 21:01:01 字数 1421 浏览 2 评论 0原文

我正在使用谷歌地图 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;
}

另外我如何访问邮政编码?

place.AddressDetails.AdministrativeArea.SubAdministrativeArea.PostalCode.PostalCodeNumber

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": {
              "SubAdministrativeAreaName": "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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自我难过 2024-08-29 21:01:01

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

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

}

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文