【问题标题】:Mapbox Basic Navigation App: How to set route origin to User's Location?Mapbox Basic Navigation App:如何将路线原点设置为用户位置?
【发布时间】:2021-05-01 12:25:22
【问题描述】:

我从 Mapbox 教程中获得了一些代码,用于在转弯视图中的基本导航应用程序。一切正常,我已经添加了一个 Waypoint。

在示例中,路线的原点设置为固定坐标。这与我的用例不兼容。 Waypoints 和 Destination 也由坐标固定,这很好。但来源必须是“用户的位置”,这显然是可变的。

也许有人可以帮助我,将不胜感激。 :)


import Foundation
import UIKit
import MapboxCoreNavigation
import MapboxNavigation
import MapboxDirections

class PlacemarktestViewController: UIViewController {
    override func viewDidLoad() {
    super.viewDidLoad()
     
    let origin = CLLocationCoordinate2DMake(37.77440680146262, -122.43539772352648)

    let waypoint = CLLocationCoordinate2DMake(27.76556957793795, -112.42409811526268)

    let destination = CLLocationCoordinate2DMake(37.76556957793795, -122.42409811526268)
***strong text***
    let options = NavigationRouteOptions(coordinates: [origin, waypoint, destination])
     
     
        
        
        
    Directions.shared.calculate(options) { [weak self] (session, result) in
    switch result {
    case .failure(let error):
    print(error.localizedDescription)
    case .success(let response):
    guard let route = response.routes?.first, let strongSelf = self else {
    return
    }
     
    // For demonstration purposes, simulate locations if the Simulate Navigation option is on.
    // Since first route is retrieved from response `routeIndex` is set to 0.
    let navigationService = MapboxNavigationService(route: route, routeIndex: 0, routeOptions: options)
    let navigationOptions = NavigationOptions(navigationService: navigationService)
    let navigationViewController = NavigationViewController(for: route, routeIndex: 0, routeOptions: options, navigationOptions: navigationOptions)
    navigationViewController.modalPresentationStyle = .fullScreen
    // Render part of the route that has been traversed with full transparency, to give the illusion of a disappearing route.
    navigationViewController.routeLineTracksTraversal = true
     
    strongSelf.present(navigationViewController, animated: true, completion: nil)
    }
    }
    }
    }

【问题讨论】:

    标签: ios swift navigation mapbox turn-by-turn


    【解决方案1】:

    @zeno,设置你可以使用的用户位置

    mapView.setUserTrackingMode(.follow, animated: true)
    

    不要忘记将NSLocationWhenInUseUsageDescription 键添加到信息列表中。

    或者您可以获取坐标并使用CoreLocation手动设置它们

    import CoreLocation
    
    let locationManager = CLLocationManager()
    locationManager.delegate = self
    
    locationManager.requestLocation() // Request a user’s location
    

    文档在这里requestLocation

    然后实现CLLocationManagerDelegate方法locationManager(:, didUpdateLocations:)来处理请求的用户位置。该方法在使用locationManager.requestLocation()后会被调用一次。

    func locationManager(
        _ manager: CLLocationManager, 
        didUpdateLocations locations: [CLLocation]
    ) {
        if let location = locations.first {
            let latitude = location.coordinate.latitude
            let longitude = location.coordinate.longitude
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多