获取标记的精确地址 - Google Maps V3

时间:2011-05-25 20:19:58

标签: javascript json google-maps-api-3 street-address

我正在使用Google Maps V3 API。每当用户在街道上放置一个别针(或者距离街道几米/码)时,它应该获得我用来从掉落的标记中检索的地址组件。

困扰我的是,当我在街道上放一个别针时,有时它会返回门牌号/名称,因为它应该始终返回列表:

  • 街道名称;
  • 市;
  • 国;
  • 县;
  • then Country

我通过自定义方式浏览地址组件,返回从Google Maps API生成的整个JSON响应:

getAddress(pinLocation, function(addressobj)
{
    for(i = 0; i < addressobj[0].address_components.length; i++)
    {
        var addressComp = addressobj[0].address_components[i].long_name;
        $('input[type=text][address=comp]:eq(' + i + ')').val(addressComp);
    }
});

因此,当返回数据时,它返回结果,并且每个地址组件(来自上面的列表)都进入输入字段。这是什么样的预期结果:

  • San Antonio Valley Rd (street name)
  • 利弗莫尔(city)
  • 暗黑破坏神范围(state)
  • 圣克拉拉(county)
  • 加利福尼亚(country)

这是一个完美的回应,但是从街道上的一些地方(大多数拥挤的街道)我会得到:

  • 2920 (should be Dalarna Ct)
  • Dalarna Ct (should be Turlock)
  • Turlock (this is okay, but is omitted)
  • Turlock (should be Stanislaus)
  • Stanislaus (should be California)

我不知道如何制作一个不显示门牌号的万无一失的地址组件,并且总是返回有关列表的信息(第一个),因为数据在丢弃时总是会有所不同当我需要它来产生与列表相同的结果时,街道上的标记。

2 个答案:

答案 0 :(得分:3)

将此用于getAddress功能:

    geocode2FormFields = {'route':0,
                          'locality':1,
                          'sublocality':1,
                          'administrative_area_level_1':2,
                          'administrative_area_level_2':3,
                          'country':4};

    for(i = 0; i < addressobj[0].address_components.length; i++) { 
        for(j = 0; j < addressobj[0].address_components[i].types.length; j++) {
            formFieldIndex = geocode2FormFields[addressobj[0].address_components[i].types[j]];
            if (typeof formFieldIndex !== 'undefined') {
                var addressComp = addressobj[0].address_components[i].long_name;
                $('input[type=text][address=comp]:eq(' + formFieldIndex + ')').val(addressComp);
            }
        }
    }

正如谷歌的文档所说,“反向地理编码不是一门精确的科学。”但是,我认为这应该为美国大多数地方提供合理的结果。您的字段名称(例如“州”)似乎假定在美国的位置,所以我猜这将满足您的需求,或者至少比您现在的理想情况更接近理想。

如果您发现需要或需要调整geocode2FormFields内容,http://code.google.com/apis/maps/documentation/javascript/services.html下的“地址组件类型”中会记录各种类型。

答案 1 :(得分:0)

除了具有“long_name”属性之外,每个address_components都有一个“types”属性,它是一个类型的数组。以下是一些类型: 街牌号码 路线(街道名称) 邮政编码 还有更多。

查看http://code.google.com/apis/maps/documentation/places/#PlaceDetails