利用Python實現Arcgis批量差分(交集取反)——下

對批量差分代碼進行以下改進:

  • 將較長的城市名字典另存並引用,增強代碼整潔度

 

#coding = UTF-8

city_names={#配合arcpy包使用python2.7,注意語法
u'東莞':'DONGGUAN',
u'成都':'CHENGDU',
u'揚州':'YANGZHOU',
u'海口':'HAIKOU',
u'北京':'BEIJING'
}

##city_dict2 = dict(zip(city_names.values(), city_names.keys()))
##print(city_names.keys())
##print(list(city_names.keys()))
  • Debug——字典錯誤引用ERROR

正確方式是for key in dict: 或for key,value in dict.items():

代碼一日不寫邊生疏,需要勤於使用。

  • Debug——try-except語句中try內容執行成功卻報except錯誤

 一切竟然只是因爲try-except語句塊前多了一行,務必認真仔細!還應先從懷疑自身開始,認真閱讀每一行!

雖是小問題,但更值得記錄!

 

完善後的代碼:

#coding = utf-8
import arcpy
import os

from City_Dictionary_u5 import city_names#城市字典
#print city_names

#Workspace
inWorkspace = r'D:\19Q4M2\BACK\19Q4G2_BACK'
updateWorkspace = r'D:\19Q4M2\BACK\19Q4M2_BACK_SUBMIT'
outWorkspace = r'D:\19Q4M2\BACK\19Q4M2_BACK_SYMDIFF'
VERSION = '19Q4M2'


back_dict = {u'綠地':'GREENURBAN',u'水系':'WATER'}

num_ok = 0
num_fail = 0
for city_c in city_names:
    #print city_c
    cnt = 0 #計數器
    city = city_names[city_c].upper()
    
    for key in back_dict:
        inFeatures = inWorkspace + '\\' + city_c + '_' + back_dict[key] + '.shp'
        #print inFeatures
        updateFeatures = updateWorkspace + '\\' + city + '_' + back_dict[key] + '_' + VERSION + '.shp' 
        #print updateFeatures
        outFeatureClass = os.path.join(outWorkspace ,VERSION + '_' + city + '_' + back_dict[key] + '_SYMDIFF.shp')
        #print outFeatureClass
        clusterTolerance = ".0001 Meters"

        # Execute SymDiff 注意差分輸入和更新數據必須座標一致!
        try:
            arcpy.SymDiff_analysis(inFeatures, updateFeatures, outFeatureClass, "ALL", clusterTolerance)
            #cnt += 1
            num_ok += 1
            print(city + ' ' + back_dict[key] + ' success!')
        except:
            print(city + ' ' + back_dict[key] + ' fail! Please Confirm!')
            num_fail += 1
##    if cnt == 2:
##        num_ok += 1
        
print(u'All done! {0} symdiff success! {1} symdiff fail! Please Confirm!'.format(num_ok,num_fail))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章