
为了计算生态系统服务的重要性一般来说会使用累计值来进行计算。比如说累计的前50%值的像元为极重要区而50-75是一般重要。重要性说明极重要从大到小排序累计50的值重要从大到小排序累计50-75的值中等重要从 90%到 75%该段的栅格值占总量 15%的值归类为中等重要区域一般比 90%小的值即占总量 10%的值全部归类为一般区域。一、主要部分**预先处理**需要每个栅格数据都有属性表没有属性表需要创造属性表另外还需要新建字段ValueCount和percentage这个字段前者为长整型后者为双精度。下面的代码放在代码框中。# 全局累加器cum0.0total0.0# 在计算前先一次性求 total第一次执行时 total 仍然为 0因此需要初始化importarcpy# 获取当前图层使用 !SHAPE! 触发则自动是当前表tblarcpy.Describe(arcpy.GetParameterAsText(0)).catalogPathifarcpy.GetParameterAsText(0)elseNone# 兼容 ArcMap强制使用当前表名iftbl is None: tblr%s% arcpy.Describe(RWEQ_xh_ly.tif).catalogPath# 这块需要将 RWEQ_xh_ly.tif# 只在 total 还没算的时候执行一次iftotal0: rowsarcpy.SearchCursor(tbl)forrinrows: totalr.ValueCount# ValueCount是要算的字段def getCumProp(value): global cum cumvaluereturncum / total在想算比例的字段中计算这个值。getCumProp(!ValueCount!)**后续分级**上述的方法是从小到大的因而分析需要按照相反的方式来划分。0.1、0.25、0.5、1二、探究部分这里面其实有个问题就是这个是基于什么排序的我探索了一下它并没有指定在goble环境下它自动依据value进行降序排序不管你后面在属性表中进行再排序其结果都是一样的。具体可以用一个简单的例子来说明。可以用下面的一个例子来进行说明。cum0.0def cumValue(v): global cum cumvreturncumcumValue(!ValueCount!)此外我还探索了下面两行代码为什么需要这么写。其实下面就是获得文件的路径。下面的第一行代码本来就是想获取它当前的路径的但是在arcmap里面是不成功的。# 获取当前图层使用 !SHAPE! 触发则自动是当前表tblarcpy.Describe(arcpy.GetParameterAsText(0)).catalogPathifarcpy.GetParameterAsText(0)elseNone# 兼容 ArcMap强制使用当前表名iftbl is None: tblr%s% arcpy.Describe(RWEQ_xh_ly.tif).catalogPath# 这块需要将 RWEQ_xh_ly.tif进一步探索SearchCursor这个功能感觉没有啥具体的用处能算xy和对应的面积。importarcpy fcc:/data/base.gdb/well# For each row, print the Object ID field, and use the SHAPEAREA# token to access geometry propertieswitharcpy.da.SearchCursor(fc,[OID,SHAPEAREA])ascursor:forrowincursor:print(fFeature{row[0]}has an area of{row[1]})进一步探索和Describe的相关属性# 1.使用键值访问特定属性。importarcpy pathC:\\Data\\Venice.gdb\\VeniceStructuresdescarcpy.da.Describe(path)field_names[field.nameforfieldindesc[fields]]ifYEAR_BUILTnotinfield_names:arcpy.management.AddField(path,YEAR_BUILT,SHORT)# 2.显示返回的 Describe 字典以查看所有可用属性。importarcpyfrompprintimportpprint pathC:\\Data\\Venice.gdb\\VeniceStructuresdescarcpy.da.Describe(path)pprint(desc)需要进一步探索的问题如何进行给定的字段进行排序这个很重要又或者说当矢量的时候怎么处理呢