Arcgis:Python

基本農田碎圖斑自動合併:

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才能完成更新。

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