Swift 如何从我在搜索栏中定义的地图项构建路线

Posted

技术标签:

【中文标题】Swift 如何从我在搜索栏中定义的地图项构建路线【英文标题】:Swift How to build a route FROM map Item, which I define in Search Bar 【发布时间】:2020-05-10 12:03:06 【问题描述】:

对不起,如果主题不是那么准确。我正在尝试构建从点到点的地图路线,关键是两个点都是由用户定义的。所以我想从接口构建器中传递一个源 mapItem 和目标 mapItem 并在它们之间建立一个路由。

我做了什么: 我有一个建议表视图控制器,当在搜索栏中输入内容时,它会建议搜索表视图控制器的位置;然后搜索 TVC 将带有名称和地址的地图注释传递给结果地图视图。 在我的结果图视图中,我有两个按钮:Source 和 Destination。因此,当从搜索 TVC 传递地址时,mapView 建议按下两个按钮。如果按下 Destination 按钮,则意味着源地图项为 nil,它构建了从我当前位置到目标地图项的路线。这里没问题,但是当按下 Source 按钮时,不会存储源地图项,当搜索目标地图项并按下 Destination 按钮时,应用程序会从我当前的位置再次构建路线,忽略在此之前我按下 Source 按钮,我需要不是来自我当前位置,而是来自源地图项的路线。

所以在代码中,我已经定义了变量:

var mapItems: [MKMapItem]?

private var sourceMapItem: MKMapItem!

@IBOutlet weak var selectPointBmessage: UILabel!

@IBOutlet weak var resultMapView: MKMapView!

@IBOutlet weak var resultName: UILabel!
@IBOutlet weak var resultAddress: UILabel!

两个函数:findMe(),用于搜索我的当前位置,以及 buildRoute(destinationMapItem: MKMapItem),如果源地图项为 nil,则构建从我当前位置到destinationMapItem 的路线。

还有两个按钮:

@IBAction func sourceButton(_ sender: UIButton) 
        // add searched mapItems to Array of MapItems
        sourceMapItem = mapItems!.first

    // message saying the user to find destination is source button is pressed
        selectPointBmessage.isHidden = false


@IBAction func buildRouteButton(_ sender: UIButton) 
        // add searched mapItems to Array of MapItems
        let destinationMapItems = mapItems!.compactMap  (mapItem) -> MKMapItem in
            let destinationMapItem = mapItem

            return destinationMapItem
        

        // for each if several or for one if one - build a route(s) to it
            for destinationMapItem in destinationMapItems 
           buildRoute(sourceMapItem: sourceMapItem, destinationMapItem: destinationMapItem)
              


(mapItems在Search Table View Controller中定义和记录。这里我们使用compact map解压它们并开始与它们交互。)

以及添加注释、到 mapView 的路线、两个带有 Suggest TVC 和 Search TVC 的 Swift 文件。 还添加了 StoryBoard 的 printScreen 以显示它是如何组织的。 storyBoard printScreen 如果需要更多详细信息,请输入。

所以: 如何让我的应用记住 sourceMapItem 并在按下 Destination 按钮时构建用户定义的从点到点的路线?

【问题讨论】:

【参考方案1】:

所以我创建了一个 mapItems 数组,在选择表格行时将 mapItems 存储在其中。然后,当调用我的按钮时,使用该数组,我已将值分配给我的源点和目标点。

【讨论】:

以上是关于Swift 如何从我在搜索栏中定义的地图项构建路线的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制从我的位置到目的地位置的路线?

高德地图如何自行规划路线

在 Swift 的导航栏中获取搜索栏

如何在我的应用 iOS6 中获取行车路线

如何使用百度地图查询出行路线

谷歌地图 - 如何找出用户的位置并在 Swift 中显示从该位置到目的地点的路线?