2011-12-20 19 views
1

私は、50以上の異なる多角形(50以上の異なる領域を表す)とその領域の1つに存在すると思われる10,000以上のデータ点を持つ形状ファイルを持っています。事実、10,000+のポイントはすでに存在するはずの領域でコード化されているので、地理空間距離のこのコード化された領域からどれくらい離れているのか把握したいと思います。 spライブラリからowinオブジェクトへのシェープファイルを変換しdistfunを使用することを含むポリゴンから地理距離を計算する方法は?

私の現在のアプローチ(以下コード)は、私の緯度、長いユークリッド空間での距離を取得します。しかし、私は地理空間距離(最終的にkmに変換する)を得たいと思っています。どこに行くべきですか?

#basically cribbed from http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf (page 9) 
shp <- readShapeSpatial("myShapeFile.shp", proj4string=CRS("+proj=longlat +datum=WGS84")) 
regions <- lapply(slot(shp, "polygons"), function(x) SpatialPolygons(list(x))) 
windows <- lapply(regions, as.owin) 

# need to convert this to geo distance 
distance_from_region <- function(regionData, regionName) { 
    w <- windows[[regionName]] 
    regionData$dists <- distfun(w)(regionData$lat, regionData$long) 
    regionData 
} 
+0

spでspDistsN1を試してください。longlat = TRUE – mdsumner

+0

@mdsummer:spDistsN1は2点間の距離を計算します。私はポリゴンからポイントまでの距離が必要です。変換を行う方法は私にはすぐには分かりません... – prabhasp

+0

ポリゴンの座標からですか?重心または選択された境界点(最も近いもの?)、またはすべての境界点?あなたの質問はこれではっきりしていません。 spDists/spDistsN1は、マップ投影を選択せず​​にポイントのセット間で必要な大きな円の距離を提供します(ちょうど2ポイント間ではありません)ので、最終的に正しい座標または要約が抽出されたら使用します。 ? – mdsumner

答えて

3

私はユークリッドにデータを投影したい(またはユークリッド近く)座標系 - あなたは地球の大きな塊にまたがっている場合を除き、これは実現可能です。 maptoolsまたはspまたはrgdalのspTransformを使用してください(どちらを忘れるか)、データの近くのUTMゾーンに変換してください。

あなたもパッケージrgeosとgDistance機能をよりよくするかもしれない:

gDistance by default returns the cartesian minimum distance 
between the two geometries in the units of the current projection. 

あなたのデータは...そして、地球の大きな塊の上にトリッキーであれば... 42 ...

Barry

関連する問題