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.

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") 

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.