많은 패치 (같은 값을 가진 연속 셀의 덩어리)가있는 래스터 맵이 있습니다. 내가해야할 일은 각 패치의 중심 좌표 (또는 중앙에 가까운 좌표)를 얻는 것입니다. 래스터 패키지로는 매우 익숙하지 않지만 맵의 셀 위치를 알고있는 경우에만 좌표를 얻을 수 있습니다. 대신에 좌표 값을주는 방법이 있나요? 당신이래스터 맵 (R의 래스터 패키지)에서 패치의 좌표를 얻습니다.
1
A
답변
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)
plot(rc)
text(df[df$is_clump == T, 1:2], labels = df[df$is_clump == T, 3])
당신이 기대할 수만큼 흥미로운되지 않을 수 있습니다.
당신은
을 얻고 어쩌면 응집 방향 = 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)
주 : 당신이 이 modeltools 라이브러리를 분리 첫번째없이 clump()
를 사용하려고하면
오류가있을 것입니다. modeltools는 동전으로 불려지고 다른 통계 라이브러리 일 수 있습니다.
래스터 생성/가져 오기를 어떻게 만들었습니까? 데이터 샘플, 래스터를 만들 때 사용한 코드 및/또는 시도한 것을 보여 주면 더 쉽게 도와 드리겠습니다. – plannapus
'? click'과'? zoom'도 참조하십시오. –
대안으로, 덩어리/자리 찾기 도구가있는 ImageJ를 사용할 수도 있습니다. –