基本農田碎圖斑自動合併:
import arcgisscripting, sys, string, os
gp = arcgisscripting.create(9.3)
myWorkspace = "D:/My Documents/New Personal Geodatabase.mdb/dataset"
gp.Workspace = myWorkspace
# Put in error trapping in case an error occurs when running tool
try:
# Set the workspace (to avoid having to type in the full path to the data every time)
gp.CopyFeatures("GHJBNTTZ", "GHJBNTTZ_Copy")
myFeatures = "GHJBNTTZ_Copy"
#gp.OverWriteOutput = 1
i = 0
x = 0
fieldname = "BSM"
# Process: Make feature layer
gp.MakeFeatureLayer_management(myFeatures, "bigparcels", "[shape_Area] >= 100")
gp.MakeFeatureLayer_management(myFeatures, "smallparcels", "[shape_Area] < 100")
rows = gp.SearchCursor("smallparcels")
row = rows.Next()
L = []
while row:
#if row.GetValue("shape_Area") < 100:
featsmall = row.shape
gp.SelectLayerByLocation("bigparcels", "SHARE_A_LINE_SEGMENT_WITH", featsmall, "", "NEW_SELECTION")
## if 'brow' in dir():
## del brow
## if 'brows' in dir():
## del brows
brows = gp.UpdateCursor("bigparcels", "", "", "", "shape_Area D")
brow = brows.Next()
## while brow:
if brow <> None and row.GetValue("TZLXDM") == brow.GetValue("TZLXDM") and row.GetValue("JQNDL") == brow.GetValue("JQNDL") and row.GetValue("XZQDM") == brow.GetValue("XZQDM"):
brow.TZMJ = row.TZMJ + brow.TZMJ
brows.UpdateRow(brow)
value = row.GetValue("BSM")
if value not in L:
L.append(value)
i = i + 1
row = rows.Next()
## break
## else:
## brow = brows.Next()
del brow, brows
## 這是一個恥辱!!!恥辱啊,沒有Update這個方法。你不知道報錯麼 ××××brows.Update(brow)×××
del row, rows
if ' ' in L:
L.remove(' ')
print i
gp.SelectLayerByAttribute("bigparcels", "CLEAR_SELECTION")
gp.CopyFeatures("bigparcels", "Success")
gp.Append_management("smallparcels", "Success")
gp.MakeFeatureLayer_management("Success","mergedlayer")
##
for item in L:
query = "[" + fieldname + "]" + " = %d" % L[x]
gp.SelectLayerByAttribute("mergedlayer", "ADD_TO_SELECTION", query)
x = x + 1
print x
gp.Eliminate_management("mergedlayer", myFeatures + "_My", "AREA")
gp.delete_management("Success")
gp.delete_management("GHJBNTTZ_Copy")
except:
# If an error occurred, print the message to the screen
print gp.GetMessages()
腳本格式:
Arcgispython腳本中,需要保存爲.py格式之後,才能正常運行。
在引號中使用變量時,%d代表整型,%s代表字符型,query = "[" + fieldname+"]" + " = %d" % L[x],類似C語言。
腳本函數:
有些gp工具只能操作featureclass,有些只能操作layer(或臨時圖層)類型,使用時要小心。
MakeFeatureLayer_management這個工具可以將一個featureclass映射到layer,是一種臨時圖層,但是如果有cursor對象指向這個臨時圖層,比如UpdateCursor,當這個臨時圖層的屬性表改變時,對應的featureclass的屬性也會改變。所以使用時要格外注意。最好先將圖層複製一下。
Cursor對象在建立時,如果圖層中有些對象被選中了,那麼cursor對象只會在選中的記錄間遊走。
Cursor對象一次指向一行,rows=gp.SearchCursor("smallparcels"),row=rows.Next(),像這樣繼續往下走,對於UpdateCursor,要使用UpdateRow才能完成更新。