래스터에서 공간 그리드를 생성하는 방법은 무엇입니까?


9

다양한 주제별 맵의 마스터 그리드로 공간 그리드가 필요합니다. 모든 NA 픽셀을 버리는 래스터에서 공간 그리드를 어떻게 생성합니까?


6
여기에 스크랩을 버리십시오. 래스터를 만드는 작은 코드와 기대하는 것?
Spacedman

답변:


14

다음을 사용하여 래스터에서 셀의 비 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 픽셀이없는 것은 의미가 없습니다.


고마워 친구, 나는 또한 무엇을 원할지 모르겠다. 다양한 공간 점 데이터에서 동일한 래스터 맵 (해상도, coorinates, crs 등)을 생성하는 워크 플로우를 개발하려고합니다. 래스터 라이즈는 공간 포인트 산란으로 인해 옵션이 아닙니다. iwd 또는 이와 유사한 것을 사용해야합니다. 당신이 맞습니다. 그리드는 사각형입니다. 마스터 템플릿으로 필요한 것은 아마도 SpatialPointsDataFrame 일 것입니다. 그리드화할 수 있습니다. S.
Janbob Squarebrains

아마도 마스터 래스터 (ha!)를 원하고 동시에 모든 후속 그리드를 생성해야합니다.
레이더

2
동의했다. 일이 격자로 표시되면 래스터가 거의 항상 답입니다. SpatialPixels를 수행하는 방법을 알아 보려면 R에서 Applied Spatial Data Analysis의 약 20 페이지를 넘어가십시오. 사실, 오늘 박사 과정 학생에게 그 선택을 했어요. 그는 현명하게 선택했습니다!
Spacedman

20

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)

7

두 가지 요구 사항이 다른 것 같습니다.

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의 답변이 겹치는 것을 알고 있지만 아직 질문에서 당신이 무엇을 의미하는지 명확하지 않습니다.

  • (아마도, 명시 적 좌표 대신 인덱스를 저장하여 희소 한 셀을 저장할 수 있기 때문에 원래 "약간 불규칙한"셀 좌표를 원하는 경우 속성으로 저장할 수 있습니다. sp 또는 래스터는 불규칙 래스터를 전혀 다루지 않습니다. 단순한 직선 사례는 아니지만 대부분의 GIS 도구와 동일하지만 NetCDF와 같은 형식에서 일반적이며 R의 오래된 오래된 그래픽 :: 이미지 기능에 의해 처리되므로 불행합니다. )

소화 해야하는 매우 유익한 진술에 감사드립니다. 잘하면 내 문제를 해결하거나 더 명확한 질문을 게시 할 수 있기를 바랍니다.
Janbob Squarebrains

또한 @Spacedman : 포럼에서
Janbob Squarebrains
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.