swift - 如何在 Swift 中的 map 上显示两个位置之间的方向?

标签 swift mapkit direction

我试图在 Swift 中显示两个位置之间的方向。当我的应用程序启动时,它首先显示当前位置,然后我可以使用文本字段和按钮在 map 上看到我想要的城市。现在我正在尝试显示当前位置和搜索城市之间的路线。

感谢这个功能,我可以在 map 上看到我想要的城市:

@IBAction func myButton(sender: AnyObject)
{
    let geoCoder = CLGeocoder()

    let addressString = myTextField.text

    geoCoder.geocodeAddressString(addressString, completionHandler:
        {(placemarks: [AnyObject]!, error: NSError!) in

            if error != nil
            {
                println("Geocode failed with error: \(error.localizedDescription)")
            }

            else if placemarks.count > 0
            {
                let placemark = placemarks[0] as! CLPlacemark
                let location = placemark.location

                self.mapControl(location.coordinate.latitude, longitude: location.coordinate.longitude)
            }
    })
}

这是我的 mapControl 函数,它在 map 上加载城市:

func mapControl(latitude : Double, longitude : Double)
{
    var lastlocation = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

    let span = MKCoordinateSpanMake(3, 3)
    let region = MKCoordinateRegion(center: lastlocation, span: span)
    let regionRadius : CLLocationDistance = 1000
    mapView.setRegion(region, animated: true)
}

如何显示当前位置和搜索城市之间的方向?

最佳答案

为了获得路线,您实际上必须使用 calculateDirectionsWithCompletionHandler 从 Apple 的 map 服务器获取路线。

首先为源和目标创建相关的 MKMapItems,例如

let geocoder = CLGeocoder()
let location = CLLocation(latitude: sourceLatitude, longitude: sourceLongitude)

geocoder.reverseGeocodeLocation(location, completionHandler: {
    (placemarks:[AnyObject]?, error:NSError?) -> Void in
    if placemarks?.count > 0 {
        if let placemark: MKPlacemark = placemarks![0] as? MKPlacemark {
            self.source =  MKMapItem(placemark: placemark)
        }
    }
    })

你还想为目的地重复这个

let request:MKDirectionsRequest = MKDirectionsRequest()

// source and destination are the relevant MKMapItems
request.setSource(source)
request.setDestination(destination)

// Specify the transportation type
request.transportType = MKDirectionsTransportType.Automobile;

// If you're open to getting more than one route, 
// requestsAlternateRoutes = true; else requestsAlternateRoutes = false;
request.requestsAlternateRoutes = true

let directions = MKDirections(request: request)

directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in

    if error == nil {
    self.directionsResponse = response
    // Get whichever currentRoute you'd like, ex. 0
    self.route = directionsResponse.routes[currentRoute] as MKRoute
}
})

然后在检索到 MKRoute 之后,您可以像这样将折线添加到 map 中:

mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)

这样做,您将能够在 Swift 中显示两个位置之间的方向。只需相应地编辑代码即可。

关于swift - 如何在 Swift 中的 map 上显示两个位置之间的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29985734/

相关文章:

ios - MapKit LocalSearch 不工作

javascript - 检测鼠标方向

ios - 我的代码中出现 NSInternalInconsistencyException 错误

ios - MapKit注解叠加顺序

ios - 在 iOS 上向 map 添加音频

java - 如何使用 trig 在玩家对象的 "front"处生成一个对象

flutter - Android模拟器谷歌地图显示错误的位置

swift - 4 点之间的 Scenekit 形状

ios - Swift 如何从两个文本字段中获取 Int 并生成随机数

swift - 无法从 iOS 上的另一个应用程序中找到用于打开文件应用程序的私有(private) URL