转换为utm的Lat / lon距离计算与使用近似方法

时间:2017-07-07 09:17:40

标签: python distance geo utm pyproj

我有两种计算python中地理参考坐标之间距离的方法:

from pyproj import Proj
import math

def calc_distance(lat1, lon1, lat2, lon2):
    """
    Calculate the great circle distance between two points
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians
    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])

    # haversine formula
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2
    c = 2 * math.asin(math.sqrt(a))
    km = 6371 * c

    return km

def calc_distance_convert_utm(lat1, lon1, lat2, lon2):
    myProj = Proj("+proj=utm +zone=42, +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

    # convert to utm 
    utm_x1, utm_y1 = myProj(lat1, lon1)
    utm_x2, utm_y2 = myProj(lat2, lon2)

    diff_x = abs(utm_x1 - utm_x2)
    diff_y = abs(utm_y1 - utm_y2)

    distance = math.sqrt(diff_x**2 + diff_y**2)

    return distance

我使用以下值调用:

lat1 = 34.866527
lon1 = 69.674606
lat2 = 34.864990
lon2 = 69.657655
print "approximation method: ", calc_distance(lat1, lon1, lat2, lon2)
print "converting to utm method: ", calc_distance_convert_utm(lat1, lon1, lat2, lon2)

但是,如果我比较结果,我会得到两个不同的值:

approximation method:  1.55593476881
converting to utm method:  1928.21537269

注意,第一种方法以千米为单位返回距离,而第二种方法以米为单位返回距离。 我已经将结果与您可以在网上找到的距离计算器进行了比较,似乎第一种方法(近似方法)是更正确的"回答这是大多数在线计算器返回的价值。我想知道,为什么第二种方法(首先转换为utm)不会返回更相似的结果(如1555.9347 ......)。我差不多有0.5公里,这对我来说非常重要。

我做错了什么吗? 任何帮助表示赞赏!感谢

1 个答案:

答案 0 :(得分:0)

我发现了错误...... 在utm转换方法中,我在转换过程中切换了lat / lon值。它应该是:

utm_x1, utm_y1 = myProj(lon1, lat1)
utm_x2, utm_y2 = myProj(lon2, lat2)