按国家/地区

时间:2015-08-07 20:34:28

标签: android google-play-services google-places-api

我正在开发一款Android应用,我希望用户在特定城市搜索数据(我的应用提供的数据)。为此,我有一个搜索字段,用户可以在其中键入城市名称。我使用Google Places API检索自动填充结果,如下所示:


    PendingResult results =
 Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, searchQuery,
 mBounds, mPlaceFilter);

在我的情况下,mBounds代表了德国的界限,因为我只对德国的城市感兴趣,我不希望其他国家的城市出现在自动完成预测中。现在,显然德国不是一个完美的广场,所以mBounds包含整个德国,但也包括像瑞士这样的周边国家的一部分。问题是:如何删除德国地点的所有自动填充预测?

我的第一个想法是使用场所过滤器来首先只获得一个国家的预测。根据{{​​3}},这确实可用于按地区(例如按国家/地区)进行过滤,但遗憾的是,Google Places API for Android 不支持此特定过滤(根据文档)

  

Google Places API for Android不支持(区域)类型集合。

似乎也没有任何可能从documentationPlace对象获取AutocompletePrediction的国家/地区。所以我自己甚至都不能过滤。

我能想到的唯一解决方案如下:

  1. 从预测中获取Place并使用Place检索Geocoder API,然后从中获取国家/地区并进行过滤。然而,这是一个额外的网络呼叫(以及另一个违反我的配额)似乎完全没有必要,因为在我看来Address对象或至少AutocompletePrediction个对象应该知道哪个国家/地区是一个地方。毕竟,它是这些对象的description / toString结果的一部分。然而,这只是一个像“慕尼黑,德国”的字符串。

  2. 使用1.中提到的描述字符串来确定国家/地区。然而,这似乎是比1更糟糕的解决方案,因为描述是根据用户的区域设置进行本地化的,这可能是一切。所以只是寻找“德国”就不会做这个工作。

  3. 我希望找到一个比我目前提出的解决方案更好的解决方案。我无法想象没有更好的方法来做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我有同样的问题没有运气找到一种方法来过滤特定国家,所以我作为一个愚蠢的解决方法做的是过滤结果,如果它在我的情况下包含国家名称"阿拉伯联合酋长国&#34 ;

while (iterator.hasNext()) {
    AutocompletePrediction prediction = iterator.next();
    // Get the details of this prediction and copy it into a new PlaceAutocomplete object.

   if(prediction.getDescription().contains("United Arab Emirates"))
    resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
            prediction.getDescription()));
}

答案 1 :(得分:1)

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().
                setTypeFilter(Place.TYPE_COUNTRY).setCountry("you country code").build();

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