我的目标是将来自Google Places Android API的自动补全结果仅限制为特定国家(美国)。
我正在使用以下API:
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
mBounds, mPlaceFilter);
看起来latlnbounds应该做这项工作。
如果是,那么美国的latlnbounds值是多少?
您使用哪个来源获得一个国家的LatLngBounds ?
latlnbounds是一个矩形-因此它也可以在结果中包含其他国家。那又如何呢?
有更好的方法吗?
从Google Play Services v9.6开始,您现在可以为您的自动完成建议设置国家过滤器。请确保您的游戏服务版本至少是v9.6
AutocompleteFilter autocompleteFilter = new AutocompleteFilter.Builder()
.setTypeFilter(Place.TYPE_COUNTRY)
.setCountry("US")
.build();
Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
.setFilter(autocompleteFilter)
.build(this);
您可以使用他们的ISO 'Aplha 2'代码更改国家代码
如果你使用的是PlaceAutocompleteFragment你可以这样设置:
AutocompleteFilter autocompleteFilter = new AutocompleteFilter.Builder()
.setTypeFilter(Place.TYPE_COUNTRY)
.setCountry("US")
.build();
mAutocompleteFragment.setFilter(autocompleteFilter);
latlnbounds构造函数的方法定义如下:
LatLngBounds (LatLng southwest, LatLng northeast)
。取两个LatLng值,一个为边界的西南位置,另一个为边界的东北位置,矩形的另外两个点被平凡地计算。
If yes, then what are the values of LatLngBounds for United States?
我的粗略猜测,如果我没有错的话,西南LatLng值将是32.6393,-117.004304美国和东北LatLng值44.901184,-67.32254
Which source did you use to get LatLngBounds for a country?
我通常使用http://www.findlatitudeandlongitude.com/通过在需要的位置放置标记来检查这些LatLng值。
LatLngBounds is a rectange - so it can include other countries in the result as well. What about that?
是的,你是正确的,上面的边界将是纯粹的矩形,并且不可能使用这些边界将结果限制为仅美国。
这是因为矩形[bounds]将使用两个Latlng点[SE &NW]我们提供给施工方,其他两点可以不计。
Is there a better way to do it?
是的,你可以用Google Places Web Service API代替。下面的教程解释了如何使用API.
http://codetheory.in/google-place-api-autocomplete-service-in-android-application/
你可以使用地址类型和地址组件以你想要的方式使用这个API来限制结果:https://developers.google.com/maps/documentation/geocoding/intro类型
您可以使用链接中提到的类型按国家,地区和各种其他类型进行限制。
希望有帮助!!
p。S:如果有人能回答如何限制在特定国家使用游戏服务API的边界,那就太棒了!!
对于新的Place api 2019,您必须这样做
FindAutocompletePredictionsRequest request =
FindAutocompletePredictionsRequest.builder()
.setLocationBias(bounds)
.setCountry("au") //to set country only for e.g australia
.setTypeFilter(TypeFilter.ADDRESS)
.setSessionToken(token)
.setQuery(query)
.build();
或者直接使用:
yourFragment.setCountry("Country Alpha 2 code");
val autocompleteFragment =
supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment?
// Specify the types of place data to return.
autocompleteFragment!!
.setPlaceFields(listOf(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG))
.setCountry("UG")