如何在 Android 中的 Google 个位置 API 中获取特定于国家/地区的结果以进行自动完成预测?

How to get Country Specific Results in Google Places API for AutocompletePredictions in Android?

我想获取特定国家/地区的搜索结果。我已经尝试设置纬度和经度,但它可能包括其他国家的结果接近所需的国家!

我看到其他问题建议在请求中传递&components=country:COUNTRY_NAMEURL(我看到了here)。但我想传递来自 Google 个地方 API.

的请求

我正在使用以下方法:

Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint.toString(), mBounds, mPlaceFilter);

但我找不到任何方法来传递国家/地区名称以获取特定国家/地区的结果。 (我已经尝试在请求 URL 中传递国家名称并且它正在工作。)但是如何通过使用 Places.GeoDataApi.getAutocompletePredictions() 方法来实现相同的目的?

或者有没有其他方法可以在不在请求中发送国家名称的情况下实现此目的URL?

有两种方法可以做到这一点。

  1. 使用您所在国家/地区的 latLng 边界来限制结果。(但这将是矩形边界。因此限制将是近似值)。

2 您应该使用网络服务 api。它也适用于 android。

http://codetheory.in/google-place-api-autocomplete-service-in-android-application/

您可以使用地址类型和地址组件以您希望的方式使用此 API 来限制结果:

https://developers.google.com/maps/documentation/geocoding/intro#Types

对于javascript,您可以使用如下代码的组件限制,尝试为Android重写:

var options = {
    // bounds : boundsByCity,
     types: ["geocode"],
     componentRestrictions: { country: "IN" } 
};

//Create the search box and link it to the UI element
var input = document.getElementById('pac-input');
var temp = new google.maps.places.Autocomplete(input, options);

The (regions) type collection instructs the Places service to return any result matching the following types:

  • locality
  • sublocality
  • postal_code
  • country
  • administrative_area_level_1
  • administrative_area_level_2

The (regions) type collection is not supported in Google Places API for Android.

参考自:Google Place Types.

官方指南

如果你想实现这个,

  • 使用 LatLng 边界和您所在国家/地区的经纬度特定区域来限制结果。

  • 您还可以使用 Google 个地方 Web Service

示例:用于通过网络服务限制您的国家,显示国家印度的结果。

URL: https://maps.googleapis.com/maps/api/place/autocomplete/json?key=AIzaSyCkvow9LlFNOywy8lzaekn-xROBZRsSFvU&input=a&types=(cities)&components=country:ind

注意: 如果您想将 country 过滤器应用于 Google 个地点 API,很遗憾,您有到目前为止,要使用 WebService Android API 中没有可用的 Filter/Method 按国家/地区限制(不包括 LatLng 范围)。

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().
                    setTypeFilter(Place.TYPE_COUNTRY).setCountry("IN").build();

Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                            .setFilter(typeFilter)
                            .build(this);