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

如何用R的spatstat包复刻ESRI Point Density工具?

用spatstat复刻ESRI Point Density的最优方案

核心逻辑对齐

ESRI Point Density本质是固定邻域的加权核密度估计:对每个栅格单元,计算指定邻域内所有点的属性权重总和,再除以邻域面积,输出单位面积的密度值。要对齐这个逻辑,优先用density.ppp配合参数设置,比smooth.ppp或自定义焦点分析更高效精准。

具体操作步骤

1. 数据预处理(单位统一是关键)

确保你的ppp对象坐标已转换为千米(最终要输出每平方千米的单位)。如果原始数据是米单位,用以下代码转换:

your_ppp_object <- rescale(your_ppp_object, s = 1/1000)

2. 用density.ppp实现核心功能

直接通过参数配置复刻ESRI工具的行为:

  • weights:传入遗址的规模属性(比如公顷数),对应ESRI里的「Population字段」,让每个点的贡献按自身规模加权;
  • bw:设置为ESRI的搜索半径(千米为单位),比如搜索半径5千米就设bw=5;
  • kernel:选"disc"对应ESRI默认的圆形邻域,选"square"对应方形邻域,这两个核都是邻域内权重均匀计算,完全匹配ESRI的逻辑;
  • at = "pixels":指定输出栅格格式的密度表面。

示例代码:

# 假设your_ppp_object已转千米单位,site_size是每个遗址的公顷数属性
density_surface <- density.ppp(your_ppp_object, 
                               weights = your_ppp_object$site_size,
                               bw = 5,  # 5千米搜索半径
                               kernel = "disc",  # 圆形邻域
                               at = "pixels")

3. 结果验证

density.ppp输出的单位正好是公顷/平方千米,完全符合你的需求。可以手动计算某点邻域内的总公顷数除以邻域面积(圆形邻域面积为π*r²),和栅格值对比验证准确性。

其他选项的优劣对比

  • smooth.ppp:默认用高斯核做平滑,是「渐变权重」的核估计,和ESRI「固定邻域均匀加权」的逻辑不符,不推荐;
  • 自定义焦点分析:比如用raster包的focal函数,需要先把点转栅格再处理,效率远低于density.ppp,且spatstat对空间点的边界处理更专业。

时间序列追踪方法

把数据按时间切片(比如按朝代/时间段拆分ppp对象),对每个时间片重复上述步骤,即可得到不同时期的密度表面,进而分析变化趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:22