我已经实现了谷歌地点自动完成 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 中引入
我希望这有帮助!