使用经度-纬度计算距离b / w两点时结果的巨大差异

时间:2018-11-01 06:12:36

标签: python django postgis geodjango haversine

我正在尝试使用SRID(32148)计算两个位置之间的距离 这是我的两点

Point-1:
Lat:46.489767 Long:-119.043221
Point-2:
Lat:47.610902 Long:-122.336422

This网站上指出,这两个点的距离(以英里为单位)是173.388,但是从下面得到的代码中,我得到的结果是0.002161632093865483

这是我正在使用的代码

    employeeloc = modelEmployee.objects.filter(user__first_name="adam")[0].location
    employerloc = modelEmployer.objects.filter(user__first_name="adam")[0].location
    meters = employerloc.distance(employeeloc)
    #Caluclate in miles
    dobj = Distance(m=meters)
    mi = dobj.mi

这是附加了调试结果的更多细节 enter image description here 关于我的结果为何如此不同的任何建议?

更新

我尝试使用SRID 4326使用以下代码转换位置。但是结果仍然不正确

enter image description here

1 个答案:

答案 0 :(得分:2)

您似乎已将lon / lat坐标用作SRID(32148)坐标;您需要对其进行转换。

不正确查询给出的结果为347万,因为坐标与SRID不匹配:

select 
st_distance(
st_setsrid(st_point(-122.336422,47.610902),32148),
st_setsrid(st_point(-119.043221,46.489767),32148))
-- 3.47880964046985

此查询为您提供了您期望的173.71英里结果:

select 
st_distance(
st_transform(st_setsrid(st_point(-122.336422,47.610902),4326),32148),
st_transform(st_setsrid(st_point(-119.043221,46.489767),4326),32148))

--279558.106935732m (=173.71mi)

这与该查询的结果类似:

select 
st_distance(
st_setsrid(st_point(-122.336422,47.610902),4326)::geography,
st_setsrid(st_point(-119.043221,46.489767),4326)::geography)

--279522.55326056 m (= 173.69 mi)