2012-07-23 4 views
0

SpatialPolygonsDataframe의 여러 특성을 '래스터 화'해야합니다. 그런 다음 각 래스터 레이어의 값에 지정된 벡터 값 (예 : 'gp')을 곱합니다. 처음에는 maptools에서 wrld_simpl 데이터 세트를 사용하고 있습니다. wrld_simpl은 POP2005라는 속성을 가지고 있으며 몇 년 동안 인구 추계에 해당하는 속성을 더 추가 할 것입니다 (2010 : 2100). 루프 또는 함수를 작성하여 각 속성을 수동으로 래스터 화하지 않고 새 값을 독립적으로 계산할 필요가 없도록 한 다음이 모든 단계를 반복하십시오. 여러 SpatialPolygonsDataframe 특성 래스터 화

data(wrld_simpl) 
gp <- seq(1,246) 

myraster <- raster(nrow = 572, ncol = 1440, xmn = -180, xmx = 180, ymn= -58, ymx = 85) 

래스터 라이 제이션() 함수가 나를 spatialPolygonsDataframe에서 특정 속성을 선택하는 것을 허용하지 않기 때문에

, 나는 래스터를 ::: 사용했다. polygonsToRaster() 대신 (동일 않음)에 내 속성을 변환 래스터 레이어.

rastergp <- raster:::.polygonsToRaster(wrld_simpl, myraster, field = wrld_simpl$POP2005) 
stackraster <- stack(rastergp, gp) 
estimation <- calc(stackraster, fun = function(x) x[1]*x[2]) 

진행 방법에 대한 의견이 있으십니까? 고마워요!

답변

2

음 당신이하려는 것을 설명하기 위해 스크립트를 최소한으로 줄여야합니다. 관련성이없고, 산만 해지고 우리가 알아낼 수있는 물건이 있습니다.

무엇이 일까요? (문서화되지 않은 숨겨진 함수 래스터 :::. polygonsToRaster)를 사용하면 위치 격자에서 다각형 속성의 값을 가져옵니다. 폴리곤에 래스터가 아닌 점 표를 겹쳐서이 작업을 수행 할 수 있습니다.

나는 작은 그리드 여기 그것을 할 것이다 - 당신의 해상도에 소요되는 100 배 이상 :

> myraster <- raster(nrow = 57, ncol = 144, xmn = -180, xmx = 180, ymn= -58, ymx = 85) 
> pts = SpatialPoints(xyFromCell(myraster,1:prod(dim(myraster))),proj4string=CRS(proj4string(wrld_simpl))) 
> overGrid = pts %over% wrld_simpl 

지금 overGrid 모든 격자 점에서 wlrd_simpl의 값으로 단지 표준 데이터 프레임이다. 래스터와 같은 순서입니다. 따라서 :

> POP2010 = myraster 
> POP2010[] = overGrid$POP2010 
> plot(POP2010) 

은 POP2010 래스터를 매핑합니다. 비교 :

> spplot(wrld_simpl,"POP2010") 

모든 오버레이 비즈니스가 완료되었습니다. 그런 다음 overGrid 열에서 스택을 만들 수 있습니다.

+0

입력 해 주셔서 감사합니다. Spacedman. 나는 내가해야 할 일을 설명하기 위해 스크립트를 최소한으로 줄였다. 당신이 제안하는 것은 기본적으로 지금 내가하고있는 것과 같은 결과를줍니다. 하지만 내 주요 문제는 그 시간에 하나의 파일을 만드는 중입니다 (총 91에서) 그리고 나는 스크립트를 91 번 실행하지 않아도되는 루프를 만들고 싶습니다. 그 문제에 대한 모든 의견은 크게 감사하겠습니다. –

관련 문제