1

私はRプログラミングに不慣れですが、長距離旅客機が飛ぶ大円距離を計算しておりrdist.earth()、Fieldsパッケージ、パッケージ、およびその他のコマンドsoDistsN1()から試しました。spさらに、検索でGoogleをかなり使い果たしました。Matlabでこれを行うのは簡単ですが、Rで方法を見つけることができないようです。

問題は、データの解像度(計算されたウェイポイントの量)を上げると、合計距離が途方に暮れることです。ウェイポイント間の総距離をどうやってまとめたのかと思います。何か案は?

私が試したことの例:

data <- read.csv("FDM_test_Flight.csv")
library(fields)
fix <- cbind(data$LON, data$LAT)
fix_2 <- window(fix, deltat=500) # every 500th position I have 25,540 position readings                      
gcd <- rdist.earth(fix_2, miles=FALSE, R=6371)
sum(gcd)
4

3 に答える 3

4

rdist.earthすべてのペア間の距離を計算するため、行列全体を合計することで、連続する観測間の距離の合計を取得するだけではありません。

library(fields)
lonlat <- matrix(-92:-80,c(1:7,6:1))
out<- rdist.earth ( ozone2$lon.lat)
sum(out[row(out)==col(out)+1])  ## add first off-diagonal

しかし、@ SimonO101のソリューションはより効率的です。内臓を見ると、rdist.earthとにかくそれが多かれ少なかれ行っていることがわかります。

于 2013-03-22T14:38:22.753 に答える
3

このような大圏距離の式を使用して、自分で計算できます...

r <- 6371 # radius of the Earth
data <- read.csv("FDM_test_Flight.csv")

# Convert to radians and make two vectors of point A and point B
x <- length(data$LON)
lon <- data$LON[1:(x-1)] * pi/180
lat <- data$LAT[1:(x-1)] * pi/180
lon2 <- data$LON[2:x] * pi/180
lat2 <- data$LAT[2:x] * pi/180

#Calculate distances
dist <- sum(acos(sin( lat ) * sin( lat2 ) + cos( lat ) * cos( lat2 ) * cos( lon2 -lon ) ) * r )

Kmで与えられるのでr、あなたの大円距離はKmになります。

于 2013-03-22T12:25:41.950 に答える
0

gcdマトリックスから対角外のマトリックス値(サイズ1)のみを合計すると、必要なものが得られるはずです。Ben Bolkerが上で述べたように、rdis.earth()は「すべてのペアリング」間の距離を計算します。仕組み:たとえば、1、2、3の3つの場所がある場合、dist(1,2)+ dist(2,3)が必要です。任意のnポイントに対して同じパターンが保持されます。したがって、これらの情報はすでにrdis.earthにあります。必要なものを抽出して合計するだけです。ここで-(forループでごめんなさい)

sum(gcd) #but this is too large, it's summing all the pairings!


limit <- dim(gcd)[1] - 1

for(i in 1 :limit ){
  sum_off_dia[i]<- gcd_data[i,i+1]
}
sum(sum_off_dia)
于 2013-03-22T17:01:22.883 に答える