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])
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")
셀 번호와 오프셋을 속성으로 포함하는 shapefile을 만듭니다.