限制Android Google商家信息API仅搜索指定区域

时间:2017-10-02 08:58:24

标签: java android google-maps google-places-api

我正在使用Android Google Places API来自动填充街道和地址。问题是它给了整个国家的所有街道。当然我添加了界限来限制搜索的位置,但它不能正常工作 - 它只给予优先级,所以换句话说,最好的结果将在列表中更高,仅此而已

所以代码:

       AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
                .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS)
                .setCountry("RU")
                .build();

        Intent intent =
                new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY)
                        .zzih(searchString) //that is for passing search string from toolbar
                        .setFilter(typeFilter)
                        .setBoundsBias(city.getBounds())
                        .build(this);

简而言之,问题是: 当我输入类似" Lenina Street"我看到.setBoundsBias(city.getBounds())中设置的界限超出了许多无用的结果。想象一下像" Lenina Street"存在于几乎每个的地方!

如何解决问题并限制搜索结果?

P.S。

  1. 我知道我可以使用Google Places Web APIGeoDataApi.getAutocompletePredictions()并手动过滤结果, 但这意味着我必须手动编写UI,我不想这样做 做。 这比我想象的还要糟糕。即使我从Web API或通过GeoDataApi获得结果,我只有预测不包含坐标,只有placeId。因此,如果我想按坐标过滤预测,我必须请求每个 placeId。换句话说,如果我有20个位置,我将不得不再做20个寻找坐标的请求。
  2. 此外,我可以在searchString中添加城市名称,这会使结果更好(但根本不会),但这会使地址写入不明确,城市名称也会发生,所以它也不是很好的解决方案。

1 个答案:

答案 0 :(得分:1)

我担心Android版Places API不支持严格限制。 Google问题跟踪器中有一项功能请求可以实现此目的:

https://issuetracker.google.com/issues/38188994

随意添加此功能请求,以添加您的投票并订阅来自Google的通知。

与此同时,解决方法可能是使用支持strict bounds的Places API网络服务并手动实施用户界面。

<强>更新

功能请求已被Google标记为已修复。请查看https://stackoverflow.com/a/50134855/5140781,了解如何在Places API for Android中应用严格边界。