標籤:join 縮小 pat 問題 append text glob lis except
前言
前一段時間,同事拿來的資料範圍太大,用不了那麼多(只需要一個鄉鎮的,結果拿來區縣的),太多了載入也是問題。所以就讓我給處理下。
由於檔案較多,手動裁剪的話,我一個一個用ArcGIS工具箱中的工具進行裁剪,總體下來用了3個小時左右。後面由於需要再次縮小範圍,這次再一個一個手動的話那就太坑了。我想到可以用Python寫指令碼來批量處理。
本文
在安裝ArcGIS軟體的時候是預設安裝了Python的環境的,並且安裝了arcpy庫。但是,這個Python是2.7的,我以前學習的是用Python3.X的,我本來想著直接用3.X,但是在“import arcpy”的地方一直有問題,找了一些方法還是不行,最後只能用2.7的了。
下面是批量裁剪的 Python 指令碼:
import arcpyimport globimport os arcpy.CheckOutExtension(‘Spatial‘) # 指定裁剪前的目錄inws = r"D:\PythonClip\oldData" # 指定裁剪後的存放目錄outws = r"D:\PythonClip\Newdata" #指定shp範圍邊界檔案,即目的地區域的邊界mask = r"D:\PythonClip\panhuo.shp"cluster_tolerance="0.0000001 DecimalDegrees" #利用glob包,將inws下的所有shp檔案讀存放到shps 中shps = glob.glob(os.path.join(inws, "*.shp")) #迴圈shps 中的所有影像,進行按掩模提取操作for shp in shps: outname = os.path.join(outws, os.path.basename(shp)) #指定輸出檔案的命名方式 print outname try: arcpy.Clip_analysis(shp,mask,outname) except Exception as e: print e.message
由於檔案較多,所以是迴圈指定目錄下的shp檔案,一個一個裁剪並輸出儲存。
在裁剪後,又需要把檔案的X/Y座標添加到屬性列表裡。我想這個也用指令碼來寫吧,好沒問題下面也順利完成:
import arcpydef CalcXY(): try: print "Set Env" arcpy.env.workspace = "D:\\PythonClip\\Newdata" print "Start AddField And Calculate centroid" shps = arcpy.ListFiles("*.shp") for shp in shps: fieldList = arcpy.ListFields(shp,"","Double") fieldNames = [] for field in fieldList: fieldNames.append(field.name) if "X" not in fieldNames: arcpy.AddField_management(shp,"X","DOUBLE",20,4) arcpy.AddField_management(shp,"Y","DOUBLE",20,4) arcpy.CalculateField_management(shp, "X", "!SHAPE.CENTROID.X!","PYTHON_9.3") arcpy.CalculateField_management(shp, "Y", "!SHAPE.CENTROID.Y!","PYTHON_9.3") print shp print "AddField And Calculate centroid End" except Exception as e: print e.message CalcXY()CalcXY()
以上是添加X、Y的代碼。
這些簡單的指令碼,在ArcGIS的協助文檔中都可以找到,而且每一個都有完整的例子。有一些Python基礎的都可以實現。
ArcGIS + Python 批量裁剪、添加X/Y座標指令碼