2013-03-26 1 views
1

많은 패치 (같은 값을 가진 연속 셀의 덩어리)가있는 래스터 맵이 있습니다. 내가해야할 일은 각 패치의 중심 좌표 (또는 중앙에 가까운 좌표)를 얻는 것입니다. 래스터 패키지로는 매우 익숙하지 않지만 맵의 셀 위치를 알고있는 경우에만 좌표를 얻을 수 있습니다. 대신에 좌표 값을주는 방법이 있나요? 당신이래스터 맵 (R의 래스터 패키지)에서 패치의 좌표를 얻습니다.

+0

래스터 생성/가져 오기를 어떻게 만들었습니까? 데이터 샘플, 래스터를 만들 때 사용한 코드 및/또는 시도한 것을 보여 주면 더 쉽게 도와 드리겠습니다. – plannapus

+0

'? click'과'? zoom'도 참조하십시오. –

+0

대안으로, 덩어리/자리 찾기 도구가있는 ImageJ를 사용할 수도 있습니다. –

답변

1

당신은 각 패치의 좌표의 평균 걸릴 수 있습니다 감사합니다 패치로 당신이 대단히 짧은 시간을 의미

# some dummy data 
m <- matrix(c(
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,4,4,0, 
    0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,4,4,0, 
    0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,4,4,0, 
    0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, 
    0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, 
    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, 
    0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, 
    0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, 
    0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, 
    0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, 
    0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0, 
    0,0,2,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=20, byrow=T) 

# create a raster 
r <- raster(m) 

# convert raster to points 
p <- data.frame(rasterToPoints(r)) 

# filter out packground 
p <- p[p$layer > 0,] 

# for each patch calc mean coordinates 
sapply(split(p[, c("x", "y")], p$layer), colMeans) 
+0

그것은 작동합니다! 고맙습니다! – Oritteropus

4

경우, 래스터 패키지는 당신이 덩어리를 발견하고 분리 할 수 ​​있습니다. clump() 래스터 패키지 예를 복용하고 확장 :

library(raster) 
library(igraph) 
detach("package:coin", unload=TRUE) 
r <- raster(ncols=12, nrows=12) 
set.seed(0) 
r[] <- round(runif(ncell(r))*0.7) 
rc <- clump(r) 
clump_id <- getValues(rc)  
xy <- xyFromCell(rc,1:ncell(rc)) 
df <- data.frame(xy, clump_id, is_clump = rc[] %in% freq(rc, useNA = 'no')[,1]) 
df[df$is_clump == T, ] 

plot(r) 

r

plot(rc) 
text(df[df$is_clump == T, 1:2], labels = df[df$is_clump == T, 3]) 

rc

당신이 기대할 수만큼 흥미로운되지 않을 수 있습니다.

당신은

rc4

을 얻고 어쩌면 응집 방향 = 4

rc <- clump(r, directions = 4) 
clump_id <- getValues(rc)  
xy <- xyFromCell(rc,1:ncell(rc)) 
df <- data.frame(xy, clump_id, is_clump = rc[] %in% freq(rc, useNA = 'no')[,1]) 
df[df$is_clump == T, ] 

모든 이상 그것을 '무게 중심'

dfm <- ddply(df[df$is_clump == T, ], .(clump_id), summarise, xm = mean(x), ym = mean(y)) 
plot(rc) 
text(dfm[, 2:3], labels = dfm$clump_id) 

rc4mean

,451,515,

: 당신이 이 modeltools 라이브러리를 분리 첫번째없이 clump()를 사용하려고하면

오류가있을 것입니다. modeltools는 동전으로 불려지고 다른 통계 라이브러리 일 수 있습니다.