如何在Swift中获得到地球上各点之间的距离?

如何在Swift中获得到地球上各点之间的距离?,swift,ios8,distance,latitude-longitude,Swift,Ios8,Distance,Latitude Longitude,我用了两种方法。。苹果的 @IBAction func getDistancePressed(sender: AnyObject) { distanceLabel.text = "\(location_2.distanceFromLocation(location_1))m" // Meters } 还有我的 @IBAction func getDistancePressed(sender: AnyObject) { let lat1 = location_1.co

我用了两种方法。。苹果的

 @IBAction func getDistancePressed(sender: AnyObject) {

    distanceLabel.text = "\(location_2.distanceFromLocation(location_1))m" // Meters

}
还有我的

  @IBAction func getDistancePressed(sender: AnyObject) {

    let lat1 = location_1.coordinate.latitude
    let lon1 = location_1.coordinate.longitude
    let lat2 = location_2.coordinate.latitude
    let lon2 = location_2.coordinate.longitude


    distanceLabel.text = "\(getDistanceFromLatLonInMeter(lat1, lon1: lon1, lat2: lat2, lon2: lon2))m"

}
func getDistanceFromLatLonInMeter(lat1 : Double ,lon1 : Double ,lat2 : Double ,lon2 : Double) -> Double{


    var earthRadius : Double = 6372797.560856 //inMeter

    var deltaLAT : Double = deg2rad(lat2 - lat1)
    var deltaLON : Double = deg2rad(lon2 - lon1)

    var latitudeH = sin(deltaLAT * 0.5)
    latitudeH *= latitudeH

    var lontitudeH = sin(deltaLON * 0.5)
    lontitudeH *= lontitudeH

    var tmp = cos(deg2rad(lat2)) * cos(deg2rad(lat1));

    return earthRadius * 2.0 * asin(sqrt(latitudeH + tmp*lontitudeH))

}
func deg2rad(deg : Double) -> Double {

    return deg * 0.017453292519943295769236907684886
}
两个都给了我同样的价值,但都错了。。当我移动iPhone大约1米时,它会给我11米,当我移动3米时,它会给我20米,以此类推 . 我不知道问题出在哪里。做这件事的正确方法是什么。如何获得距离

例如->

第一纬度->24.43484485008

第一经度->39.6552843828735

最后纬度->24.4349537442103

经度->39.6552204902715

它给出的距离->13.379米


实际距离应为0.7米

距离定位法很好。如果该方法和手动方法给出相同的结果,则输入坐标可能是问题所在。如果坐标来自定位服务,你不能假设它总是给出一个1米精度的精确位置。记录实际坐标。我真的不希望你的函数是准确的——它假设地球是球形的,而地球不是球形的——你引用的地球半径是小数点后6位,但在远离赤道的高纬度地区,地球的有效半径不可能接近这一点。从这里开始,也许我不想深入,我只是想开发一个智能尺子。还有其他方法吗?这些坐标实际上相距13.3米。问题一定是当你移动0.7米时,定位服务没有提供足够高的精度。我如何改进它?