0

私はデータフレームを持っています:

data <- data.frame(long = c( 50.75  80.75   0.75  65.75  70.75  75.75 100.75 105.75 110.75         
                  -4.25  65.75,100.55), lat=c(13.3 13.8 13.8 13.8 13.8 13.8 13.8 13.8 13.8 
                   13.8 13.8,14.8), XCh4 c(1739.9 1737.5 1740.5 1715.7 1728.5 1745.0 1724.6
                   1734.2 1733.4 1713.6 1716.3 1725.3))

そして、私はステーション値を持っています

lon<- 100.60

lat <-13.4

では、ステーションに最も近い緯度と経度を抽出し、z 値を取得するにはどうすればよいでしょうか。
私が試してみました:

lat.match   <- which(abs(data[[3]]$lat - 13.04) == min(abs(data[[3]]$lat - 14.04)))[1]

lon.match   <- which(abs(data$long - 100.60)== min(abs(data$long- 100.60)))[1]

data[data$long[lon.match] & data$lat[lat.match],]

緯度= 13.8と経度= 100.75であると想定される緯度経度の正確なペアを取得できません。

誰かがどうすれば答えを得ることができるか教えてもらえますか?

4

3 に答える 3

2

気をつけて!緯度と経度の座標があります。座標が平面であると仮定する方法を使用しないでください。つまり、測定単位は垂直方向と水平方向で同じですが、地理座標には当てはまりません。例のデータでは違いはありませんが、より大きなスケールで大量のデータがある場合は違いがあるかもしれません。代わりに、大圏距離 (またはこれの導関数) を計算するように注意する必要があります。代わりにこれを試してください:

r <- 6371 # radius of the Earth
#Coordinates need to be in radians
data$longR <- data$long * pi/180
data$latR <- data$lat * pi/180
lon <- 100.60 * pi/180
lat <- 13.4 * pi/180
data$dist <- acos(sin( lat ) * sin( data$latR ) + cos( lat ) * cos( data$latR) * cos( data$longR -lon ) ) * r
data[ which.min( data$dist ) , ]
    long  lat   XCh4    longR      latR    dist
7 100.75 13.8 1724.6 1.758419 0.2408554 47.3403

距離メトリックは、地球の半径 (この場合は 47.3 km) と同じスケールです。さまざまな距離計算方法に関するすばらしいブログ投稿がここにあります

于 2013-03-08T09:11:02.850 に答える
2

緯度の縮小と、コードが「距離」ではなく「度の二乗」を計算していたという事実によって、経度の差が減少することを認める編集:

data$degr.sqrd <- ( (lon-data$long)*cos(90*data$lat ) )^2 + (lat-data$lat)^2
 which.min(data$degr.sqrd)
#[1] 7
data[ which.min(data$degr.sqrd), "XCh4"]
#[1] 1724.6

data[ which.min(data$degr.sqrd), ]
#    long  lat   XCh4 degr.sqrd
#7 100.75 13.8 1724.6 0.1651696
于 2013-03-08T08:36:47.830 に答える
0

dist、を使用した別のソリューション

mat <- dist(cbind(c(data$lat,lat),c(data$long,lon)))
n <- attr(mat,'Size')
i <- 1:n
j <- n
v <- mat[n*(i-1) - i*(i-1)/2 + j-i]
data[which.min(v),]
long  lat   XCh4   dist
7 100.75 13.8 1724.6 0.1825

ここでの利点は、たとえば次のように距離を変更できることです。

mat <- dist(cbind(c(data$lat,lat),c(data$long,lon)),meath='minkowski')

data[which.min(v),]
    long  lat   XCh4   dist
7 100.75 13.8 1724.6 0.1825  ## not really representative , we get the same result:)
于 2013-03-08T09:00:13.467 に答える