2

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

4

3 回答 3

4

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

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

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

  • 您需要询问用户是否允许使用他们的位置。这包括调用 CLLocationManager 的 requestWhenInUseAuthorization 并检查异步结果。
  • 将 NSLocationWhenInUseUsageDescription 条目添加到您的信息(在上面的链接中描述)以告诉用户您想对信息做什么
  • 您很可能需要异步获取位置。为此,您的视图控制器需要实现 MKMapViewDelegate 并且您将使用 func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) 来获取用户位置。
于 2015-02-22T19:33:17.470 回答
1

我认为您是从 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];
    }
    
于 2015-06-10T08:00:29.393 回答
0

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

好的答案已经在这里发布;但是,没有人在 swift 中给出具体的例子。这里有几件事要记住:

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

location 属性是只读的!

var location: CLLocation! { get }

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

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

希望这可以帮助!干杯。

于 2015-07-29T16:31:07.550 回答