您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用GeoDjango进行3d距离计算

使用GeoDjango进行3d距离计算

让我们分解问题:

接受两个地理字段或表达式,并以 形式返回它们之间的

因此,Distance(p1, p2)返回一个Distance对象。 如果您这样做:

    p1 = Instrument.objects.get(pk=151071000).coordinates
p2 = Instrument.objects.get(pk=151071008).coordinates
d = Distance(m=p1.distance(p2))
print d.m

您将获得以米为单位的测量值。

我会坚持的annotate解决方案,这似乎更可靠!(意见回应)

自从最初的答案以来,我在这里编写了一个问答风格的示例:如何在GeoDjango中计算两个点之间的3D距离(包括海拔高度),该距离使用高度在2个点之间的距离计算要好得多(并且容易出错) 。

排序:

我们需要使用Haversine公式Vicenty公式来计算2个点之间的2D大圆距离,然后将其与2个点之间的高度差(delta)结合起来,以计算它们之间的欧几里得距离,如下所示:

    dist = sqrt(great_circle((lat_1, lon_1), (lat-2, lon_2).m**2, (alt_1 - alt_2)**2)

解决方案假定海拔高度以米为单位,因此也将great_circle结果转换为米。

将此留在此处以用于继续注释。

令polar_point_1 =(long_1,lat_1,alt_1)和polar_point_2 =(long_2,lat_2,alt_2)

通过使用以下公式将每个点转换为它的笛卡尔等效项:

x = alt * cos(lat) * sin(long)

y = alt * sin(lat) z = alt * cos(lat) * cos(long)

并且您将分别拥有p_1 =(x_1,y_1,z_1)和p_2 =(x_2,y_2,z_2)点。

最后使用欧几里得公式:

dist = sqrt((x_2-x_1)**2 + (y_2-y_1)**2 + (z_2-z_1)**2)
Go 2022/1/1 18:35:41 有330人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶