首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为GMSPlace获取CLLocationCoordinate2D?

如何为GMSPlace获取CLLocationCoordinate2D?
EN

Stack Overflow用户
提问于 2016-02-01 21:20:58
回答 1查看 3.6K关注 0票数 2

我有一个CLLocationCoordinate2D形式的位置坐标。如何使用Google获取其等效的GMSPlace对象?

这看起来应该是一个非常简单的任务,但我在Google的文档或堆栈溢出中找不到任何东西。

EN

回答 1

Stack Overflow用户

发布于 2016-03-29 20:16:40

我正在研究一个类似的问题,我还没有找到确切的解决方案,但这些替代方案可能会根据您的情况而起作用。如果您可以使用GMSAddress而不是GMSPlace,那么您可以使用GMSGeocoder并调用reverseGeocodeCoordinate,如下面的选项2所示。

如果您试图获取用户的当前位置,可以选择两个选项:

  1. 使用Google当前的位置来获得一个GMSPlace。这个非常简单,如果你只需要去实际的地方就可以解决你的问题。这方面的问题是,我不知道如何获得所有地址(相对于业务)。您可以看到文档这里。 在viewDidLoad中: 设placesClient = GMSPlacesClient() 当你想得到现在的位置时: placesClient?.currentPlaceWithCallback({ (placeLikelihoods,错误))如果错误!= 0{ //句柄错误在某种程度上是无效的。}如果让placeLikelihood = placeLikelihoods?.likelihoods.first {让place = placeLikelihood.place //用返回的GMSPlace做您想做的事。})
  2. 使用 OneShotLocationManager 获取CLLocationCoordinate2D并将其转换为GMSAddress。必须用下面的代码替换_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为例。

代码语言:javascript
复制
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
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35140559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档