功能需求:每次向量資料迭代會有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,它對中文支援並不好,因此,編碼問題是入門時必須解決的問題。這是因為 中包含了中文,而編碼不能正確識別,以至於最初想到的解決方案是全寫英文注釋和字串。通過...