【问题标题】:get coordinates of a patch in a raster map (raster package in R)获取栅格地图中补丁的坐标(R中的栅格包)
【发布时间】:2013-03-26 08:41:25
【问题描述】:

我有一个包含许多补丁(具有相同值的连续单元格)的栅格地图。我需要做的是获取每个补丁的中心(或靠近中心)的坐标。 我对光栅包非常缺乏经验,但似乎只有知道地图中单元格的位置才能获得坐标。有没有办法获得坐标来代替单元格的值?谢谢

【问题讨论】:

  • 您是如何创建/导入栅格的?如果您展示数据样本、用于创建栅格的代码和/或您尝试过的内容,我会更容易为您提供帮助。
  • ?click,也可能见?zoom
  • 作为替代方案,您可能想要使用 ImageJ,它具有团块/定点查找工具。

标签: r coordinates raster


【解决方案1】:

如果补丁是指团块,则 Raster 包允许您查找和隔离团块。以clump() raster 包为例,并对其进行扩展:

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)

注意事项

如果你不先尝试使用clump(),将会出现错误 分离 modeltools 库。 modeltools 被硬币调用,也许 其他统计库。

【讨论】:

    【解决方案2】:

    你可以取每个补丁的坐标的平均值:

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

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多