【问题标题】:Google maps geocoding service谷歌地图地理编码服务
【发布时间】:2010-02-28 05:55:59
【问题描述】:

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

【问题讨论】:

    标签: javascript json google-maps geocoding


    【解决方案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;
        });
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多