如何将R中amt包hr_kde输出的家域导出为QGIS可用的Shapefile
解决方法
你之前的报错是因为没有先从hr_kde()输出的KDE对象中提取矢量格式的家域等密度线,直接调用栅格/矢量导出函数自然无法匹配对象类型,具体操作步骤如下:
- 第一步:安装加载依赖包
优先使用sf包处理矢量数据,比老旧的writeOGR兼容性更强:install.packages(c("amt", "sf")) library(amt) library(sf) - 第二步:提取家域多边形
用amt包自带的hr_isopleths()函数,直接从KDE结果中提取你需要的家域范围(默认输出95%和50%两个常用水平的多边形,返回标准sf矢量对象):# output为你用hr_kde()得到的结果对象 hr_poly <- hr_isopleths(output) # 如果只需要95%家域,可指定levels参数 # hr_poly <- hr_isopleths(output, levels = 0.95) - 第三步:导出为Shapefile
调用sf包的st_write()函数直接导出即可,存储路径建议避免使用中文和特殊字符:st_write(hr_poly, dsn = "替换为你的存储路径/鹿1号家域.shp", delete_layer = TRUE)
批量处理33只鹿的方法
如果需要批量导出所有个体的家域,可按个体分组批量运行后合并为一个sf对象再导出,导出后每个多边形会自带个体ID、家域水平等属性,可直接在QGIS中查看和处理:
# 假设你是按个体列id分组计算KDE,嵌套数据列名为kde_res all_hr <- bind_rows(lapply(your_nested_data$kde_res, hr_isopleths), .id = "id") st_write(all_hr, dsn = "替换为路径/所有鹿家域.shp", delete_layer = TRUE)
之前尝试失败的原因说明:
writeRaster是栅格导出函数,仅接受Raster类对象,hr_kde()输出的是自定义的kde类,自然没有对应的方法,触发第一个报错;output$trast是栅格对象,不是writeOGR要求的Spatial类矢量对象,触发第二个报错;output$ud本身就是 KDE 计算得到的利用分布栅格,所以只能导出热图栅格,无法得到多边形家域。
内容的提问来源于stack exchange,提问作者Laura Bonnefond
相关产品推荐
相关产品推荐

