ArcPy指令碼檢查向量資料XY變更記錄

2022-06-15 17:18:08 字數 3922 閱讀 4642

功能需求:每次向量資料迭代會有x、y(經度、緯度)資訊變更,把這些變更的資訊檢查並提取出來。

分析思路:一、傳統處理辦法:利用要素屬性表關聯,新資料id連線舊資料id,比較新舊xy是否一致,新增字段用來記錄新舊xy的比較結果,篩選出不一致的記錄。

1.新舊表連線字段,用join field (data management),工具箱中--資料管理工具--連線--連線字段

2.對連線後的表新增字段,用add field (data management),工具箱中--資料管理工具--欄位--新增字段

3.對新增的字段進行計算,用calculate field (data management),工具箱中--資料管理工具--欄位--計算字段

4.對計算後的xy進行篩選,用select (analysis),工具箱中--分析工具--提取分析--篩選

二、利用以上思路邏輯可以用arcgis模型構建器,建立模型工具處理:

大致構建模型草圖

三、利用模型處理邏輯思路,轉換為python指令碼,把變更記錄寫入csv中

1

#-*- coding: gbk -*-

2import

arcpy , os , csv

34 in_new =arcpy.getparameterastext(0)

5 in_old = arcpy.getparameterastext(1)

6 output = arcpy.getparameterastext(2)78

defxychangecheck(in_new,in_old,output):

9 fcnew = os.path.join(output,"

copy.shp")

10 filename =os.path.basename(in_new)

11print str(filename[0:-4])

1213 xycheck = "

xychange_

" +filename

14 ckjg =os.path.join(output,xycheck)

15print arcpy.addmessage("

1- 複製要素...")

16 arcpy.copyfeatures_management(in_new, fcnew, "", "

0", "

0", "0"

)17 arcpy.joinfield_management(fcnew, "

admincode

", in_old, "

admincode

", "")18

print arcpy.addmessage("

2- 新增欄位cx...")

19 arcpy.addfield_management(fcnew, "

cx", "

short

", "", "", "", "", "

nullable

", "

non_required

", "")20

print arcpy.addmessage("

3- 新增欄位cy...")

21 arcpy.addfield_management(fcnew, "

cy", "

short

", "", "", "", "", "

nullable

", "

non_required

", "")22

print arcpy.addmessage("

4- 計算欄位cx...")

23 arcpy.calculatefield_management(fcnew, "

cx", "

js( !x! , !x_1! )

", "

python_9.3

", "

def js(a,b):\\n if(a==b):return 1\\n else: return 0")

24print arcpy.addmessage("

5- 計算欄位cy...")

25 arcpy.calculatefield_management(fcnew, "

cy", "

js( !y! , !y_1! )

", "

python_9.3

", "

def js(a,b):\\n if(a==b):return 1\\n else: return 0")

26print arcpy.addmessage("

6- 字段篩選...")

27 arcpy.select_analysis(fcnew, ckjg, "

cx = 0 or cy = 0")

28print arcpy.addmessage("

7- 刪除要素...")

29arcpy.delete_management(fcnew)

30print arcpy.addmessage("

8- 處理完成...\n以下是變更記錄:")

3132

#讀取錯誤要素游標,寫入csv檔案

33 cursor = arcpy.da.searchcursor(ckjg, ["

admin_code

", "

name

", "

x", "y"

])34 i = 1

35for row in

cursor:

3637 ck = str(i) +"

- "+ str(row[0])+"

,"+str(row[1])+"

,"+str(row[2])+"

,"+str(row[3])

38arcpy.addmessage(ck)

39 flist = str(i)+"

,"+ str(row[0])+"

,"+str(row[1])+"

,"+str(row[2])+"

,"+str(row[3])40#

print flist

4142 name = str(filename[0:-4]) + "

_xy.csv

"43 csvpath =os.path.join(output, name)

44 path =csvpath

45 with open(path, 'ab'

) as f:

46 csv_write =csv.writer(f)

47 csv_write.writerow([flist.decode("

utf-8

")])

48 i += 1

4953

54xychangecheck(in_new,in_old,output)

5556

print arcpy.getmessages()

Shell Scripts 指令碼檢查

shell script指令碼檢查 sh nvx scripts.sh 選項與引數 n 不執行script,僅查詢語法的問題 v 在執行script前,先將scripts的內容輸出到螢幕上 x 將使用到的script內容顯示到螢幕上,這是很有用的引數 shell 裡面條件控制語句 case結構條件句...

arcpy指令碼獲得或返回模型引數

在arcgis中構建模型時,我們有時會用到arcpy指令碼,此時可能需要從模型中將引數傳遞給指令碼,以及指令碼執行完畢後將返回值傳遞給模型,在這裡我們就需要用到arcpy提供的兩個函式來實現這一功能。index是指定引數的下標,從0開始。返回值是指定引數的物件。arcpy.getparametera...

解決ArcPy指令碼工具中文亂碼問題

arcpy是乙個很香的地理空間資料庫處理模組,但它必須依賴arcgis和python環境,由於常用的arcgis版本預設支援的是python2.7,它對中文支援並不好,因此,編碼問題是入門時必須解決的問題。這是因為 中包含了中文,而編碼不能正確識別,以至於最初想到的解決方案是全寫英文注釋和字串。通過...