值進(jìn)行分級(jí))
為了計(jì)算生態(tài)系統(tǒng)服務(wù)的重要性一般來說會(huì)使用累計(jì)值來進(jìn)行計(jì)算。比如說累計(jì)的前50%值的像元為極重要區(qū)而50-75是一般重要。重要性說明極重要從大到小排序累計(jì)50的值重要從大到小排序累計(jì)50-75的值中等重要從 90%到 75%該段的柵格值占總量 15%的值歸類為中等重要區(qū)域一般比 90%小的值即占總量 10%的值全部歸類為一般區(qū)域。一、主要部分**預(yù)先處理**需要每個(gè)柵格數(shù)據(jù)都有屬性表沒有屬性表需要?jiǎng)?chuàng)造屬性表另外還需要新建字段ValueCount和percentage這個(gè)字段前者為長(zhǎng)整型后者為雙精度。下面的代碼放在代碼框中。# 全局累加器cum0.0total0.0# 在計(jì)算前先一次性求 total第一次執(zhí)行時(shí) total 仍然為 0因此需要初始化importarcpy# 獲取當(dāng)前圖層使用 !SHAPE! 觸發(fā)則自動(dòng)是當(dāng)前表tblarcpy.Describe(arcpy.GetParameterAsText(0)).catalogPathifarcpy.GetParameterAsText(0)elseNone# 兼容 ArcMap強(qiáng)制使用當(dāng)前表名iftbl is None: tblr%s% arcpy.Describe(RWEQ_xh_ly.tif).catalogPath# 這塊需要將 RWEQ_xh_ly.tif# 只在 total 還沒算的時(shí)候執(zhí)行一次iftotal0: rowsarcpy.SearchCursor(tbl)forrinrows: totalr.ValueCount# ValueCount是要算的字段def getCumProp(value): global cum cumvaluereturncum / total在想算比例的字段中計(jì)算這個(gè)值。getCumProp(!ValueCount!)**后續(xù)分級(jí)**上述的方法是從小到大的因而分析需要按照相反的方式來劃分。0.1、0.25、0.5、1二、探究部分這里面其實(shí)有個(gè)問題就是這個(gè)是基于什么排序的我探索了一下它并沒有指定在goble環(huán)境下它自動(dòng)依據(jù)value進(jìn)行降序排序不管你后面在屬性表中進(jìn)行再排序其結(jié)果都是一樣的。具體可以用一個(gè)簡(jiǎn)單的例子來說明??梢杂孟旅娴囊粋€(gè)例子來進(jìn)行說明。cum0.0def cumValue(v): global cum cumvreturncumcumValue(!ValueCount!)此外我還探索了下面兩行代碼為什么需要這么寫。其實(shí)下面就是獲得文件的路徑。下面的第一行代碼本來就是想獲取它當(dāng)前的路徑的但是在arcmap里面是不成功的。# 獲取當(dāng)前圖層使用 !SHAPE! 觸發(fā)則自動(dòng)是當(dāng)前表tblarcpy.Describe(arcpy.GetParameterAsText(0)).catalogPathifarcpy.GetParameterAsText(0)elseNone# 兼容 ArcMap強(qiáng)制使用當(dāng)前表名iftbl is None: tblr%s% arcpy.Describe(RWEQ_xh_ly.tif).catalogPath# 這塊需要將 RWEQ_xh_ly.tif進(jìn)一步探索SearchCursor這個(gè)功能感覺沒有啥具體的用處能算xy和對(duì)應(yīng)的面積。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]})進(jìn)一步探索和Describe的相關(guān)屬性# 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)需要進(jìn)一步探索的問題如何進(jìn)行給定的字段進(jìn)行排序這個(gè)很重要又或者說當(dāng)矢量的時(shí)候怎么處理呢