R로 래스터 링하기위한 벡터 처리


9

R에서 벡터를 래스터로 변환하고 있지만 프로세스가 너무 길었습니다. 더 빠르게하기 위해 스크립트를 멀티 스레드 또는 GPU 처리에 넣을 수 있습니까?

래스터 화 된 벡터에 대한 스크립트입니다.

r.raster = raster()
extent(r.raster) = extent(setor) #definindo o extent do raster
res(r.raster) = 10 #definindo o tamanho do pixel
setor.r = rasterize(setor, r.raster, 'dens_imov')

r. 래스터

클래스 : RasterLayer 크기 : 9636, 11476, 110582736 (nrow, ncol, ncell) 해상도 : 10, 10 (x, y) 범위 : 505755, 620515, 8555432, 8651792 (xmin, xmax, ymin, ymax) 좌표 심판. : + proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0

세터

클래스 : SpatialPolygonsDataFrame 기능 : 5419 범위 : 505755, 620515.4, 8555429, 8651792 (xmin, xmax, ymin, ymax) 좌표 심판. : + proj = utm + zone = 24 + south + ellps = GRS80 + units = m + no_defs 변수 : 6 이름 : ID, CD_GEOCODI, TIPO, dens_imov, area_m, domicilios1 분 값 : 35464, 290110605000001, RURAL, 0.00000003,100004, 1.0000 최대 값 : 58468, 293320820000042, URBANO, 0.54581673,99996, 99.0000

세터의 인쇄 여기에 이미지 설명을 입력하십시오


setor와 r.raster의 요약을 게시 할 수 있습니까? setor의 객체 수와 r.raster의 크기에 대해 알고 싶습니다. 괜찮아요을 인쇄
mdsumner가

질문의 본문에 정리를 넣습니다.
Diogo Caribé

요약이 아닌 인쇄 만 – 내가 요청한 정보가 tgere가 아니라
mdsumner

죄송합니다. 인쇄물을 넣었습니다.
Diogo Caribé

아, 내가 출력물을 볼 때까지 이것을 생각하지 못해서 실망했다. 래스터의 투영이 다각형과 일치하는지 확인하십시오. 현재는 그렇지 않습니다. res (r) <-10; setor.r = rasterize (setor, r, 'dens_imov')-또한 res (r) <-250을 먼저 설정하여 고해상도 버전에 걸리는 시간에 대한 아이디어를 얻으십시오.
mdsumner

답변:


17

이 방법으로 패키지 를 사용하여 함수 를 "병렬화" 하려고했습니다 .rasterizeRparallel

  1. SpatialPolygonsDataFrame 객체를 n부분으로 분할
  2. rasterize 모든 부분이 별도로
  3. 모든 부품을 하나의 래스터로 병합

내 컴퓨터에서 병렬화 된 rasterize기능은 병렬화되지 않은 기능 보다 2.75 배 더 적었습니다 rasterize.

참고 : 아래 코드는 웹에서 다각형 shapefile (~ 26.2MB)을 다운로드합니다. SpatialPolygonDataFrame 객체를 사용할 수 있습니다. 이것은 단지 예일뿐입니다.

라이브러리 및 예제 데이터를로드하십시오.

# Load libraries
library('raster')
library('rgdal')

# Load a SpatialPolygonsDataFrame example
# Load Brazil administrative level 2 shapefile
BRA_adm2 <- raster::getData(country = "BRA", level = 2)

# Convert NAMES level 2 to factor 
BRA_adm2$NAME_2 <- as.factor(BRA_adm2$NAME_2)

# Plot BRA_adm2
plot(BRA_adm2)
box()

# Define RasterLayer object
r.raster <- raster()

# Define raster extent
extent(r.raster) <- extent(BRA_adm2)

# Define pixel size
res(r.raster) <- 0.1

브라질

그림 1 : 브라질 SpatialPolygonsDataFrame 플롯

간단한 실 예

# Simple thread -----------------------------------------------------------

# Rasterize
system.time(BRA_adm2.r <- rasterize(BRA_adm2, r.raster, 'NAME_2'))

내 노트북에서의 시간 :

# Output:
# user  system elapsed 
# 23.883    0.010   23.891

멀티 스레드 스레드 예

# Multithread -------------------------------------------------------------

# Load 'parallel' package for support Parallel computation in R
library('parallel')

# Calculate the number of cores
no_cores <- detectCores() - 1

# Number of polygons features in SPDF
features <- 1:nrow(BRA_adm2[,])

# Split features in n parts
n <- 50
parts <- split(features, cut(features, n))

# Initiate cluster (after loading all the necessary object to R environment: BRA_adm2, parts, r.raster, n)
cl <- makeCluster(no_cores, type = "FORK")
print(cl)

# Parallelize rasterize function
system.time(rParts <- parLapply(cl = cl, X = 1:n, fun = function(x) rasterize(BRA_adm2[parts[[x]],], r.raster, 'NAME_2')))

# Finish
stopCluster(cl)

# Merge all raster parts
rMerge <- do.call(merge, rParts)

# Plot raster
plot(rMerge)

브라질 래스터

그림 2 : 브라질 래스터 플롯

내 노트북에서의 시간 :

# Output:
# user  system elapsed 
# 0.203   0.033   8.688 

R의 병렬화에 대한 추가 정보 :


아주 좋은 답변입니다!
Diogo Caribé

머신에서 코어 수로 n을 설정하지 않습니까?
Sam

@ Sam 문제없이 작동해야한다고 생각하지만 더 나은지 모르겠습니다! 코어 수와 동일한 n 부분 의 기능 을 분할하면 이 부분 중 하나가 처리하기 쉽고 아마도 처리 된 코어는 사용하지 않을 것이라고 가정했습니다! 그러나 한 코어가 한 부품을 처리 할 때 코어보다 많은 부품이 있으면 다른 부품이 필요합니다. 그러나 확실하지 않습니다! 이 문제에 대한 도움을 주시면 감사하겠습니다.
Guzmán

오늘 밤 몇 가지 테스트를 진행하겠습니다. 50m까지 래스터 화 된 작은 shapefile (대략 25km x 25km)에서 n = 20, 30 또는 최대 50에 대해 n = 2,4 또는 8을 사용하면 약간의 개선이 있습니다. 오늘 밤 매우 큰 shapefile을 사용합니다 25m로 래스터 화합니다. 단일 코어 처리는 10 시간이므로 n의 다른 값이 무엇인지 볼 수 있습니다 !! (n = 50은 1 시간 미만입니다)
Sam

@ Guzmán 나는 코드를 다시 실행합니다. 그러나 그것은 약간의 오류를 재조정했으며 이유를 모릅니다. 도와주세요? checkForRemoteErrors (val)의 오류 : 7 개의 노드에서 오류가 발생했습니다. 첫 번째 오류 : 'BRA_adm2'개체를 찾을 수 없음
Diogo Caribé
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.