我有一个CLLocationCoordinate2D形式的位置坐标。如何使用Google获取其等效的GMSPlace对象?
这看起来应该是一个非常简单的任务,但我在Google的文档或堆栈溢出中找不到任何东西。
发布于 2016-03-29 20:16:40
我正在研究一个类似的问题,我还没有找到确切的解决方案,但这些替代方案可能会根据您的情况而起作用。如果您可以使用GMSAddress而不是GMSPlace,那么您可以使用GMSGeocoder并调用reverseGeocodeCoordinate,如下面的选项2所示。
如果您试图获取用户的当前位置,可以选择两个选项:
_didComplete函数,以返回GMSAddress而不是CLLocationCoordinate2D。
私有函数_didComplete(位置: CLLocation?,错误: NSError?) { locationManager?.stopUpdatingLocation()如果让位置=位置{ 无我 completionHandler:{无我 -> Void in if错误!= 0无我->Void if错误!.firstResult() nil {self.didComplete?(位置:零,错误:NSError(域: self.classForCoder.description() ),代码: LocationManagerErrors.InvalidLocation.rawValue,userInfo: nil ){self.didComplete?(位置:响应!.firstResult(),error:.firstResult} }) {self.didComplete?(位置:零,错误:错误)} locationManager?.delegate = nil locationManager = nil }有人在这里上发布了一个方便的包装器,用于从GMSAddressComponents中提取字段,在处理这个API时,您可能会发现这些字段很有用。这样做很容易,因为当您想访问这个城市时,您所要做的就是以place.addressComponents?.city为例。
extension CollectionType where Generator.Element == GMSAddressComponent {
var streetAddress: String? {
return "\(valueForKey("street_number")) \(valueForKey(kGMSPlaceTypeRoute))"
}
var city: String? {
return valueForKey(kGMSPlaceTypeLocality)
}
var state: String? {
return valueForKey(kGMSPlaceTypeAdministrativeAreaLevel1)
}
var zipCode: String? {
return valueForKey(kGMSPlaceTypePostalCode)
}
var country: String? {
return valueForKey(kGMSPlaceTypeCountry)
}
func valueForKey(key: String) -> String? {
return filter { $0.type == key }.first?.name
}
}https://stackoverflow.com/questions/35140559
复制相似问题