使用经纬度计算两点之间的距离时结果差异巨大

Posted

技术标签:

【中文标题】使用经纬度计算两点之间的距离时结果差异巨大【英文标题】:Huge Difference in result when calculating distance b/w two points using longitude-latitude 【发布时间】:2018-11-01 06:12:35 【问题描述】:

我正在尝试使用 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

这是一个更详细的附加调试结果 关于为什么我的结果如此不同的任何建议?

更新:

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

【问题讨论】:

【参考方案1】:

您似乎已将 lon / lat 坐标用作 SRID(32148) 坐标;你需要改造它们。

这个不正确查询给出了 3.47m 的结果,因为坐标与 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)

【讨论】:

什么是 4326 ?你能解释一下吗? 4326 是 lon/lat 的 WGS84 参考系统的 SRID - 即它是您的坐标的 SRID。 我尝试使用您的转换建议,但得到了不同的结果。我正在更新我的帖子 刚刚更新了我的帖子 - 我正在转换我的位置,但我仍然得到不正确的结果 看起来您还没有解决根本问题,即您的 SOURCE(坐标)在 4326 中,但您已将其设置为 32148。您需要将位置 SRID 设置为 4326,然后将其转换为 32148 - 我认为您的更新是错误的。

以上是关于使用经纬度计算两点之间的距离时结果差异巨大的主要内容,如果未能解决你的问题,请参考以下文章

转:mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

ARCGis中怎样计算两点间的距离

如何计算两个经纬度之间的距离[重复]

利用SQL计算两个地理坐标(经纬度)之间的地表距离

如何计算经纬度两点之间的距离? [复制]

怎样计算两个经纬度之间的距离 百度百科