2016-07-07 7 views
2

ここでRの空間解析には新しくありません。私はHEREからダウンロードしたアメリカのシェイプファイルを持っています。私はまた、隣接する米国内にある緯度/経度(50万ドル)のセットを持っています。R - ラスタライズされたUSAマップ上の点の集合から最も遠い点を見つけよう

私は「最も離れた場所」を見つけたいと思っています。これは、連続した米国内の地点から最も遠い場所です。

私はrgdal、raster、spパッケージを使用しています。再現可能なサンプルを10ポイントでランダムに表示した例を次に示します。

# Set wd to the folder tl_2010_us_state_10 
usa <- readOGR(dsn = ".", layer = "tl_2010_us_state10") 

# Sample 10 points in USA 
sample <- spsample(usa, 10, type = "random") 

# Set extent for contiguous united states 
ext <- extent(-124.848974, -66.885444, 24.396308, 49.384358) 

# Rasterize USA 
r <- raster(ext, nrow = 500, ncol = 500) 
rr <- rasterize(usa, r) 

# Find distance from sample points to cells of USA raster 
D <- distanceFromPoints(object = rr, xy = sample) 

# Plot distances and points 
plot(D) 
points(sample) 

最後の2行のコードの後に​​、このプロットが表示されます。

plot distances from points

しかし、私はそれが米国のラスタライズされたマップ上になりたいです。そして、私はバウンディングボックスのすべてのセルではなく、連続したUSAにあるセルからの距離だけを考慮したいと思います。これをどうやって行うのですか?

私が使用しているシェイプファイルに関する他のヒントもありがとうございます。これは最高のものですか?私の実際のデータセットは緯度/経度であるので、正しい投影法を使用することに心配する必要がありますか? distanceFromPointsは、そのような大きなデータセットを効率的に処理できますか、それとも優れた機能がありますか?

答えて

1

ラスタDを隣接するUSAに限定するために、rrの要素にはNAの値が割り当てられています(バウンディングボックス内のラスタセルはusaポリゴンの外側にあります)。これらのDの同じ要素にNAの値を割り当てます。

D[which(is.na(rr[]))] <- NA 

plot(D) 
lines(usa) 

'proj4string(usa)'を使用すると、usaシェイプファイルの投影情報を見つけることができます。興味の座標が異なる投影に基づいている場合は、次のように米国のシェープファイル投影を一致させるためにそれらを変換することができます

my_coords_xform <- spTransform(my_coords, CRS(proj4string(usa))) 
distanceFromPointsの相対的効率に関する

わからないが、それだけで実行するために〜1秒かかりました私のコンピュータ上であなたの例を10ポイントで使用しています。

+0

distanceFromPointsからの距離がユークリッド距離か大きい円距離かどうかは、{raster}文書ではわかりません。私はそれが後者であることを前提としています。投影されていないlong/lat座標の場合、メートル単位になると言いますが、それだけです。あなたは知っていますか? – hoggue

+0

{raster}ソースを調べなければならなかった... distFromPointsは/raster/src/distance.cにある 'distanceToNearestPoint'関数を呼び出しています。ラスタ/ポイントが投影されていない場合(latlong)、 'distanceToNearestPoint'はメートルの地球の半径に基づいて大円距離を返す' distCos'関数を呼び出します(ソースは/raster/src/dist_util.cにあります)。 – pbee

0

私はあなたがmask機能を探していたと思います。

library(raster) 
usa <- getData('GADM', country='USA', level=1) 

# exclude Alaska and Hawaii 
usa <- usa[!usa$NAME_1 %in% c("Alaska" , "Hawaii"), ] 

# get the extent and create raster with preferred resolution 
r <- raster(floor(extent(usa)), res=1) 
# rasterize polygons 
rr <- rasterize(usa, r) 

set.seed(89) 
sample <- spsample(usa, 10, type = "random") 

# Find distance from sample points to cells of USA raster 
D <- distanceFromPoints(object = rr, xy = sample) 
# remove areas outside of polygons 
Dm <- mask(D, rr) 
# an alternative would be mask(D, usa) 

# cell with highest value 
mxd <- which.max(Dm) 

# coordinates of that cell 
pt <- xyFromCell(r, mxd) 

plot(Dm) 
points(pt) 

ロング/ラットデータを使用する場合でも、距離は良好でなければなりません。しかし、rasterFromPointsは、ブルートフォースアルゴリズムを使用するので、実際には大きなデータセットでは少し遅くなる可能性があります。

関連する問題