You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:栅格图层像素分布空间分析——识别像素密集区域方法

解决方案

方法1:栅格移动窗口统计(直接处理RasterLayer)

无需转换数据类型,直接通过滑动窗口计算区域内的像素统计量,快速识别密集/稀疏区域,适合大规模栅格数据。

  • 核心思路:用指定大小的窗口遍历栅格,计算窗口内像素值的总和或均值,高值区域对应密集,低值对应稀疏。可根据需求选择两种统计逻辑:
    • 若关注数值的聚集程度:直接计算窗口内像素值总和
    • 若关注有值像素的分布密度:先将栅格转为二值(有值=1,无值=0),再计算窗口内总和

代码示例(基于R语言raster包):

library(raster)

# 加载你的栅格对象(替换为实际路径或已加载对象)
r <- raster("your_raster_file.tif")

# 定义移动窗口(示例为5x5,可根据需求调整大小)
window <- matrix(1, nrow = 5, ncol = 5)

# 情况1:数值聚集密度
value_density <- focal(r, w = window, fun = sum, na.rm = TRUE)

# 情况2:有值像素分布密度
binary_r <- r
binary_r[!is.na(binary_r)] <- 1
binary_r[is.na(binary_r)] <- 0
pixel_distribution_density <- focal(binary_r, w = window, fun = sum, na.rm = TRUE)

# 可视化结果
plot(value_density, main = "数值聚集密度分布")
plot(pixel_distribution_density, main = "有值像素分布密度")

方法2:转换为点数据后执行核密度分析

若坚持使用核密度方法,解决你转换ppp失败的核心是正确设置空间窗口范围,步骤如下:

代码示例(基于R语言raster+spatstat包):

library(raster)
library(spatstat)

# 加载栅格
r <- raster("your_raster_file.tif")

# 提取有值像素的坐标与数值
pixel_data <- rasterToPoints(r, spatial = FALSE)
x_coords <- pixel_data[, 1]
y_coords <- pixel_data[, 2]
pixel_values <- pixel_data[, 3]

# 创建ppp对象:以栅格的边界作为点数据的空间窗口
spatial_window <- owin(xrange = c(xmin(r), xmax(r)), yrange = c(ymin(r), ymax(r)))
ppp_object <- ppp(x = x_coords, y = y_coords, window = spatial_window, marks = pixel_values)

# 计算核密度
# 情况1:基于点数量的密度
point_density <- density(ppp_object)
# 情况2:带数值权重的核密度(用像素值作为权重)
weighted_density <- density(ppp_object, weights = pixel_values)

# 转换为栅格格式(方便与原数据对齐)
density_raster <- raster(point_density)
projection(density_raster) <- projection(r)

# 可视化
plot(density_raster, main = "核密度分析结果")

内容的提问来源于stack exchange,提问作者Maik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:15:37