Làm thế nào để tìm giá trị raster trung bình của một khu vực được xác định bởi một shapefile bằng R?


19

Tôi có một tập hợp các hình ảnh raster đại diện cho một tháng cụ thể qua các năm và tôi muốn tạo một dòng thời gian về các giá trị trung bình của một khu vực bằng cách sử dụng một shapefile.

Làm cách nào để trích xuất các giá trị từ các trình quét và nhập chúng vào R theo cách mà tôi có thể sử dụng chúng?

Câu trả lời:


23

Đây là mã ví dụ. Khá dễ dàng để điều chỉnh mã này để làm việc trong một vòng lặp để xử lý tất cả các trình quét của bạn. Nếu các raster của bạn chia sẻ một phạm vi và độ phân giải chung, bạn có thể tạo một ngăn xếp raster và lặp qua các dải trong ngăn xếp. Để tạo một vectơ chứa tất cả các trình quét trong một thư mục, trong một định dạng cụ thể, bạn có thể sử dụng "list.files" và sau đó chuyển vectơ này để xếp chồng.

Thí dụ:

rlist=list.files(getwd(), pattern="img$", full.names=TRUE) 

r <- stack(rlist)   


    # Add required libraries
    require(raster)
    require(sp)
    require(rgdal)

    # Set working directory, raster, in and out shapefiles
    setwd("C:/test")
    inshp="MyPolys"
    outshp="PolyMeans"
    rdata <- "Year2012.img"

    # Read polygon feature class shapefile
    sdata <- readOGR(dsn=getwd(), layer=inshp)

    # Read raster
    r <- raster(rdata)

    # Extract raster values to list object
    r.vals <- extract(r, sdata)

    # Use list apply to calculate mean for each polygon
    r.mean <- lapply(r.vals, FUN=mean)

    # Join mean values to polygon data
    sdata@data <- data.frame(sdata@data, m2012=r.mean)

    # Write results
    writeOGR(sdata, getwd(), outshp, driver="ESRI Shapefile", check_exists=TRUE, 
         overwrite_layer=TRUE)

1
+1 - giải pháp tuyệt vời, đặt ra tốt và câu trả lời đầy đủ.
Simbamangu

Nếu tôi có một đa dữ liệu: Làm thế nào để data.frame(sdata@data, m2012=r.mean)biết đa giác whch để gán giá trị nào cho?
Stophface 10/03/2016

để có được r.mean được thêm chính xác vào sdata, trước tiên tôi phải hủy niêm yết r.mean: r.mean <- unlist (lapply (r.vals, FUN = mean))
cmbarbu

6

Đọc shapefile thành một SpatialPolygonsDataFrame( readOGRhàm từ gói rgdal)

Đọc raster vào một Rasterđối tượng ( rasterhàm từ gói raster)

Sử dụng extract(raster, spdf)để có được các ô lưới dưới mỗi đa giác. Sau đó chạy meantrên chúng.

Lặp lại tập hợp các hình ảnh raster của bạn ...


Làm thế nào để viết shapefile ra (với các giá trị được trích xuất từ ​​hình ảnh raster)?
Stophface 10/03/2016
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.