如何将MKUserLocation转换为CLLocation? - 迅速

时间:2015-02-22 19:25:06

标签: swift cllocation cllocationdistance mkuserlocation

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

3 个答案:

答案 0 :(得分:4)

MKUserLocation具有属性位置,恰好是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!)来获取用户位置。

答案 1 :(得分: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];
    }
    

答案 2 :(得分:0)

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

这里已经发布了很好的答案;然而,没有一个在swift中给出具体的例子。以下是一些需要注意的事项:

  

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

位置属性是只读的!

var location: CLLocation! { get }

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

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

希望这有帮助!欢呼声。