【问题标题】:Restrict Google Place Autocomplete to within a city将 Google 地方自动填充功能限制在城市内
【发布时间】:2017-12-11 02:42:11
【问题描述】:

目前,我正在开发一个餐厅应用程序,人们可以在该应用程序中拍照并将其标记到 Google Place。但是,由于我的应用程序针对的是印度等发展中国家,因此 Google 地方信息的定义并不十分明确。所以我允许用户搜索他们认为更准确地反映了他们最喜欢的餐厅的位置的地方。 我使用Google Places API for androidPlaceAutocompleteFragment 片段作为输入机制,供用户搜索他们最喜欢的关节。但是,为了让他们更容易选择,我想将结果偏向特定区域 - 更具体地说是他们执行搜索的城市。

但是,如何获取用户当前位置的城市?我可以得到纬度,经度。但是如何检索某个纬度和经度对应的城市呢?

我是否需要从 lat、long 对地址进行反向地理编码才能获得地址?但如果我这样做,那么我如何可靠地获得城市名称?此后,在 PlaceAutocompleteFragment 中设置“城市”过滤器的正确规定是什么?

那么最简单的方法是什么?有任何想法吗?欣赏它。

【问题讨论】:

  • 我不确定您的问题是什么。 setBoundsBias()LatLngBounds 作为参数;为什么需要城市名称?
  • @HEATH3N 因为不同的城市有同名的餐厅。此外,不同的城市可能有不同的规模。所以例如一个大都市可能有40-50公里的半径,一个小城市可能只有10-20公里。相邻城市可能有几个地方共享共同的地区名称
  • 嗯,我想你还是想显示一个匹配列表,不是吗?如果用户要搜索像麦当劳这样的普通连锁餐厅,一个城市可能有 10 家(或者可能只是美国:/)。您可以让他们选择他们认为的位置(在地图上显示与用户的距离的所有位置),或者如果要求他们在该位置,只需将半径限制在一个很小的距离并选择第一个结果。我会继续寻找; Mapbox 或 OSM 可能有一种方法。
  • 是的,完全正确。你有我的问题。现在想象一下,如果我设置一个 50 公里半径的界限,选项的数量可能会更多,使体验变得更糟......所以,我的思考过程是,通常人们会非常熟悉他们所在城市的选项,所以如果可能的话,只要限制城市的半径......
  • 啊哈!您可以使用Mapzen API;见bbox 结果。您可以使用它在 Google 地图中生成 LatLngBounds 并将其传递给 setBoundsBias()。 Mapbox 也有这个功能;明天有时间我会试着举个例子。

标签: android google-places-api placeautocompletefragment


【解决方案1】:
autocompleteFragment.setBoundsBias(new LatLngBounds(southwestLatLng, northeastLatLng));

setBoundsBias() 接受一个LatLngBounds,它由两个LatLng 对象组成,代表一个边界矩形的西南点和东北点。 Google API 似乎没有提供获取城市边界的方法,因此您必须弄清楚在用户当前的纬度和经度中搜索和减去/添加的可接受半径是多少,以得出两个点边界矩形。见:Calculating bounding box a certain distance away from a lat/long coordinate in Java

【讨论】:

    【解决方案2】:

    一旦您获得address 表单Geocoder,您就可以从地址本身获得城市名称。 希望下面的代码能帮到你

    Geocoder geocoder = new Geocoder(this, Locale.getDefault());
     List<Address> addresses = geocoder.getFromLocation(MyLat, MyLong, 1);
     String cityName = addresses.get(0).getAddressLine(0);
     String stateName = addresses.get(0).getAddressLine(1);
     String countryName = addresses.get(0).getAddressLine(2);
    

    有关详细的谷歌地图示例,请查看以下链接:http://www.demoadda.com/demo/android/load-googlemap_107

    【讨论】:

    • cityName 总是出现在地址的第一行吗?或者它可以在不同的地址行之间有所不同...
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 2012-01-27
    • 2016-08-15
    • 2015-04-16
    • 2017-02-12
    • 1970-01-01
    • 2013-02-10
    • 2013-05-07
    相关资源
    最近更新 更多