2016-09-01 7 views
2

私は緯度/経度座標のデータフレームとポリゴン(海岸線を表す)を持っています。私は各点と最も近い海岸線の特徴の間の距離を見出そうとしています。元の緯度/経度値と新しい距離列の列を含む出力データフレームにしたいと思います。点のベクトルとポリゴンの間の最も近い距離を求めるR

私はgDistance関数をオンラインで同様の質問に回答した後に使用しようとしましたが、私はいくつかの手順が不足していると思っています。現在、私は単一の距離値で終わるだけです。私はRにはかなり新しいので、誰でも助けてくれるような助けを本当に感謝しています。

ありがとうございます!

#Load data 
    Locs = structure(list(id = 1:5, Lat = c(29.59679167, 29.43586667, 29.37642222,29.52786111, 30.10603611), Long = c(-81.02547778, -80.92573889, 
-80.97714167, -81.08721667, -80.94368611)), .Names = c("id","Lat", "Long"), class = "data.frame", row.names = c(NA, -5L)) 

#Extract lat/long coordinates 
    xy = Locs[,c("Lat","Long")] 
#Create SpatialPointsDataFrame from xy data and change projection to metres 
    spdf = SpatialPointsDataFrame(coords=xy, data=xy, proj4string = CRS("+proj=aea +zone=17 ellps=WGS84")) 

#Read in shapefile as a spatialdataframe object 
    coast = readOGR(dsn="land data", layer="coast")  
#Transform to AEA (m) projection to match projection of points 
    land_poly = spTransform(coast, CRS("+proj=aea +zone=17 ellps=WGS84")) 

#OR load map from map package (but unfortunately map objects do not work in gDistance) 
    library(maps) 
    library(mapdata) 
    coast2 = map('usa', col = "grey90", fill=TRUE) 

#Calculate distance between each point and the nearest land feature 
    for(i in 1:dim(spdf)[1]){ 
    g = gDistance(spdf[i,],land_poly) 
    } 

EDIT:(ループのステップのために)以下AEFのコード変化を使用して、しかし私は、出力距離が(下記参照)正しくない、各行のgDistance値を取得することができています。 arcGISによると、500km以上ではなく4〜37kmの間でなければなりません。私がここで間違っていることに関する考えは?私の土地ポリゴンとポイントは同じ投影にあります。

gDistance出力

id  Lat  Long dist_gDist 
1 1 29.59679 -81.02548 516299.0 
2 2 29.43587 -80.92574 516298.8 
3 3 29.37642 -80.97714 516298.9 
4 4 29.52786 -81.08722 516299.0 
5 5 30.10604 -80.94369 516299.0 

(GISで計算)、正しい距離

id  Lat  Long dist_arc 
1 1 29.59679 -81.02548 13.630 
2 2 29.43587 -80.92574 15.039 
3 3 29.37642 -80.97714 8.111 
4 4 29.52786 -81.08722 4.784 
5 5 30.10604 -80.94369 36.855 
+0

ん[この](http://stackoverflow.com/questions/16448402/distance-of-point-feature-to-nearest-polygon-in-r)または[this](http://stackoverflow.com/questions/15294343/calculating-the-distance-between-polygon-and-point-in-r)助け、またはあなたはすでにこれらを見ましたか? – eipi10

+0

@ eipi10 - リンクありがとう。はい、私はそれらを読んだが、彼らは私が問題を解決するのを助けなかった。ありがとう。 –

答えて

1

私はあなたのfor - ループの反復ごとにgを上書きするので、あなたが唯一の1つの距離値を取得すると思います。私はしかし、私はあなたの問題を適切なデータなしで再現できないため、これが唯一の問題であるかどうかはわかりません。 これに最後のループを変更してみてください:

g = rep(NA, dim(spdf)[1]) 
for(i in 1:dim(spdf)[1]){ 
    g[i] = gDistance(spdf[i,],land_poly) 
} 
+0

@ AEF:助けてくれてありがとう! forループは機能しているように見えますが、まだ出力値が非常に奇妙なものになります(つまり、値が〜15kmになり、代わりに> 500kmになる)。ポイントデータを含めるように質問を更新しましたが、ファイルをstackoverflowにアップロードできないため、シェイプファイルを提供できません。私は再現性を可能にするためにマップパッケージからマップを使用しようとしましたが、マップオブジェクトはgDistanceでは機能しません。それ以上の助けをいただければ幸いです。再度、感謝します! –

関連する問題