1.一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,包括以下步骤;
步骤1:将栅格格网转为矢量数据;
步骤2:计算样方数据,样方数据用于统计斑块中某景观类型在样方数据中出现的频数;
步骤3:定义景观生态风险指数核心函数;
步骤4:计算景观生态风险指数。
2.根据权利要求1所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤1具体步骤为:步骤11:收集栅格格网数据,
收集分割后的区域尺度土地利用/土地覆被栅格格网数据集,确保栅格格网空间连续,且能覆盖整个研究区;每个栅格格网构成了生态风险小区;
步骤12:定义栅格转矢量函数,
定义栅格转矢量函数raster_to_shp(),输入参数包括转换前的栅格输入数据和转换后的矢量输出数据;在该函数体内,使用try‑except捕获异常;在try块中,使用arcpy.RasterToPolygon_conversion()函数将栅格数据转换为多边形矢量数据;
步骤13:执行转换操作,
首先设置待转换的栅格格网数据目录tif_dir,使用get_all_files()函数获取tif_dir目录中的所有tif文件;然后使用for循环遍历tif文件;在for循环体中,设置存储转换后的矢量数据的地理数据库位置,利用arcpy.Exists()函数判断该数据库是否存在,如果不存在,使用arcpy.CreateFileGDB_management()创建该数据库;紧接着,使用raster_to_shp()函数将当前的栅格数据转换为矢量数据,并保存到地理数据库中。
3.根据权利要求1所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤2具体步骤为:步骤21:获取样方数据地理数据库,
设置样方地理数据库目录gdb_dir,使用get_all_gdbs()函数获取gdb_dir目录中所有的地理数据库;
步骤22:遍历地理数据库中的要素,
使用for循环遍历所有地理数据库,利用arcpy.da.Walk()读取数据库中的要素,返回包含数据库路径、目录名和文件名等集合的walk;
步骤23:计算各景观类型的样方频数,
使用for循环遍历walk,在外循环体中使用for循环遍历格网要素文件,在内循环体中,累加总样方频数,使用arcpy.da.SearchCursor()函数查询当前要素文件的属性表,提取字段值“GRIDCODE”,“Shape_Area”和“Shape_Length”作为集合row返回,利用样方统计函数sample_stats()获取当前格网要素中各类型的样方频数,并对样方类型数据进行累加求和;
步骤24:汇总样方频数,
汇总各景观类型的样方频数和总样方频数,将其转换为字符串,通过write_txt()函数将该字符串存储在预先设定的样方结果输出目录。
4.根据权利要求1所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤3具体步骤为:步骤31:定义斑块统计函数,
定义斑块统计函数block_stats(),输入参数为斑块数据block,在函数体中,首先使用len()函数计算斑块数量NP,然后利用transpose()函数将输入数据转置,再通过sum()函数汇总转置数据的斑块类型面积CA和斑块类型周长CP,紧接着,使用m2_to_ha()函数将CA的单位由平方米换算为公顷,最后使用round()函数分别对CA和CP进行四舍五入;
步骤32:定义计算类型面积斑块数量函数,
定义计算景观类型面积和斑块数量函数calc_classArea_patchNum(),输入参数为要素属性表data_in;
步骤33:定义计算景观生态风险指数函数
定义计算景观生态风险指数函数calc_eri(),输入参数包括类型数据class_data,景观总面积A,斑块总数量M,各景观类型的脆弱性指数FI,样方数据sampleQ和干扰度分量权重W;
步骤34:定义景观生态风险指数输出函数
定义景观生态风险指数输出函数,输入参数为景观生态风险指数字典eri,在该函数体内,首先根据字典关键字“INDEX”获取分量指数data,然后利用for循环遍历data,在循环体内,根据分量指数迭代更新输出内容content。
5.根据权利要求4所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤32具体为:
1)提取景观类型,首先使用np.array()函数将输入数据转为矩阵,然后利用transpose()函数将矩阵转置,最后利用set()函数去重筛选景观类型生成cls;
2)汇总斑块数据,首先定义存储单个景观类型,斑块面积和斑块周长的列表block,同时定义存储斑块内容的patch_content;然后利用for循环遍历景观类型cls,在循环体内,通过for循环和条件判断按类型汇总单个景观类型的面积和周长,生成patch_content和block;
3)汇总类型数据,首先定义存储类型内容的class_content和类型数据列表的class_data,同时初始化景观总面积A和斑块总数量M;利用for循环遍历block,在循环体内,利用block_stats()函数统计单个景观类型的斑块数量NP,斑块面积CA和斑块周长CP;更新类型数列表class_data,同时迭代更新类型内容class_content,景观总面积A和斑块总数量M。
6.根据权利要求4所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤33具体步骤为:
1)定义存储分量指数和景观生态风险指数的字典eri,利用for循环遍历类型数据;
2)在循环体内,校验当前类型面积或周长是否为0,如果为0调过该循环;
3)在循环体内,根据各分量指数计算公式分别计算景观破碎度CI,景观分离度SI,景观优势度DI,景观干扰度LDI,景观分维指数FDI,景观损失度指数RI,当前类型的景观生态风险指数ERI;根据ERI迭代更新景观生态风险指数TERI。
7.根据权利要求1所述的一种基于ArcPy的区域尺度景观生态风险指数数据生产方法,其特征在于,所述步骤4具体步骤为:步骤41:首先设置景观类型地理数据库路径gdb_dri,输出结果存储路径out_path,样方统计文件路径sample_txt,然后判断sample_txt是否存在,如果不存在设置样方数据sampleQ为空;
步骤42:使用get_all_gdbs()函数获取所有地理数据库保存为gdbs,设置景观生态风险指数存储文件res_save,将标题信息写入该文件中;
步骤43:使用for循环遍历地理数据库gdbs,在循环体中,使用arcpy.da.Walk()函数读取当前地理数据库的多边形要素,返回包含路径、目录名和文件名等数据集合的walk,紧接着,使用for循环遍历walk获取要素文件名file_names;
步骤44:使用for循环遍历file_names,在当前循环体内,使用arcpy.da.SearchCursor()函数读取当前要素的属性表,并更新到data中;校验当前data是否为空,如果为空,跳过该循环;
步骤45:紧接着,使用calc_classArea_patchNum()函数生成类型数据和斑块数据,并分别写入类型文件和斑块文件;
步骤46:紧接着,使用calc_eri()函数计算景观生态风险指数,使用eri_output()函数输出各分量指数,最后将分量指数结果写入分量指数文件,将最终的景观生态风险指数结果追加入res_save文件中。