【问题标题】:Why iOS CLLocation shows incorrect values?为什么 iOS CLLocation 显示不正确的值?
【发布时间】:2016-08-07 12:39:24
【问题描述】:

我正在尝试计算 2 个坐标之间的距离。为此,我这样做:

func setupLocationManager() {
    if CLLocationManager.authorizationStatus() == .NotDetermined {
        locationManager.requestWhenInUseAuthorization()
    }

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.startUpdatingLocation()
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let latitude = locations.last?.coordinate.latitude
    let longitude = locations.last?.coordinate.longitude

    let myLocation = CLLocation(latitude: latitude!, longitude: longitude!)
    let targetLocation = CLLocation(latitude: 41.4381022, longitude: 46.604910)

    let distance = myLocation.distanceFromLocation(targetLocation)
    print(distance)
}

我正在查看谷歌地图有 13 公里的距离!但我的应用显示 2-3 公里!

我该如何改进?

【问题讨论】:

  • 您看到传递给您的方法的纬度和经度是多少?这对我来说是正确的。
  • 我手动放置一个坐标并检测自己的位置。并想计算两个位置之间的距离@Arclite
  • 你如何查看谷歌地图?

标签: ios swift coordinates cllocationmanager


【解决方案1】:

Google 地图为您提供两个地点之间的路线距离,CLLocation 为您提供两个地点之间的鸟瞰距离。

来自documentation

此方法通过追踪来测量两个位置之间的距离 它们之间的一条线,沿着地球的曲率。这 产生的圆弧是平滑曲线,不考虑 两个位置之间的特定高度变化。

【讨论】:

    【解决方案2】:

    这是一个基于working GPS app 的示例。

    import CoreLocation
    
    public class SwiftLocation: NSObject, CLLocationManagerDelegate {
    
        private let locationManager = CLLocationManager()
        private var latestCoord: CLLocationCoordinate2D
    
        init(ignore:String) {
    
            locationManager.requestAlwaysAuthorization()
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.distanceFilter = kCLDistanceFilterNone
            locationManager.startUpdatingLocation()
            latestCoord = locationManager.location!.coordinate
    
            super.init()
    
            locationManager.delegate = self
        }
    
        private func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
    
            latestCoord = manager.location!.coordinate
    
        }
    
        public func getLatest() -> CLLocationCoordinate2D {
            return latestCoord
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多