Berikut cara di R:
Buat raster pengujian, 20x30 sel, buat 1/10 dari sel-sel diatur ke 1, plot:
> require(raster)
> m = raster(nrow=20, ncol=30)
> m[] = as.numeric(runif(20*30)>.9)
> plot(m)
Untuk raster yang ada dalam file, misalnya geoTIFF, Anda bisa melakukan:
> m = raster("mydata.tif")
Sekarang dapatkan matriks koordinat xy dari 1 sel, plot titik-titik itu, dan kami melihat kami memiliki pusat sel:
> 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])
Langkah 1. Hasilkan 1000 (xo, yo) pasangan yang berpusat pada 0 dalam kotak ukuran sel tunggal. Perhatikan penggunaan res
untuk mendapatkan ukuran sel:
> pts = data.frame(xo=runif(1000,-.5,.5)*res(m)[1], yo=runif(1000,-.5,.5)*res(m)[2])
Langkah 2. Tentukan sel mana dari masing-masing poin di atas yang masuk secara acak dengan mengambil 1000 nilai dari 1 hingga jumlah 1 sel:
> pts$cell = sample(nrow(ones), 1000, replace=TRUE)
Akhirnya hitung koordinat dengan menambahkan pusat sel ke offset. Plot untuk memeriksa:
> pts$x = ones[pts$cell,1]+pts$xo
> pts$y = ones[pts$cell,2]+pts$yo
> plot(m)
> points(pts$x, pts$y)
Berikut 10.000 poin (ganti 1000 di atas dengan 10.000), diplot dengan pch="."
:
Cukup instan untuk 10.000 poin pada raster 200x300 dengan setengah poin sebagai raster. Akan bertambah waktu secara linear dengan berapa banyak yang ada di raster, saya pikir.
Untuk menyimpan sebagai shapefile, konversikan ke SpatialPoints
objek, berikan referensi sistem koordinat yang tepat (sama seperti raster Anda) dan simpan:
> coordinates(pts)=~x+y
> proj4string(pts)=CRS("+init=epsg:4326") # WGS84 lat-long here
> shapefile(pts,"/tmp/pts.shp")
Itu akan membuat shapefile yang menyertakan nomor sel dan offset sebagai atribut.