2014-03-04 45 views
0

我想創建和計算稱爲分數在屬性表中的字段。分數取決於其他兩個字段,寬度和類別。寬度包含整數值,類別包含文本。分數字段應根據這兩個字段的值分配多個點。Python的ArcGIS的 - 計算領域與文本字段作爲參數

我可以寫一個Python腳本賦值基於寬度的數值得分。但是,一旦我嘗試添加類別作爲參數,我不斷收到錯誤消息,說參數無效。

下面的代碼工作(寬只):

expression = "getClass(float(!Width!))" 
    codeblock = """def getClass(wd): 
     if wd<=450: 
      return 1 
     elif wd>450 and wd<900: 
      return 2 
     else: 
      return 3""" 
arcpy.AddField_management("featurelayer", "Score", "SHORT") 

,此代碼包含類別作爲參數並不起作用:

expression = "getClass(!Width!,!Category!)" 
codeblock = """def getClass(wd,cat): 
    if wd<=35: 
     return 1 
    elif wd<90 and cat=='RED': 
     return 2 
    else: 
     return 3""" 

arcpy.AddField_management("featurelayer", "Score", "SHORT") 

謝謝!

***我曾嘗試在第二代碼轉換的兩個參數 - 我試過類別兩個浮動(),以及STR(),因爲它是一個文本字段。無論是一個工作,錯誤消息不是很具體:「未能執行的getClass()」

***類別字段是完全填充(無論是「紅」或「藍」)

+1

我注意到表達原本轉換爲float()。是否將該功能添加到!寬度!和!類別!在新代碼中有什麼影響? –

+0

是否填寫了所有類別記錄? – Hotpepper

+0

感謝您的建議。所有類別記錄都被填充。我嘗試將float()添加到width和str()到類別(因爲它是文本)。那也沒用。 – Tessa

回答

0

使用表達式和代碼塊方法在ArcMap的字段計算器中是必需的,但在編寫Python腳本時不需要。

Try an UpdateCursor instead.它更容易閱讀,並趨向於更易於調試結果。

arcpy.AddField_management("featurelayer", "Score", "SHORT") 

updateFields = ["Width", "Category", "Score"] 

with arcpy.da.UpdateCursor("featurelayer", updateFields) as cursor: 
    for row in cursor: 
     if row[0] <= 35: 
      row[2] = 1 
     elif row[0] < 90 and row[1] == 'RED': 
      row[2] = 2 
     else: 
      row[2] = 3 
     cursor.updateRow(row)