2017-02-20 14 views
0

2つの方法を使用してgeolifeデータセットの2点間の距離を計算しました。両方とも異なる値を示しています。第1方法2つのジオポイント間の距離計算R

、Iはharvesine距離の式を使用している以下

コードである:私はコード、検討高度下に使用している第2の方法について

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) 

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) 

出力ファイル名2 output for filename1

Filename2

両方の出力が異なります。

出力が添付されています。

私はどの方法を使用すべきかお考えください。私はAltitudeを考慮する必要があります。お勧めします

+0

ようこそ! [再現可能な例]を共有する方法は次のとおりです(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 –

+0

'distm()'演算はベクトル化されています。だからあなたはforloopsは必要ありません。あなたは[Geographic Information Systems](http://gis.stackexchange.com)フォーラムに投稿して、あなたのアプローチについての勧告を得たいかもしれません。 –

答えて

0

それはあなたが何をやっているのかによって異なります。 1つの地図上の地点から鳥の地点までの直線距離が問題になる場合は、標高の変化を含む地点が必要です。

基本的には、下の点から二番目の地図の地点に直角三角形の斜辺を与えてから、標高を使って数学的な数学を行い、ポイントからポイントへの直線経路を与えます。上昇を含む。

テクスチャレスボールに描かれているかのように、ポイントからポイントまでの海面のおおよその距離をお望みなら、他の方法を使用してください。

それぞれには長所と短所があります。あなたはあなたの使用に最適なものを決める必要があります。

関連する問題