解决R中SpatialKDE自定义网格失效及KDE绘图错误问题
问题排查与解决方案
1. 自定义网格未生效,默认使用多边形质心计算
SpatialKDE的kde()函数若未正确传入网格参数,会 fallback 到用输入要素质心计算的逻辑。解决步骤:
- 提前用
sf::st_make_grid()生成自定义矩形网格,转为sf对象后作为grid参数传入kde() - 确保网格与树木点数据的CRS完全一致,投影不匹配会导致函数忽略自定义网格
- 示例代码:
# 生成自定义矩形网格(cellsize可按需调整) custom_grid <- st_make_grid(tree_points, cellsize = c(10, 10), what = "polygons") custom_grid_sf <- st_as_sf(custom_grid) # 传入grid参数执行KDE计算 kde_result <- kde(tree_points, grid = custom_grid_sf, band_width = 5)
2. 绘图报错“Invalid index: field name 'x_start' not found”
该错误源于绘图函数期望的字段不存在,处理方式:
- 先检查KDE结果的属性字段:
names(kde_result),确认核心密度值字段(通常为kde_value) - 避免直接调用默认
plot(),手动指定绘图字段:
# 基于KDE值字段绘图 plot(kde_result["kde_value"], main = "树木点核密度分布")
- 若用
ggplot2或tmap绘图,确保映射的字段名正确:
library(ggplot2) ggplot(kde_result) + geom_sf(aes(fill = kde_value)) + scale_fill_viridis_c(option = "plasma")
3. st_is_longlat(x)边界框经纬度范围无效警告
此警告因数据CRS被误判为地理坐标系,或经纬度存在异常值:
- 检查数据CRS:
st_crs(tree_points),确认是否为投影坐标系(如UTM、高斯克吕格),若缺失或错误手动设置:
# 示例:设置为UTM 50N投影(EPSG:32650) st_crs(tree_points) <- 32650
- 若数据确实是地理坐标系,检查边界框是否存在超出[-180,180](经度)、[-90,90](纬度)的异常值,过滤后再计算:
# 查看边界框 st_bbox(tree_points) # 过滤异常点 tree_points_clean <- tree_points %>% filter( st_coordinates(.)[,1] >= -180, st_coordinates(.)[,1] <= 180, st_coordinates(.)[,2] >= -90, st_coordinates(.)[,2] <= 90 )
内容的提问来源于stack exchange,提问作者Regggina
相关产品推荐
相关产品推荐

