8

我使用Places 库来自动完成地址输入。搜索仅限于一个城市,我得到这样的输出:

"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);
        }
4

5 回答 5

5

您可以,但您必须在两个地方替换输入字段的值。例子:

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); }

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

在没有 setTimeout 函数的情况下尝试它,你会明白我的意思。

于 2012-10-30T20:22:19.280 回答
1

编辑

你不能。我有相反的看法,你只是在寻找一个城市。没有办法只从地址组件中打印出街道名称(我假设那是街道名称)。


与所问内容相反

从文档:

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

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

autocomplete = new google.maps.places.Autocomplete(input, options);
于 2012-04-13T11:57:51.107 回答
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] ...

取决于你想得到什么

于 2012-09-18T14:50:11.690 回答
0

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

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

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

于 2017-10-11T14:59:23.387 回答
-1

在 place_changed 里面设置了一个超时函数:

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

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

这个解决方案对我有用。

于 2014-03-30T04:33:01.167 回答