Tạo shapefile lưới trong R?


8

Tôi có shapefile sau đây của lưới vĩ độ / kinh độ 10 x10 mà tôi đã tạo trong QGIS. Tôi có thể đọc nó vào R bằng cách sử dụng gói rgdal.

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

Nó có các thuộc tính và cấu trúc sau đây.

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 

Tôi muốn tìm hiểu cách tạo cùng một lưới / shapefile này trong R, chứ không phải trong QGIS, cũng như các lưới có kích thước khác (1x1,5x5, v.v.). Mục tiêu cuối cùng là sử dụng over () trong gói sp để phủ lưới này lên một tệp đa giác khác và đếm số lượng lưới được giao nhau bởi mỗi đa giác. Tôi đã biết cách thực hiện bước tiếp theo này (tôi nghĩ), tôi chỉ muốn biết cách tạo lớp lưới trong R.

Câu trả lời:


6

Hãy xem chức năng raster trong gói raster. Nó sẽ cho phép bạn tạo một raster với một phạm vi, số lượng hàng / cột và độ phân giải được chỉ định.

Ở đây tôi sẽ sử dụng các đặc điểm của bản tóm tắt dữ liệu của bạn để tạo raster 100x100 trong phạm vi được chỉ định. Tôi đang vượt qua một đối tượng phạm vi để xác định giới hạn x và y. Bạn cũng có thể sử dụng các đối số cụ thể (xmn, xmx, ymn, ymx) trong hàm 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)

Thật đơn giản để ép các đối tượng raster vào một đối tượng sp được sử dụng;

sp.r <- as(r, "SpatialPixelsDataFrame")
  class(sp.r)   
  spplot(sp.r, "layer") 

1
Nó hoạt động. Để thay đổi kích thước ô, thay đổi đối số nrow và ncol. Ví dụ: đối với gia số 10 độ, thay đổi nrow = 100, ncol = 100 thành nrow = length (seq (-90,90,10)), ncol = length (seq (-180,180,10))
Andy

Sau khi tạo raster, bạn cũng có thể sử dụng một cái gì đó như: "res (r) <- 3.7" hoặc đối số "độ phân giải" trong hàm raster trực tiếp, nhưng điều này sẽ bỏ qua số lượng hàng và cột được chỉ định.
Jeffrey Evans

@JeffreyEvans Tôi nghĩ rằng tôi theo cùng một thứ, nhưng một phiên bản hình chữ nhật của các ô này. Tôi muốn một lưới gồm 20 ô 10 độ 10 từ 180, -180 đến 90, -90. Tuy nhiên tôi không chắc phần nào của câu trả lời này cần chỉnh sửa để có kết quả đó (mới đối với các chương trình này) và, tốt, tôi bối rối bởi tất cả các màu.
Amroco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.