如何为 Google Places API 自动完成文本框设置默认值

Posted

技术标签:

【中文标题】如何为 Google Places API 自动完成文本框设置默认值【英文标题】:How to set a default value for a Google places API auto complete textbox 【发布时间】:2016-05-25 23:35:41 【问题描述】:

我正在处理一个与谷歌示例https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform 中的页面足够接近的页面,并且工作正常。

不过我还需要添加一项功能,即默认将自动完成的值设置为当前用户城市。

我正在使用以下代码获取使用 html5 中的地理定位 API 登录用户的城市和国家/地区。然而,挑战是让自动完成接受这个值作为它的默认值。当我尝试将值直接放入文本框中时,自动完成将其视为错误值。

navigator.geolocation.getCurrentPosition(function(pos) 
   var currentLocation = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
   var geocoder = new google.maps.Geocoder();
   var city = "";
   var country = "";
   geocoder.geocode('latLng': currentLocation, function(results, status, from) 
      if (status == google.maps.GeocoderStatus.OK) 
         if (results[1]) 
            for (var i = 0; i < results[0].address_components.length; i++) 
               for (var b = 0; b < results[0].address_components[i].types.length; b++) 
                  if (results[0].address_components[i].types[b] == "administrative_area_level_1") 
                     city = results[0].address_components[i];
                     break;
                  
                  if (results[0].address_components[i].types[b] == "country") 
                     country = results[0].address_components[i];
                     break;
                  
               
            
            var fromDefault = city.long_name + " - " + country.long_name;
            $('#address-from').val(fromDefault);
         
      
   );
, 
function(error)                     
   alert('Unable to get location: ' + error.message);
, options);

知道如何手动填写自动填充位置文本框的默认值吗?

【问题讨论】:

你能为此创建一个 sn-p 或 bin 吗? 你解决了吗???请帮助我也遇到同样的问题.... 很抱歉回复晚了,但不,我没有解决它,我不得不走很长的路来构建一段时间的自定义自动完成功能。如果您有任何问题,请告诉我 【参考方案1】:

我有相同的要求,即在地图初始加载时设置初始位置。

我就是这样做的:

正如Jon Hannah 提到的,我使用自动完成服务来获取预测,然后使用第一个预测来获取地点(使用 place_id)。使用我的默认位置字符串填充自动完成输入。 终于触发了place_change事件。

  this.input.nativeElement.value = this.testLocationStr;

  let autocompleteService = new google.maps.places.AutocompleteService();
  let request = input: this.testLocationStr;
  autocompleteService.getPlacePredictions(request, (predictionsArr, placesServiceStatus) => 
    console.log('getting place predictions :: predictionsArr = ', predictionsArr, '\n',
      'placesServiceStatus = ', placesServiceStatus);

    let placeRequest = placeId: predictionsArr[0].place_id;
    let placeService = new google.maps.places.PlacesService(this.mapObj);
    placeService.getDetails(placeRequest, (placeResult, placeServiceStatus) => 
      console.log('placeService :: placeResult = ', placeResult, '\n',
        'placeServiceStatus = ', placeServiceStatus);

      this._handlePlaceChange(placeResult);

    );
  );

Plunker:https://plnkr.co/edit/9oN6Kg?p=preview

【讨论】:

这太棒了!谢谢。【参考方案2】:

我在尝试解决类似用例(使用用户搜索的最后一个位置填充自动完成)时遇到了这篇文章。

据我所知,无法为它识别为地点的自动完成设置默认值。但是,我认为您可以使用Autocomplete Service(example - 另请参阅#AutocompletePrediction 和#PlacesService 的参考部分)来模拟这种效果:

将自动完成设置为已识别的城市和国家/地区 将城市和国家/地区传递给自动完成服务 确定首选预测的地点 ID(例如,选择 type = 'city' 的第一个预测) 使用 Places Service 获取所选地点 ID 的详细信息 (PlaceResult)(与使用 autocomplete.getPlace() 的结果相同) 有一个回调来满足您对 PlaceResult 的需求

这会让您的用户觉得自动完成功能正在使用中。如果结果是他们需要的,那就太好了!如果他们想搜索不同的地方,请设置您的自动完成以侦听 place_changed 并运行 autocomplete.getPlace() 后跟相同的回调。

【讨论】:

如果可以的话,请相信这个答案 我不明白 - 你要我做什么? 我认为他希望你对答案宣战

以上是关于如何为 Google Places API 自动完成文本框设置默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Google Places API 启用 CORS

如何为我的 Android 应用获取 Google Places API 密钥

Google Places API 自动填充特定城市

Google Places Api,放置自动完成入站查询

使用 Google PLACES Api 搜索查看自动完成建议

Google Places API,使用邮政编码自动完成