ArcGIS实操:从土地分类图到生物丰度分布图,手把手教你搞定生态评估
ArcGIS生态评估实战:从土地分类到生物丰度可视化的全流程解析
当我们需要评估某个区域的生态质量时,生物丰度指数是一个非常重要的指标。它能直观反映区域内生物多样性的空间分布特征,为生态保护决策提供科学依据。本文将带你一步步完成从土地分类图到生物丰度分布图的完整制作流程,特别适合生态学、环境科学领域的研究人员和学生使用。
1. 项目准备与数据预处理
在开始任何GIS项目前,充分的数据准备和正确的坐标系统设置是成功的关键。许多初学者常在这里栽跟头,导致后续步骤无法顺利进行。
首先,确保你的土地覆盖分类图已经具备投影坐标系统而非地理坐标系统。这一点至关重要,因为:
- 地理坐标系统使用经纬度单位,而投影坐标系统使用长度单位(如米)
- 面积计算必须在投影坐标下进行,否则结果将严重失真
- 后续的栅格操作也需要统一的投影基准
提示:可以通过右键点击图层→属性→源选项卡,查看当前坐标系统信息。如果显示"GCS_"开头,说明是地理坐标系统,需要进行投影转换。
转换坐标系统的具体步骤:
- 打开ArcToolbox→数据管理工具→投影和变换→栅格→投影栅格
- 输入栅格选择你的土地分类图
- 输出坐标系选择适合你研究区域的投影(如UTM、Albers等)
- 设置适当的重采样方法(分类数据建议使用"NEAREST")
接下来,我们需要对土地分类图进行重分类。原始分类可能包含过多类别,而生物丰度计算通常只需要几大类:
| 原始分类代码 | 重分类代码 | 对应地类 |
|---|---|---|
| 1-5 | 1 | 植被 |
| 6-8 | 2 | 水域湿地 |
| 9-12 | 3 | 建设用地 |
| 13-15 | 4 | 裸地 |
重分类操作:
# ArcPy实现重分类的代码示例 import arcpy from arcpy.sa import * in_raster = "land_cover.tif" reclass_field = "VALUE" remap = RemapValue([[1,1],[2,1],[3,1],[4,1],[5,1], [6,2],[7,2],[8,2], [9,3],[10,3],[11,3],[12,3], [13,4],[14,4],[15,4]]) out_raster = Reclassify(in_raster, reclass_field, remap, "NODATA") out_raster.save("reclassified.tif")2. 创建分析渔网与空间选择
渔网(Fishnet)是GIS中常用的分析单元创建工具,它将研究区域划分为规则的网格,便于后续统计分析。这一步有几个关键参数需要特别注意:
- 网格大小:决定了最终生物丰度图的分辨率。太小会增加计算量,太大则可能丢失细节。建议根据研究目的和原始数据分辨率确定。
- 坐标范围:应略大于实际研究区域,避免边缘效应。
- 几何类型:选择POLYGON而非POLYLINE,因为我们需要计算每个网格内的面积。
创建渔网的具体步骤:
- 打开ArcToolbox→数据管理工具→要素类→创建渔网
- 设置输出位置和名称
- 输入研究区域的边界坐标(可从边界矢量文件获取)
- 设置行数和列数(或直接指定网格宽度/高度)
- 几何类型选择"POLYGON"
创建完成后,我们需要提取实际研究区域内的网格:
# 按位置选择渔网网格 arcpy.MakeFeatureLayer_management("fishnet.shp", "fishnet_lyr") arcpy.SelectLayerByLocation_management("fishnet_lyr", "INTERSECT", "study_area.shp") arcpy.CopyFeatures_management("fishnet_lyr", "selected_fishnet.shp")3. 面积计算与数据整合
这一阶段的核心目标是获取每个网格内各地类的面积,为后续生物丰度计算奠定基础。这里有几个容易出错的点需要特别注意:
- 投影一致性:确保所有数据在同一投影下,否则面积计算不准确
- 字段类型:面积字段应设为双精度型
- 单位统一:建议全部使用平方千米,便于后续计算
首先将重分类后的栅格转换为矢量面:
- 打开ArcToolbox→转换工具→由栅格转出→栅格转面
- 输入栅格选择重分类后的结果
- 勾选"简化面"选项(可减少数据量)
- 指定输出位置
然后按地类代码进行融合操作:
# 融合操作 arcpy.Dissolve_management("reclassified_poly.shp", "dissolved.shp", ["GRIDCODE"], "", "MULTI_PART", "DISSOLVE_LINES")接下来是关键的面积计算步骤:
- 打开融合后图层的属性表
- 添加新字段"area_km2"(类型:Double)
- 右键点击该字段→计算几何
- 属性选择"面积",单位选择"平方千米"
同时,为渔网网格添加唯一标识码:
- 打开渔网属性表
- 添加短整型字段"grid_code"
- 使用字段计算器赋值为FID+1(避免出现0值)
4. 空间叠加与生物丰度计算
通过空间叠加分析,我们可以获取每个网格内各地类的面积信息。这一步使用相交(Intersect)工具最为合适:
# 相交分析 arcpy.Intersect_analysis(["dissolved.shp", "selected_fishnet.shp"], "intersect_result.shp", "ALL", "", "INPUT")相交完成后,需要重新计算每个相交区域的面积:
- 打开相交结果的属性表
- 添加双精度字段"new_area"
- 计算几何(面积,平方千米)
将属性表导出为文本文件后,在Excel中创建数据透视表:
- 行:grid_code(渔网网格代码)
- 列:GRIDCODE(地类代码)
- 值:new_area(求和)
整理后的表格应类似以下结构:
| grid_code | 植被面积 | 水域湿地面积 | 建设用地面积 | 裸地面积 | 总面积 |
|---|---|---|---|---|---|
| 1 | 0.85 | 0.12 | 0.03 | 0.00 | 1.00 |
| 2 | 0.72 | 0.25 | 0.03 | 0.00 | 1.00 |
| ... | ... | ... | ... | ... | ... |
生物丰度计算公式为:
生物丰度指数 = Abio × (0.46×植被面积 + 0.28×水域湿地面积 + 0.04×建设用地面积 + 0.22×裸地面积) / 网格总面积其中Abio为区域生物丰度基准值,可根据实际情况调整。计算完成后,对结果进行归一化处理(0-1范围)。
5. 结果可视化与制图
将计算结果关联回渔网网格是最后的关键步骤:
- 右键点击渔网图层→连接和关联→连接
- 选择基于"grid_code"字段的连接
- 选择包含计算结果的表格
- 指定连接字段为对应的grid_code列
连接成功后,将渔网转换为栅格:
# 要素转栅格 arcpy.FeatureToRaster_conversion("fishnet_with_results.shp", "bio_abundance", "bio_abundance.tif", 100) # 100为输出像元大小最后,使用掩膜提取研究区域范围内的结果:
- 打开ArcToolbox→空间分析工具→提取分析→按掩膜提取
- 输入栅格选择上一步的结果
- 输入掩膜数据选择研究区域边界
- 设置输出位置
得到的栅格可以使用渐变色带进行符号化,建议使用绿色到红色的渐变,其中:
- 深绿色表示生物丰度高
- 黄色表示中等
- 红色表示生物丰度低
在实际项目中,我发现以下几个技巧特别有用:
- 处理大型数据集时,可以先将研究区域划分为多个区块分别处理,最后再合并
- 生物丰度计算公式中的权重系数可以根据当地生态特点进行调整
- 定期保存中间结果和mxd文档,避免意外丢失工作进度
