2013-03-26 136 views
1

我有一個有很多補丁(具有相同值的連續單元的塊)的柵格地圖。我需要做的是獲得每個補丁的中心座標(或接近中心)。 我對柵格包非常沒有經驗,但是隻有當我知道地圖中單元格的位置時,我才能得到座標。有沒有辦法讓座標給出單元格的值呢?謝謝獲取柵格地圖中補丁的座標(R中的柵格包)

+0

你是如何創建你創建/導入你的光柵?如果您展示了數據樣本,用於創建柵格的代碼和/或您嘗試的內容,我會更簡單地幫助您。 – plannapus 2013-03-26 08:51:14

+0

請參閱'?click'和可能還有'?zoom'。 – 2013-03-26 08:57:33

+0

作爲一種替代方案,您可能想要使用ImageJ,它具有叢/找斑工具。 – 2013-03-26 11:40:34

回答

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 2013-03-26 09:03:52

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

可能不會像有趣,你可以期望。

您與方向= 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, ] 

重來一次得到

rc4

,也許叢 '重心'

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

注意

如果您嘗試使用clump()沒有首先 分離modeltools庫將有一個錯誤。模型工具是由硬幣調用的,也可能是其他統計庫。