iOS - 测量距离的最佳方式

iOS - The best way to measure distance

我目前正在做一个项目,我需要用户告诉在哪里(在真实世界地图上)建造一堵墙。

问题:(在您看来)用户显示(/告诉)放置墙的位置的最准确方式是什么?

想法1我想过在地图上画图,但是那样不太准确。

想法 2 我想到的另一件事是,用户应该将他们的 phone 放在墙的开头和结尾。通过这种方式,应用程序可以使用 CLLocationManager 来打印地图上的位置,还可以测量两端之间的距离。

这是我尝试过的代码,但它并不是那么准确。

let locationManager = CLLocationManager()

var location1: CLLocation = CLLocation()
var location2: CLLocation = CLLocation()

override func viewDidLoad() {
    super.viewDidLoad()
    setup()
}

func setup() {
        resett.isHidden = true

        // Ask for Authorisation from the User.
        self.locationManager.requestAlwaysAuthorization()

        // For use in foreground
        self.locationManager.requestWhenInUseAuthorization()

        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
            locationManager.activityType = .fitness
            locationManager.startUpdatingLocation()
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        currentCord.text = "\(locValue.latitude) \(locValue.longitude)"
    }

    func measure(cord1: CLLocation, cord2: CLLocation) -> Float {
        let distanceInMeters = cord1.distance(from: cord2) //result is in meters
        return Float(distanceInMeters)
    }

    func calculateCoordinates(status: Int) {
        let coordinate = calculate()

        if status == 1 {
            location2 = coordinate

            let measured = measure(cord1: location1, cord2: location2)
            print("\(measured) m")
            displayLabel.text = "\(measured)m"
            resett.isHidden = false
        } else {
            location1 = coordinate
        }
    }

    func calculate() -> CLLocation {
        let locValue:CLLocationCoordinate2D = locationManager.location!.coordinate
        let coordinate = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude)

        return coordinate
    }

    @IBAction func FirstAction(_ sender: Any) {
        button1.setTitle("Klar", for: .normal)
        calculateCoordinates(status: 0)
    }

    @IBAction func SecondAction(_ sender: Any) {
        button2.setTitle("Klar", for: .normal)
        calculateCoordinates(status: 1)
    }

提前致谢!

假设你指的是现实世界"wall",尺寸从厘米到几米,iPhone GPS 的位置确实不适合这些一种测量,是良好覆盖区域的典型最小误差 5 米

如果明确询问地理坐标(精度非常高)不可行: 我宁愿明确地询问用户尺寸,然后可能在地图上拖动对象(墙),在接近可能的最终位置时尽可能地缩放。

PS:无论如何可以进行许多优化以提高 CLLocationManager 的准确性,首先在接收后过滤掉具有低 accuracy and manually away the one with big horizzontal accuracy 问题的结果它。

不幸的是 iPhone 上的 GPS 不是很准确。如果你能在 32 米半径的圆圈内获得准确的位置,那你就做得很好,而且那是在开阔的区域,天空视线清晰,没有无线电干扰。如果事情不太理想,结果可能会远不准确。

(Apple 报告其 GPS 定位结果中的 "horizontal accuracy" 读数实际上是误差范围的半径。)

为了建造一堵墙,32 米根本不够好,iPhone 中的 GPS 也不能可靠地做得更好。你真的需要测量设备。