Menghasilkan shapefile grid di R?

8

Saya memiliki shapefile berikut dari garis lintang / bujur 10x10 derajat yang saya buat di QGIS. Saya bisa membacanya ke R menggunakan paket rgdal.

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

Ini memiliki atribut dan struktur berikut.

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 

Saya ingin belajar cara membuat kisi / shapefile yang sama ini sepenuhnya di dalam R, daripada di QGIS, serta kisi dengan ukuran lain (1x1,5x5, dll.). Tujuan utamanya adalah untuk menggunakan over () dalam paket sp untuk overlay grid ini ke file poligon lain dan menghitung jumlah grid yang berpotongan dengan setiap poligon. Saya sudah tahu bagaimana melakukan langkah selanjutnya ini (saya pikir), saya hanya ingin tahu cara membuat layer grid di R.

Andy
sumber

Jawaban:

6

Lihatlah fungsi raster dalam paket raster. Ini akan memungkinkan Anda membuat raster dengan batas tertentu, jumlah baris / kolom dan resolusi.

Di sini saya akan menggunakan karakteristik ringkasan data Anda untuk membuat raster 100x100 dalam batas yang ditentukan. Saya melewati objek sejauh untuk mendefinisikan batas x dan y. Anda juga dapat menggunakan argumen spesifik (xmn, xmx, ymn, ymx) di dalam fungsi 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)

Sangat mudah untuk memaksa objek raster ke objek sp grid menggunakan;

sp.r <- as(r, "SpatialPixelsDataFrame")
  class(sp.r)   
  spplot(sp.r, "layer") 
Jeffrey Evans
sumber
1
Berhasil. Untuk mengubah ukuran sel, ubah argumen nrow dan ncol. Misalnya, untuk kenaikan 10 derajat, ubah nrow = 100, ncol = 100 menjadi nrow = panjang (seq (-90,90,10)), ncol = panjang (seq (-180.180,10))
Andy
Setelah membuat raster, Anda juga bisa menggunakan sesuatu seperti: "res (r) <- 3.7" atau argumen "resolusi" dalam fungsi raster secara langsung, tetapi ini akan mengabaikan jumlah baris dan kolom yang ditentukan.
Jeffrey Evans
@ JeffreyEvans Saya pikir saya mencari hal yang sama, tetapi versi sel-sel ini. Saya ingin kisi sel 20 x 10 derajat mulai dari 180, -180 hingga 90, -90. Namun saya tidak yakin bagian mana dari jawaban ini untuk diedit untuk mendapatkan hasil itu (baru untuk program ini) dan, yah, saya bingung dengan semua warna.
Amroco