Google地图自动填充:仅输出没有国家/地区和城市的地址

时间:2012-04-12 14:04:20

标签: google-maps-api-3

我使用Places library自动完成地址输入。搜索仅限于一个城市,我得到如下输出:

“Rossiya,Moskva,Leninskiy prospekt 28”

如何隐藏“Rossiya,Moskva”? ......

我的查询:

function() {
        // Search bounds
        var p1 = new google.maps.LatLng(54.686534, 35.463867);
        var p2 = new google.maps.LatLng(56.926993, 39.506836);
        self.options = {
            bounds : new google.maps.LatLngBounds(p1, p2),
            componentRestrictions: {country: 'ru'},
        };

        var elements = document.querySelectorAll('.address');

        for ( var i = 0; i < elements.length; i++) {
            var autocomplete = new google.maps.places.Autocomplete(elements[i],
                    self.options);
        }

5 个答案:

答案 0 :(得分:3)

您可以但必须在两个位置替换输入字段的值。 例如:

var autocomplete = new google.maps.places.Autocomplete(input, placesOptions);
var input = document.getElementById('searchTextField');

在'place_changed'事件中,您执行以下操作:

placeResult = autocomplete.getPlace();
//This will get only the address
input.value = placeResult.name;

这会将searchtextfield中的值更改为街道。

第二位有点棘手:

input.addEventListener('blur', function(){
// timeoutfunction allows to force the autocomplete field to only display the street name.
if(placeResult){ setTimeout(function(){ input.value = placeResult.name; }, 1); }

我们必须这样做的原因是因为如果您只为模糊添加事件监听器,那么Google地方将使用完整地址填充输入文件,因此您必须“等待”谷歌更新然后强制您通过等待几毫秒来改变。

没有setTimeout函数尝试它,你会看到我的意思。

答案 1 :(得分:2)

修改

你做不到。我反过来说,你只是在寻找一个城市。没有办法只从地址组件中打印出街道名称(我假设这是一个街道名称)。

<小时/> 对象提出了什么

From the docs:

  

(cities)类型集合指示Place服务返回与localityadministrative_area3匹配的结果。

var input = document.getElementById('searchTextField');
var options = {
  bounds: defaultBounds,
  types: ['(cities)']
};

autocomplete = new google.maps.places.Autocomplete(input, options);

答案 2 :(得分:0)

结果你有哈希,从中你可以得到你想要的部分:

 google.maps.event.addListener(autocomplete, 'place_changed', function() {
          var place = autocomplete.getPlace();

现在从“地方”你可以得到它

place.geometry.location.lat()

和地址

place.address_components[0] or place.address_components[1] ...

取决于你想要的东西

答案 3 :(得分:0)

Inside place_changed设置超时功能:

var streetString = place.address_components[0] or place.address_components[1];

window.setTimeout(function() {
  $('input').val(streetString);
}, 200);

这个解决方案对我有用。

答案 4 :(得分:0)

我有一个非常类似的问题确实是可以解决的。这在Angular 2项目中也应该适用于其他地方。我过滤了机构的结果,并希望只显示名称并隐藏结果的地址部分。这对我来说很有用,一旦你选择了一个建议,就会执行一个功能:

   getAddress(place: Object) {
    this.zone.run(() => {
        this.establishment = place['name'];
    });

其中zone是在构造函数中注入的NgZone组件,而this.establishment是与输入字段中[(NgModel)]绑定的变量。