簡體   English   中英

獲取柵格地圖中補丁的坐標(R中的柵格包)

[英]get coordinates of a patch in a raster map (raster package in R)

我有一個包含許多面片(具有相同值的連續像元簇)的柵格地圖。 我需要做的是獲取每個面片的中心(或接近中心)的坐標。 我對柵格數據包沒有任何經驗,但似乎只有知道了像元在地圖中的位置,我才能獲得坐標。 有什么方法可以獲取給定單元格值的坐標嗎? 謝謝

如果打補丁是指團塊,則Raster軟件包可讓您查找並隔離團塊。 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

注意事項

如果您嘗試在沒有首先分離modeltools庫的情況下使用clump clump()將會出現錯誤。 硬幣和其他統計資料庫都調用了modeltools。

您可以取每個補丁的坐標平均值:

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM