Google Maps API有时不会在AddressDetails中返回PostalCode

时间:2010-08-13 18:59:54

标签: javascript jquery json google-maps

我创建了一个函数来获取位置输入,将其传递给Google Maps Javascript API V2,并返回纬度/经度/ 规范化地址,我必须将其拆分为数据库中的不同字段(即城市,国家,邮政)。我要求输入至少level 5/post code accuracy,以便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,Milwaukee,WI 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>

Phew ......有什么我不了解Google Maps地标的架构吗?我可以通过升级到Google Maps Javascript API V3来解决此问题吗? (V2 JSON对象似乎更直观IMO) http://code.google.com/apis/maps/documentation/javascript/services.html

我准备放弃这个。希望有人可以提供帮助!

1 个答案:

答案 0 :(得分: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应该返回相同的数据。