一尘不染

Google Maps API有时不返回AddressDetails中的PostalCode

json

我创建了一个函数来接受位置输入,将其传递给Google Maps Javascript API V2,然后返回一个纬度/经度/
归一化的地址,我必须将其拆分为数据库中的不同字段(例如,城市,州,邮政)
。我要求输入至少具有5级/邮政编码精度,以便Google返回的数据始终具有…

  • 国家
  • 城市(地区)
  • 州(行政区)
  • 邮政
  • 纬度/经度

这是Google返回的有关JSON对象结构的一些信息。
http://code.google.com/apis/maps/documentation/javascript/v2/services.html#Geocoding_Structured

问题 :在某些情况下,Placemark.AddressDetails将不包含邮政编码,而汇总的Placemark.address将包含邮政编码。

例如,以下输入示例将在Placemark.address内返回邮政编码,但不会在Placemark.AddressDetails中返回邮政编码。

  • 10437 Innovation Drive,密尔沃基,威斯康星州53226
  • MOMA
  • 帝国大厦->实际上,它返回SubAdministrativeArea.Locality下某个奇怪的“ DependentLocality”内部的邮政编码。

这是我的故障排除代码:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- You must insert your maps API script here. -->
<script language="javascript" type="text/javascript" src="http://www.json.org/json2.js"></script>

<script type="text/javascript"> 
    $(document).ready(function()
    {
        var geocoder = new GClientGeocoder();

        $.geolocateAddress = function(address)
        {  
            geocoder.getLocations(address, function(response)
            {
                if (response != null && response.Placemark != undefined)
                {

                    var placemark = response.Placemark[0];
                    // Placemark has Post code or higher accuracy -> http://code.google.com/apis/maps/documentation/javascript/v2/reference.html#GGeoAddressAccuracy
                    if (placemark.AddressDetails.Accuracy >= 5)
                    {
                        alert(placemark.address);
                        try {
                            alert(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
                        } catch (err) {
                            alert('What the deuce?  Why is there no postal code?... I bet you the placemark.address has the postal code.');
                            alert(JSON.stringify(placemark));
                        }
                    } else {
                        alert('Sorry, this requires at least a postal code input for accuracy')
                    }
                } else {
                    alert('Failed to geo locate address');
                }
            });
        };

        $("#location").blur(function(event)
        {
            var address = $("#location").val();
            $.geolocateAddress(address);
        });

    });
</script>

<form action="" method="get"> 
    <input title="Location" type="text" value="" id="location" /> 
</form>

ew …关于Google Maps地标的架构,我是否还不了解?通过升级到Google Maps Javascript API
V3是否可以解决此问题?(V2 JSON对象似乎更直观IMO)
http://code.google.com/apis/maps/documentation/javascript/services.html

我要为此丢下毛巾。希望有人可以帮忙!


阅读 299

收藏
2020-07-27

共1个答案

一尘不染

自从地理编码服务存在以来,这一直是一个问题。

有关背景知识,请参阅我在2008年发布到问题跟踪器的“错误报告/功能请求”:

http://code.google.com/p/gmaps-api-
issues/issues/detail?id=606

在那个话题中,帕梅拉·福克斯(Pamela Fox)和索尔·米切尔(Thor Mitchell)是Google的员工,当时他们是地图团队的成员。

一年半后,谷歌做出了一些改进:

https://groups.google.com/group/google-maps-
api/browse_thread/thread/4d0ade19dadcda4f#

情况有了很大改善,但是地理编码并不是一门精确的科学。

无论如何,您可能使用的是旧版本的地址解析器,因为我收到了与此请求相关的邮政编码:

http://maps.google.com/maps/api/geocode/xml?sensor=false&address=10437%20Innovation%20Drive、%20Milwaukee、%20WI

那是一个直接的http请求,但是API V3应该返回相同的数据。

2020-07-27