我通过使用2种方法计算了geolife数据集上2个点之间的距离,并且两者都给出了不同的值。
对于第一种方法,我使用了harvesine距离公式
下面是代码:
for(i in 905:921){
geodistt[i] <- distm (c(lon1=filename$Longitude[i-1], lat1=filename$Latitude[i-1]), c(lon2=filename$Longitude[i], lat2=filename$Latitude[i]), fun = distHaversine)
}
filename2 <- data.frame(filename,tdiff,geodist)
对于第二种方法,我使用了以下代码并考虑了Altitude,
for(i in 905:921){
Vincenty <- distance(lat1=filename$Latitude[i-1],lon1=filename$Longitude[i-1],lat2=filename$Latitude[i],lon2=filename$Longitude[i])
DirectDistance <- as.numeric(Vincenty[5]) # the fifth element of the output frame is the distance between the points.
#To be more accurate, we also take into account difference in altitude between the points
AltitudeChange <- abs(filename$Altitude[i]-filename$Altitude[i-1])
if(AltitudeChange!=0)
geodistt[i] <- sqrt(DirectDistance^2+AltitudeChange^2)
else
geodistt[i] <- DirectDistance
}
filename1 <- data.frame(filename,tdiff,geodistt)
print(filename1)
filename2 output for filename1
的输出两个输出都不同。
附加了输出。
请问您应该使用哪种方法。我需要考虑海拔高度吗?请建议
答案 0 :(得分:0)
这取决于你为什么要做你正在做的事情。如果从一个地图点上的位置到另一个地图点上的位置的直线距离很重要,那么您需要包含高程变化的那个。
它基本上是给你从第二个地图上的较低点到点的直角三角形的斜边,然后使用高度来做一些花哨的数学并给你一个点到点的直线路径,包括上升。
如果您感兴趣的是从点到点的近似海平面距离,就好像是在无纹理球上绘制的那样,请使用另一种方法。
每个人都有自己的优点和缺点。您需要确定哪种方法最适合您的使用。