我正在构建的应用程序要求我询问用户他的位置,自动完成,并确保他确实在附近。所以我的想法是使用Google Places Autocomplete,并将结果返回到UITableView。
为了确保用户位于他正在键入的位置附近,我想将GMSCoordinatesBound设置为用户当前位置周围的特定半径。我知道如何通过CoreLocation获取用户的位置,但我不知道如何将这些坐标转换为我可以在Google Places autocompleteQuery中使用的GMSCoordinateBounds对象。任何人都可以给我一个暗示吗?
谢谢!
答案 0 :(得分:8)
您现在可以限制Google自动完成ViewController搜索的范围。见这里:https://developers.google.com/places/ios-api/autocomplete#set_the_gmscoordinatebounds_of_autocomplete
具体来说,您可以使用CLLocationManager获取lat和long。然后添加偏移量以获取地图区域的边界区域。
您可以在视图中没有地图的情况下执行此操作。例如,对于向字段添加地址的情况。
使用https://developers.google.com/places/ios-api/autocomplete#add_a_full-screen_control设置全屏搜索。但是在激活搜索自动完成的IBAction中添加(Swift 2)此代码:
let manager = CLLocationManager()
manager.startUpdatingLocation()
let lat = manager.location!.coordinate.latitude
let long = manager.location!.coordinate.longitude
let offset = 200.0 / 1000.0;
let latMax = lat + offset;
let latMin = lat - offset;
let lngOffset = offset * cos(lat * M_PI / 200.0);
let lngMax = long + lngOffset;
let lngMin = long - lngOffset;
let initialLocation = CLLocationCoordinate2D(latitude: latMax, longitude: lngMax)
let otherLocation = CLLocationCoordinate2D(latitude: latMin, longitude: lngMin)
let bounds = GMSCoordinateBounds(coordinate: initialLocation, coordinate: otherLocation)
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.autocompleteBounds = bounds
autocompleteController.delegate = self
self.presentViewController(autocompleteController, animated: true, completion: nil)
我在Google文档和此帖子的帮助下想出了这个: Moving a CLLocation by x meters
调整帖子的参数以更改边界区域。现在我获得了本地搜索结果,而不是默认的纽约及其他。
这假设您已正确设置适用于iOS的Google Places API。并且,您安装了Google iOS API密钥(在AppDelegate中),安装了Google客户端以及ViewController中的AutoCompleteViewControllerDelegate扩展。