İşte R'de bir yol:
Bir test tarama yapın, 20x30 hücre, 1 / 10'a ayarlanmış hücrelerin 1 / 10'unu yapın:
> require(raster)
> m = raster(nrow=20, ncol=30)
> m[] = as.numeric(runif(20*30)>.9)
> plot(m)
Bir dosyadaki mevcut bir tarama, örneğin bir geoTIFF için şunları yapabilirsiniz:
> m = raster("mydata.tif")
Şimdi 1 hücrenin xy koordinatlarının bir matrisini alın, bu noktaları çizin ve hücre merkezlerimiz olduğunu görüyoruz:
> 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])
Adım 1. Tek bir hücre boyutunda bir kutuda 0 üzerinde merkezlenmiş 1000 (xo, yo) çiftleri oluşturun. res
Hücre boyutunu elde etmek için kullanımını not edin:
> pts = data.frame(xo=runif(1000,-.5,.5)*res(m)[1], yo=runif(1000,-.5,.5)*res(m)[2])
Adım 2. Yukarıdaki değerlerin her birinin hangi hücreye gireceğini 1000'den 1'e 1 hücre sayısına rastgele örnekleyerek hesaplayın:
> pts$cell = sample(nrow(ones), 1000, replace=TRUE)
Son olarak, ofsete hücre merkezini ekleyerek koordinatı hesaplayın. Kontrol edilecek arazi:
> pts$x = ones[pts$cell,1]+pts$xo
> pts$y = ones[pts$cell,2]+pts$yo
> plot(m)
> points(pts$x, pts$y)
İşte 10.000 puan (yukarıdaki 1000'i 10000 ile değiştirin) pch="."
:
200x300 rasterde 10.000 puan için yarı puan olarak yarı anlık . Rasterde kaç tane ile zaman içinde doğrusal olarak artacağını düşünüyorum.
Şekil dosyası olarak kaydetmek için, bir SpatialPoints
nesneye dönüştürün , ona doğru koordinat sistemi referansını (rasterinizle aynı) verin ve kaydedin:
> coordinates(pts)=~x+y
> proj4string(pts)=CRS("+init=epsg:4326") # WGS84 lat-long here
> shapefile(pts,"/tmp/pts.shp")
Bu, hücre numarasını ve ofsetleri öznitelik olarak içeren bir şekil dosyası oluşturur.