如何从Android中的特定国家/地区/政治部门获取地址?

时间:2019-05-12 06:36:23

标签: java android google-maps

我正在开发一个使用Google Maps API的应用程序,并且用户设置了一个地址,该应用程序找到了与用户输入的地址相匹配的其他可能的地址,但是我想要一个特定城市,州或省的地址国家(如果可能)。

例如: 我想找到地址“华盛顿大道”,谷歌地图找到一些地址:

  • “华盛顿大道,宾夕法尼亚州菲拉达菲亚”
  • “路易斯安那州新奥尔良,华盛顿大道”
  • “德克萨斯州休斯顿,华盛顿大道”

但是,如果我只想在休斯顿市内取得结果怎么办?还是Pensilvania?或另一个国家?

我在Android Studio中有此Java代码,可以找到与字符串(用户写的地址)匹配的可能地址,并且可能的选项只能显示5,并且它返回由写的地址的纬度和经度用户

Geocoder geocoder = new Geocoder(this);
List<Address> addresses = new ArrayList<>();
addresses = geocoder.getFromLocationName("Manuel de la Peña y Peña 805-835, Bella Vista, 64410 Monterrey, N.L.", 5);
if(addresses.size() > 0) {
    double latitude= addresses.get(0).getLatitude();
    double longitude= addresses.get(0).getLongitude();
}

那么,如何在Android版Google Maps API中的特定城市,州或国家/地区中找到地址?

1 个答案:

答案 0 :(得分:0)

为了获得位于特定区域内的地址,您应该使用支持严格限制地址搜索的服务。当前,地方自动完成服务支持严格的范围,您可以在Android版Places SDK中找到文档:

https://developers.google.com/places/android-sdk/autocomplete#get_place_predictions_programmatically

这个想法是创建一个与您感兴趣的城市或地区相匹配的矩形边界对象,并在搜索地址预测时使用严格的边界过滤器。

以下是代码段。请注意,在构建预测请求时,setLocationRestrictionsetCountry过滤器

AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

// Create a RectangularBounds object for area you are interested in.
RectangularBounds bounds = RectangularBounds.newInstance(
    new LatLng(-33.880490, 151.184363),
    new LatLng(-33.858754, 151.229596));
// Use the builder to create a FindAutocompletePredictionsRequest.
FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
// Call setLocationRestriction() with bounds in order to restrict search to given area.
    .setLocationRestriction(bounds)
    .setCountry("au")
    .setTypeFilter(TypeFilter.ADDRESS)
    .setSessionToken(token)
    .setQuery(query)
    .build();

placesClient
    .findAutocompletePredictions(request)
    .addOnSuccessListener((response) -> {
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
        }
    });

有关更多详细信息,请查看Android版Places SDK。

我希望这会有所帮助!