ArcGIS + Python 批量裁剪、添加X/Y坐標腳本


前言

前一段時間,同事拿來的數據范圍太大,用不了那么多(只需要一個鄉鎮的,結果拿來區縣的),太多了加載也是問題。所以就讓我給處理下。

由於文件較多,手動裁剪的話,我一個一個用ArcGIS工具箱中的工具進行裁剪,總體下來用了3個小時左右。后面由於需要再次縮小范圍,這次再一個一個手動的話那就太坑了。我想到可以用Python寫腳本來批量處理。

 

正文

在安裝ArcGIS軟件的時候是默認安裝了Python的環境的,並且安裝了arcpy庫。但是,這個Python是2.7的,我以前學習的是用Python3.X的,我本來想着直接用3.X,但是在“import arcpy”的地方一直有問題,找了一些方法還是不行,最后只能用2.7的了。

下面是批量裁剪的 Python 腳本:

import arcpy
import glob
import 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 arcpy

def 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基礎的都可以實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM