当前位置: 首页 > 面试题库 >

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

蒯胜泫
2023-03-14
问题内容

我创建了一个函数来接受位置输入,将其传递给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

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


问题答案:

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

有关背景知识,请参阅我在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应该返回相同的数据。



 类似资料:
  • 原文是这样的: 这确实令人惊讶,但最终明白了(嗯,至少我想我明白了)为什么会这样发生。 现在,我将第二个更改为: 如果我遗漏了一些明显的东西,或者我的问题是愚蠢的,让我提前说声对不起。还有谢谢你!

  • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

  • 问题内容: 在Pandas中,当我选择一个索引中只有一个条目的标签时,我会得到一个“序列”,但是当我选择一个具有多于一个条目的标签时,我就会得到一个数据框。 这是为什么?有没有办法确保我总是取回数据帧? 问题答案: 可以肯定的是,这种行为是不一致的,但是我认为很容易想到这种情况很方便。无论如何,要每次获取一个DataFrame,只需将一个列表传递给即可。还有其他方法,但我认为这是最干净的方法。

  • 我注意到,如果没有where(),returning()操作不可用。这是故意的吗? 这项工作: 这不起作用: 我应该考虑这个“黑客”吗?

  • 问题内容: 今天,我了解并决定将其使用和测试。我知道整数是不可变的,因此id应该是(?)相同。但是,当我在提示中进行测试时,我注意到了一些细微的差异,并想找出其背后的原因。 凉!到目前为止,所有签出。但是之后… 好的,所以测试一下,我注意到此行为一直持续到256年。id最多可以是8位数字,然后257将返回更大的id,可以是15位数字。因此类型必须是8个字节。 所以我发现它与8个字节长有关,但是任何

  • 问题内容: 我有一个PDO功能: 当我执行选择查询以返回一行(或更多)时,它将返回例如: 当查询失败时(例如,如果我使用错误的语法),它将返回FALSE。 但是,如果在查询中未找到任何行,则它还会返回FALSE。 因此,查询中有错误且没有行的返回值都将返回FALSE。那怎么可能?仅当查询中有错误时,我才需要返回FALSE,例如,当没有结果时,我就需要返回NULL。我的功能有问题吗? 谢谢! 问题答