Gerando shapefile de grade em R?

8

Eu tenho o seguinte shapefile de uma grade de latitude / longitude de 10x10 graus que criei no QGIS. Eu posso lê-lo no R usando o pacote rgdal.

Grid<-readOGR(".","GridShapeFile")

Possui os seguintes atributos e estrutura.

summary(Grid)

Object of class SpatialPolygonsDataFrame
Coordinates:
   min max
x -180 190
y -100  90
Is projected: FALSE 
proj4string :
[+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0]
Data attributes:
       ID             XMIN           XMAX           YMIN           YMAX    
 Min.   :  0.0   Min.   :-180   Min.   :-170   Min.   :-100   Min.   :-90  
 1st Qu.:175.5   1st Qu.: -90   1st Qu.: -80   1st Qu.: -60   1st Qu.:-50  
 Median :351.0   Median :   0   Median :  10   Median : -10   Median :  0  
 Mean   :351.0   Mean   :   0   Mean   :  10   Mean   : -10   Mean   :  0  
 3rd Qu.:526.5   3rd Qu.:  90   3rd Qu.: 100   3rd Qu.:  40   3rd Qu.: 50  
 Max.   :702.0   Max.   : 180   Max.   : 190   Max.   :  80   Max.   : 90 

# An example row of the data
Grid[50,]
class       : SpatialPolygonsDataFrame 
features    : 1 
extent      : -60, -50, 70, 80  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84+towgs84=0,0,0 
variables   : 5
names       : ID, XMIN, XMAX, YMIN, YMAX 
min values  : 49,  -60,  -50,   70,   80 
max values  : 49,  -60,  -50,   70,   80 

Eu gostaria de aprender como criar esse mesmo arquivo de grade / formato inteiramente dentro do R, e não no QGIS, bem como grades de outros tamanhos (1x1,5x5, etc.). O objetivo final é usar over () no pacote sp para sobrepor essa grade a outro arquivo de polígonos e contar o número de grades interceptadas por cada polígono. Eu já sei como fazer este próximo passo (eu acho), só quero saber como gerar a camada de grade em R.

Andy
fonte

Respostas:

6

Veja a função raster no pacote raster. Permite criar uma varredura com uma extensão especificada, número de linhas / colunas e resolução.

Aqui, usarei as características do seu resumo de dados para criar uma varredura de 100x100 na extensão especificada. Estou passando um objeto de extensão para definir os limites x e y. Você também pode usar os argumentos específicos (xmn, xmx, ymn, ymx) na função raster.

library(raster) 
library(sp) 

r <- raster(extent(matrix( c(-180, -100, 190,  90), nrow=2)), nrow=100, ncol=100, 
            crs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")            
  r[] <- 1:ncell(r)
  summary(r)
  print(r)
  plot(r)

É simples coagir objetos raster a um objeto sp em grade usando;

sp.r <- as(r, "SpatialPixelsDataFrame")
  class(sp.r)   
  spplot(sp.r, "layer") 
Jeffrey Evans
fonte
1
Funciona. Para alterar o tamanho da célula, altere os argumentos nrow e ncol. Por exemplo, para incrementos de 10 graus, altere nrow = 100, ncol = 100 para nrow = length (seq (-90,90,10)), ncol = length (seq (-180,180,10))
Andy
Após criar a varredura, você também pode usar algo como: "res (r) <- 3.7" ou o argumento "resolução" na função de varredura diretamente, mas isso ignoraria o número especificado de linhas e colunas.
21415 Jeffrey Evans
@ JeffreyEvans Acho que estou atrás da mesma coisa, mas uma versão retangular dessas células. Gostaria de uma grade de células de 20 x 10 graus de 180, -180 a 90, -90. No entanto, não tenho certeza de quais partes desta resposta editar para obter esse resultado (novo para esses programas) e, bem, estou confuso com todas as cores.
Amroco