Google Place 自动完成 API 边界在 swift iOS 中不起作用



我已经实现了谷歌地点自动完成 api,并且我已经应用了边界来限制我的自动完成搜索到一个特定的城市 奥兰多,佛罗里达州,美国,但谷歌地点 API 不会只过滤这个城市的数据。它正在搜索遍布美国和美国以外的其他城市名称。我希望谷歌自动完成 api 只返回这个城市地址。这是相同的代码:

   let placesClient = GMSPlacesClient()
   let searchBound = getCoordinateBounds(latitude: CLLocationDegrees(28.5383), longitude: CLLocationDegrees(81.3792), distance: 1.45)
    let filter = GMSAutocompleteFilter()
    filter.country = "USA"
    placesClient.autocompleteQuery(text!, bounds: searchBound, filter: filter, callback: { (results, error) in
    })

我的 getCoordinateBounds 方法

func getCoordinateBounds(latitude:CLLocationDegrees ,
                         longitude:CLLocationDegrees,
                         distance:Double = 0.001)->GMSCoordinateBounds{
    let center = CLLocationCoordinate2D(latitude: latitude,
                                        longitude: longitude)
    let northEast = CLLocationCoordinate2D(latitude: center.latitude + distance, longitude: center.longitude + distance)
    let southWest = CLLocationCoordinate2D(latitude: center.latitude - distance, longitude: center.longitude - distance)
    return GMSCoordinateBounds(coordinate: northEast,
                               coordinate: southWest)
}

注意:我想过滤这个纬度和经度半径大约 100 英里的地址(这就是为什么我给度数 1.45 的原因(。另一件事是,在我发现我的边界过滤器无法正常工作后,我添加了国家/地区文件管理器美国。到目前为止,我可以将地址搜索限制在美国。

还应在placesClient.autocompleteQuery()调用中定义 boundsMode 参数。查看文档:

https://developers.google.com/places/ios-api/reference/interface_g_m_s_places_client

boundsMode必须等于 GMSAutocompleteBoundsMode.Restrict
将边界解释为限制。默认情况下,边界被解释为偏差,这就是您从外部获得结果的原因。

https://developers.google.com/places/ios-api/reference/group___autocomplete_bounds_mode#gafbfae308afa98048c1e97864baa88568

let placesClient = GMSPlacesClient()
let searchBound = getCoordinateBounds(latitude: CLLocationDegrees(28.5383), longitude: CLLocationDegrees(81.3792), distance: 1.45)
let filter = GMSAutocompleteFilter()
filter.country = "USA"
placesClient.autocompleteQuery(text!, bounds: searchBound, boundsMode: GMSAutocompleteBoundsMode.Restrict, filter: filter, callback: { (results, error) in
})

参数 boundsMode 是在 SDK 2.5 中引入

我希望这有帮助!

最新更新