Rでの方法は次のとおりです。
20x30セルのテストラスターを作成し、セルの1/10を1に設定してプロットします。
> require(raster)
> m = raster(nrow=20, ncol=30)
> m[] = as.numeric(runif(20*30)>.9)
> plot(m)
ファイル内の既存のラスター(geoTIFFなど)の場合、次の操作を実行できます。
> m = raster("mydata.tif")
1セルのxy座標の行列を取得し、それらの点をプロットすると、セルの中心があることがわかります。
> ones = xyFromCell(m,1:prod(dim(m)))[getValues(m)==1,]
> head(ones)
x y
[1,] -42 85.5
[2,] 102 85.5
[3,] 162 85.5
[4,] 42 76.5
[5,] -54 67.5
[6,] 30 67.5
> points(ones[,1],ones[,2])
ステップ1.単一セルのサイズのボックスで、0を中心とする1000(xo、yo)ペアを生成します。res
セルサイズを取得するためのの使用に注意してください。
> pts = data.frame(xo=runif(1000,-.5,.5)*res(m)[1], yo=runif(1000,-.5,.5)*res(m)[2])
ステップ2. 1から1セルの数までの1000個の値をランダムにサンプリングすることにより、上記の各ポイントがどのセルに入るかを調べます。
> pts$cell = sample(nrow(ones), 1000, replace=TRUE)
最後に、セルの中心をオフセットに追加して座標を計算します。チェックするプロット:
> pts$x = ones[pts$cell,1]+pts$xo
> pts$y = ones[pts$cell,2]+pts$yo
> plot(m)
> points(pts$x, pts$y)
これは10,000ポイントです(上記の1000を10000に置き換えます)pch="."
。
200x300のラスターで10,000ポイントを半分のポイントとしてラスターで瞬間的に処理します。ラスター内の何個に比例して時間とともに増加すると思います。
シェープファイルとして保存するには、SpatialPoints
オブジェクトに変換し、正しい座標系参照(ラスターと同じ)を指定して保存します。
> coordinates(pts)=~x+y
> proj4string(pts)=CRS("+init=epsg:4326") # WGS84 lat-long here
> shapefile(pts,"/tmp/pts.shp")
これにより、セル番号とオフセットを属性として含むシェープファイルが作成されます。