Générer un fichier de formes de grille dans R?

8

J'ai le fichier de formes suivant d'une grille de latitude / longitude de 10 x 10 degrés que j'ai créée dans QGIS. Je peux le lire dans R en utilisant le paquetage rgdal.

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

Il a les attributs et la structure suivants.

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 

Je voudrais apprendre à créer cette même grille / fichier de formes entièrement dans R, plutôt que dans QGIS, ainsi que des grilles d'autres tailles (1x1,5x5, etc.). Le but ultime est d'utiliser over () dans le package sp pour superposer cette grille sur un autre fichier de polygones et compter le nombre de grilles coupées par chaque polygone. Je sais déjà comment faire cette prochaine étape (je pense), je veux juste savoir comment générer la couche de grille en R.

Andy
la source

Réponses:

6

Jetez un œil à la fonction raster dans le package raster. Il vous permettra de créer un raster avec une étendue, un nombre de lignes / colonnes et une résolution spécifiés.

Ici, j'utiliserai les caractéristiques de votre résumé de données pour créer un raster 100x100 dans la mesure spécifiée. Je passe un objet d'extension pour définir les limites x et y. Vous pouvez également utiliser les arguments spécifiques (xmn, xmx, ymn, ymx) dans la fonction 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)

Il est simple de contraindre des objets raster à un objet sp maillé en utilisant;

sp.r <- as(r, "SpatialPixelsDataFrame")
  class(sp.r)   
  spplot(sp.r, "layer") 
Jeffrey Evans
la source
1
Ça marche. Pour changer la taille des cellules, modifiez les arguments nrow et ncol. Par exemple, pour des incréments de 10 degrés, remplacez nrow = 100, ncol = 100 par nrow = length (seq (-90,90,10)), ncol = length (seq (-180,180,10))
Andy
Après avoir créé le raster, vous pouvez également utiliser quelque chose comme: "res (r) <- 3.7" ou l'argument "résolution" dans la fonction raster directement, mais cela ignorerait le nombre spécifié de lignes et de colonnes.
Jeffrey Evans
@JeffreyEvans Je pense que je suis après la même chose, mais une version rectangulaire de ces cellules. Je voudrais une grille de cellules de 20 x 10 degrés de 180, -180 à 90, -90. Cependant, je ne sais pas quelles parties de cette réponse modifier pour obtenir ce résultat (nouveau dans ces programmes) et, bien, je suis confus par toutes les couleurs.
Amroco