我试图用经纬度和海拔来计算两点之间的距离。
为了得到我的距离,我使用了euklides公式:
D=√((Long1-Long2)²+(Lat1-Lat2)²+(Alt1-Alt2)²)
我的点是地理坐标,当然海拔是我离海的高度。 我只有lat和液化天然气,我用谷歌API高程来获取我的高度。
我正在开发一个计算我(滑雪板上)行驶距离的应用程序。我使用的每一个应用程序,都会得到包含高度的行驶距离。就像“Endomondo”或“Garmin”,我无法在二维空间中获得距离,因为真实距离将与我返回的距离不同。
哪个公式最适合计算我的距离?当然包括海拔高度。
我正在用Python和PostGis编写我的应用程序。
可以使用
geopy
包或Vincenty's公式直接粘贴坐标来计算单位坐标之间的距离,例如米。假设结果是d
米。然后行驶的总距离是sqrt(d**2 + h**2)
,其中h
是海拔高度的变化,单位为米。我使用了约翰·穆塔菲斯提供的解决方案,但没有得到正确的答案。公式需要一些修正。您将在http://electron9.phys.utk.edu/vectors/3dcoordinates.htm处获得从极坐标到笛卡尔坐标(x,y,z)的转换。 使用上述公式将球坐标(极坐标)转换为笛卡尔坐标并计算欧氏距离。
我在控制台应用程序中使用了下面的c。 考虑跟踪虚拟lat long
编辑2019:由于这个答案,我编写了一个问答风格示例来回答类似的问题(包括这个示例):How to calculate 3D distance (including altitude) between two points in GeoDjango。
排序:
我们需要使用Haversine formula或Vicenty formula计算两点之间的2Dgreat-circle distance,然后我们可以将其与两点之间的高度差(delta)结合起来计算它们之间的Euclidean distance,如下所示:
该解决方案假设高度以米为单位,因此也将
great_circle
的结果转换为米。通过将坐标从Polar (long, lat, alt)转换为Cartesian (x, y, z):polar_point_1 = (long_1, lat_1, alt_1)
以及
{
使用以下公式将每个点转换为笛卡尔等价点:
你将分别有
p_1 = (x_1, y_1, z_1)
和p_2 = (x_2, y_2, z_2)
点。最后使用欧几里德公式:
相关问题 更多 >
编程相关推荐