序幕:如何GeoDjango內置兩個點之間計算3D距離(包括高度)
這是SO經常產生的問題:
- 3d distance calculations with GeoDjango
- Calculating distance between two points using latitude longitude and altitude (elevation)
- Distance between two 3D point in geodjango (postgis)
我想編寫SO文檔的示例,但geodjango
章節從未起飛,並且自從文檔在2017年8月8日關閉後,我將按照this widely upvoted and discussed meta answer的建議編寫我的示例作爲自我回復的帖子。
當然,我很樂意看到任何不同的方法!
問:
假設模型:
class MyModel(models.Model):
name = models.CharField()
coordinates = models.PointField()
我在哪裏存儲在coordinate
變量點作爲lan, lng, alt
點:
MyModel.objects.create(
name='point_name',
coordinates='SRID=3857;POINT Z (100.00 10.00 150)')
我想計算三維距離即可補間兩個這樣的點:
p1 = MyModel.objects.get(name='point_1').coordinates
p2 = MyModel.objects.get(name='point_2').coordinates
d = Distance(m=p1.distance(p2))
現在d=X
米。
如果我僅改變有問題的點中的一個的高度:
例如:
p1.coordinates = 'SRID=3857;POINT Z (100.00 10.00 200)'
從150先前,計算:
d = Distance(m=p1.distance(p2))
返回d=X
再次,像海拔被忽略。
如何計算我的積分之間的3D距離?