【问题标题】:How to convert MKUserLocation to CLLocation? - swift如何将 MKUserLocation 转换为 CLLocation? - 迅速
【发布时间】:2015-04-24 02:15:25
【问题描述】:

我需要一种将 MKUserLocation 转换为 CLLocation 的方法,以便我可以使用 swift 中的 distanceFromLocation 方法快速找到用户位置与另一个预定义 CLLocation 之间的距离。

【问题讨论】:

    标签: swift cllocation cllocationdistance mkuserlocation


    【解决方案1】:

    MKUserLocation 有属性 location,恰好是 CLLocation 类型。

    https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKUserLocation_Class/index.html#//apple_ref/occ/instp/MKUserLocation/location

    但是,您需要先做好几件事。

    • 您需要ask the user for permission 才能使用他们的位置。这包括调用 CLLocationManager 的 requestWhenInUseAuthorization 并检查异步结果。
    • 将 NSLocationWhenInUseUsageDescription 条目添加到您的信息中(如上面的链接中所述),以告诉用户您要如何处理这些信息
    • 您很可能需要异步获取位置。为此,您的视图控制器需要实现 MKMapViewDelegate,并且您将使用 func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) 来获取用户位置。

    【讨论】:

    • 每当我使用这个属性时,它似乎是 nil 并且已经显示了用户位置。
    • 好的,我扩展了答案。
    【解决方案2】:

    我认为您是从 mapView 获取您的 MKUserLocation 对吗?

    所以您必须按照以下步骤操作:

    1. 确保您拥有显示用户位置的用户和系统权限
    2. 在 mapView 上显示用户位置后,将控制器设置为 mapView 委托。
    3. 实现方法:- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

      // Code
      - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
          [userLocation.location distanceFromLocation:_yourOtherLocation];
      }
      

    【讨论】:

      【解决方案3】:

      Xcode 6.4,适用于 iOS 8.4,启用 ARC

      这里已经发布了很好的答案;但是,没有人在 swift 中给出具体的例子。这里有几点需要牢记:

      MKUserLocation 类定义了一种特定类型的注释,用于标识用户的当前位置。您不直接创建此类的实例。相反,您从应用中显示的地图视图的 userLocation 属性中检索现有的 MKUserLocation 对象。

      location 属性是只读的!

      var location: CLLocation! { get }
      

      所以使用这个属性可以直接使用 distanceFromLocation:,但是不要使用当前用户的位置,因为它显然会返回 0 米。您很可能必须初始化一个新的 CLLocation 来测量。

      func distanceFromLocation(_ location: CLLocation!) -> CLLocationDistance
      

      希望这会有所帮助!干杯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 2021-05-26
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 2020-11-04
        相关资源
        最近更新 更多