R을 사용하여 shapefile에 의해 정의 된 영역의 평균 래스터 값을 찾는 방법은 무엇입니까?


19

몇 년 동안 특정 달을 나타내는 래스터 이미지 세트가 있고 shapefile을 사용하여 영역의 평균 값에 대한 타임 라인을 만들고 싶습니다.

래스터에서 값을 추출하여 사용할 수있는 방식으로 R로 가져 오려면 어떻게해야합니까?

답변:


23

다음은 예제 코드입니다. 모든 래스터를 처리하기 위해 루프에서 작동하도록이 코드를 적용하는 것이 매우 간단합니다. 래스터가 공통 범위와 해상도를 공유하는 경우 래스터 스택을 만들고 스택의 밴드를 반복 할 수 있습니다. 디렉토리에 모든 래스터를 포함하는 벡터를 특정 형식으로 만들려면 "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에 추가 r.mean 얻을 : r.mean <- 올라가지을 (lapply (r.vals는, FUN)의 평균 =)
cmbarbu

6

으로 Shape 파일을 읽어 SpatialPolygonsDataFrame( readOGR패키지의 기능 rgdal)

래스터를 Raster객체 로 읽으십시오 ( rasterpackage 함수 raster)

extract(raster, spdf)각 다각형 아래에 격자 셀을 가져 오는 데 사용 합니다. 그런 다음 실행하십시오 mean.

래스터 이미지 세트를 반복합니다 ...


래스터 이미지에서 추출 된 값으로 shapefile을 작성하는 방법은 무엇입니까?
Stophface
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.