วิธีค้นหาค่า Raster เฉลี่ยของพื้นที่ที่กำหนดโดย Shapefile โดยใช้ R


19

ฉันมีชุดภาพแรสเตอร์ซึ่งแสดงเดือนเฉพาะในช่วงหลายปีที่ผ่านมาและฉันต้องการสร้างเส้นเวลาของค่าเฉลี่ยของพื้นที่โดยใช้รูปร่างไฟล์

ฉันจะแยกค่าจากแรสเตอร์และนำเข้ามาในรูปแบบที่ฉันสามารถใช้ได้อย่างไร

คำตอบ:


23

นี่คือตัวอย่างรหัส มันค่อนข้างตรงไปตรงมาที่จะปรับรหัสนี้ให้ทำงานเป็นวงวนเพื่อประมวลผล rasters ทั้งหมดของคุณ หาก rasters ของคุณมีขอบเขตและความละเอียดร่วมกันคุณสามารถสร้าง raster stack และ loop ผ่านแถบใน stack ในการสร้างเวกเตอร์ที่มีแรสเตอร์ทั้งหมดในไดเรกทอรีในรูปแบบเฉพาะคุณสามารถใช้ "list.files" แล้วส่งเวกเตอร์นี้ไปยังสแต็ก

ตัวอย่าง:

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 - คำตอบที่ยอดเยี่ยมคำตอบที่ดีและสมบูรณ์
Simbamangu

ถ้าฉันมีไฟล์หลายไฟล์: data.frame(sdata@data, m2012=r.mean)รู้ได้อย่างไรว่ารูปหลายเหลี่ยมโพลีกอนเพื่อกำหนดค่าใดให้
Stophface

เพื่อรับ r.mean เพิ่มอย่างถูกต้องใน sdata ฉันต้อง unlist แรก r.mean: r.mean <- unlist (lapply (r.vals, FUN = ค่าเฉลี่ย))
cmbarbu

6

อ่าน shapefile ลงในSpatialPolygonsDataFrame( readOGRฟังก์ชั่นจากแพ็คเกจrgdal)

อ่านแรสเตอร์เป็นRasterวัตถุ ( rasterฟังก์ชั่นจากแพคเกจraster)

ใช้extract(raster, spdf)เพื่อรับเซลล์กริดในแต่ละรูปหลายเหลี่ยม จากนั้นวิ่งmeanไปที่พวกเขา

ทำซ้ำชุดภาพแรสเตอร์ของคุณ ...


จะเขียน shapefile ออกได้อย่างไร (ด้วยค่าที่แยกจากอิมเมจแรสเตอร์)?
Stophface
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.