다양한 주제별 맵의 마스터 그리드로 공간 그리드가 필요합니다. 모든 NA 픽셀을 버리는 래스터에서 공간 그리드를 어떻게 생성합니까?
다양한 주제별 맵의 마스터 그리드로 공간 그리드가 필요합니다. 모든 NA 픽셀을 버리는 래스터에서 공간 그리드를 어떻게 생성합니까?
답변:
다음을 사용하여 래스터에서 셀의 비 NA 좌표를 모두 얻을 수 있습니다.
r = raster(matrix(runif(20),5,4))
r[r>.5]=NA
coordinates(r)[!is.na(values(r)),]
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
그것들은 NA가 아닌 세포들입니다. 그런 다음 SpatialPixels에이를 공급할 수 있습니다.
SpatialPixels(SpatialPoints(coordinates(r)[!is.na(values(r)),]))
Object of class SpatialPixels
Grid topology:
cellcentre.offset cellsize cells.dim
x 0.125 0.25 4
y 0.100 0.20 4
SpatialPoints:
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
Coordinate Reference System (CRS) arguments: NA
그리드의 어떤 것도 개인적으로 래스터로 사용합니다.
나는 여전히 당신이 원하는 것이 무엇인지 확실하지 않습니다. SpatialGrid
객체는 완전한 직사각형 격자를 정의하므로 NA 픽셀이없는 것은 의미가 없습니다.
RasterLayer를 Spatial * 객체 (그리드 또는 픽셀)로 변환하려면 강제 변환 기능을 "as"로 사용할 수 있습니다
library(raster)
r <- raster(matrix(runif(20),5,4))
r[r>.5] <- NA
g <- as(r, 'SpatialGridDataFrame')
p <- as(r, 'SpatialPixels')
plot(r)
points(p)
두 가지 요구 사항이 다른 것 같습니다.
1) 안정적인 래스터 그리드 템플릿.
2) 누락 된 셀을 명시 적으로 저장하지 않는 희소 그리드.
sp :: GridTopology는 첫 번째를 제공합니다. 왼쪽 아래 셀 좌표 (cellcentre.offset), 셀 간격 (cellsize) 및 그리드의 크기 (cells.dim)를 기반으로 한 그리드에 대한 설명 일뿐입니다.
sp :: SpatialPixelsDataFrame 클래스를 사용하면 스파 스 그리드를 저장할 수 있지만 자체적으로 "템플릿"보다 훨씬 더 많이 저장됩니다. 또한 모든 좌표를 명시 적으로 저장합니다. 이것은 두 가지 작업을 수행하기 때문입니다. 하나는 그리드에서 가져오고 약간 불규칙 할 수있는 원래 좌표를 보존 할 수 있기 때문입니다. 두 번째는 유효한 값을 가진 셀만 저장할 수 있습니다. (이 두 목표가 분리되어 있었음이 틀림 없습니다. 그러나 그것은 또 다른 이야기입니다).
래스터 패키지에는 GridTopology와 명시 적으로 유사하다고 생각하지 않지만 "자신의 롤"을 위해 구성 요소를 유지할 수 있습니다.
library(raster)
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
## "cellsize"
res(r1)
## [1] 0.4761905 1.6666667
## extreme cell corners (just a different convention to sp's cellcentre)
extent(r1)
class : Extent
xmin : 0
xmax : 10
ymin : -90
ymax : 90
## we can also use bbox to get the same thing
bbox(r1)
min max
s1 0 10
s2 -90 90
## grid dimensions (including number of attributes/layers as 3rd "dim")
dim(r1)
## [1] 108 21 1
이것들을 모두 연결하면 래스터에서 sp로 갈 수 있습니다.
GridTopology(bbox(r1)[,1] + res(r1)/2, res(r1), dim(r1)[2:1])
(크기를 어떻게 바꿔야하는지 유의하십시오). 또 다른 간단한 방법은 SpatialGrid로 강제 변환하고 sp의 getGridTopology를 사용하는 것입니다. 그러나 좌표가 길을 따라 생성되기 때문에 비용이 많이 듭니다.
getGridTopology(as(r1, "SpatialGrid"))
래스터 "토폴로지"의 세 부분은 모두 필요하지는 않습니다. 일부는 중복 되기는하지만, 위에서 만든 래스터가 "빈"인 경우를 제외하고는 모두 하나의 객체로 캡처 할 수있는 방법이 없습니다. GridTopology가 sp. "빈"상태에 대한 세부 사항은 확실하지 않지만 "데이터"슬롯을 명시 적으로 저장하지 않으며 값이있는 것보다 작습니다. 래스터 패키지는 일반적으로 메모리 사용을 최소로 유지하기 위해 최선을 다하므로 실제로 "스파 스"에 대해 걱정할 필요가 없습니다.
그것은 조금 더 설명하는 데 도움이 될 수 있습니다 .Spacedman의 답변이 겹치는 것을 알고 있지만 아직 질문에서 당신이 무엇을 의미하는지 명확하지 않습니다.