【问题标题】:Getting Directions From an Annotation on the Map从地图上的注释中获取方向
【发布时间】:2017-12-10 02:51:20
【问题描述】:

我正在尝试从我的地图上找到的任何注释中获取路线。我使用CloudKit 作为数据库来存储我所有的用户信息。注释使用CloudKit 中的location 索引来标出它们在地图上的位置。每次我运行我的代码时,注释都会返回为零,我如何让我的代码从注释中识别位置并从苹果地图返回方向?

@IBAction func getDirections(_ sender: Any) {

    let view = MKPointAnnotation().coordinate


    print("Annotation: \(String(describing: view ))")

    let currentLocMapItem = MKMapItem.forCurrentLocation()

    let selectedPlacemark = MKPlacemark(coordinate: view, addressDictionary: nil)
    let selectedMapItem = MKMapItem(placemark: selectedPlacemark)

    let mapItems = [selectedMapItem, currentLocMapItem]

    let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]

    MKMapItem.openMaps(with: mapItems, launchOptions:launchOptions)



}

【问题讨论】:

  • 你在做let view = MKPointAnnotation().coordinate。那仍然没有意义。您正在创建一个空白注释,并获取它的坐标(但它没有)。您应该只获取您的坐标(来自 iCloud 或其他)并在创建 MKMapItem 时直接使用该坐标。
  • 发现了!但现在并不是我的所有注释都会显示...stackoverflow.com/questions/47745464/…

标签: ios swift mapkit cloudkit mkannotation


【解决方案1】:

有两种选择:

  1. 您可以使用MKDirections 在您的应用中直接获取路线,而无需使用地图应用。

  2. 您还可以将其传递给地图应用程序(如您上面的示例),以便用户可以享受完整的实时导航(查看交通等)。

但您不会使用“在地图中打开”API 在您的应用中返回路线。为此使用MKDirections


在你的代码 sn-p 中,你正在做:

let view = MKAnnotationView()

这会创建一个空白的注解视图(没有注解),所以很明显,如果你尝试为它获取注解,它就没有注解。你大概想要么

  • 保存您添加到地图视图的原始注释并使用它;
  • 响应MKMapViewDelegate 方法之一,并在地图视图上为该注释视图使用annotation;或
  • 返回您最初创建注释的原始数据源,并从中创建一个新的注释(不是注释视图)。

但不要尝试创建一个新的空白注释视图并尝试为其检索注释视图,因为它没有。

【讨论】:

  • 感谢罗布的回答!我想我会选择第二个选项(对我的应用程序更有意义)。我的注释仍然被读取为 nil,你对我的代码有什么问题有什么想法吗?
  • 您的let view = MKAnnotationView() 并没有像我认为的那样做。这将创建一个新的空白注释视图,该视图没有与之关联的注释。您要么想在地图视图上获取注释视图,要么保存添加到地图视图的注释并使用它。请参阅扩展答案。
  • 感谢罗布的解释性回答!我正在努力,再次感谢。
  • 这就是我的代码现在的样子。启动 Apple 地图有效,但仍无法读取 Cloudkit 中的信息……有什么建议吗?
  • 这应该作为一个完全独立的问题发布,因为它与上述问题重新指示无关。当你发布它时,显示你是如何将它保存在 iCloud 中的,因为这将决定如何检索它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多