arcgis python 圖形有關操作


 

計算字段 (數據管理)

ArcGIS 10

匯總

為要素類、要素圖層或柵格目錄計算字段的值。

查看計算字段工具的使用示例

用法

  • Python 表達式可通過 幾何對象中的屬性(typeextentcentroidfirstPointlastPointarealengthisMultipartpartCount)進行創建。

    !shape.area!
  • Python 表達式可以使用具有面積或線性單位的幾何 arealength 屬性將值轉換為不同的測量單位(例如 !shape.length@kilometers!)。如果數據存儲在地理坐標系中且具有線性單位(例如英里),則使用測地線算法計算長度。在地理數據中使用面積單位會產生不正確的結果,這是由於沿 globe 的十進制度並不一致。

    • 面積測量單位關鍵字:
      • 英畝 | 公畝 | 公頃 | 平方厘米 | 平方分米 | 平方英寸 | 平方英尺 | 平方千米 | 平方米 | 平方英里 | 平方毫米 | 平方碼 | 平方地圖單位 | 未知
    • 線性測量單位關鍵字:
      • 厘米 | 十進制度 | 分米 | 英尺 | 英寸 | 千米 | 米 | 英里 | 毫米 | 海里 | 磅 | 未知 | 碼
  • 在工具對話框中,可將表達式直接輸入到表達式參數中,或者使用“字段計算器”以交互方式構建表達式。

  • 使用所選要素集(如從創建要素圖層按屬性選擇圖層內的查詢中創建的要素集)時,此工具將只更新所選的記錄。

  • 每次操作僅能對一個字段應用計算。

  • 現有字段值將被覆蓋。如果想要保留原始字段值,應創建輸入表副本

  • 對於 Python 計算,必須在字段名稱兩旁添加驚嘆號(!字段名!)。

    對於 VB 計算,字段名稱必須用方括號括起([字段名])。

  • 計算文本或字符字段的字符串時,在對話框中,必須對字符串添加雙引號("字符串"),而在腳本中,還必須對加雙引號的字符串添加單引號('"字符串"')。

  • 此工具也可用於更新字符項。應對使用字符串的表達式添加單引號(例如 [CHARITEM] = ‘新字符串')。但是,如果字符串已包含單引號,則要對該字符串添加雙引號,例如 [CHARITEM] = "類型'A'"

  • 要計算數值字段,可在表達式參數中輸入數值;值的兩旁無需加引號。

  • 如果已指定 Python 表達式,則此工具支持 arcgis.rand() 函數。已為 ArcGIS 工具創建 arcgis.rand() 函數,不應將此函數與 Python Rand() 函數相混淆。arcgis.rand() 函數的可用分布的語法在隨機值的分布語法中進行介紹。

  • 表達式與代碼塊會相互連接。代碼塊必須返回與表達式的關聯;代碼塊的結果應傳入到表達式中。

  • 代碼塊參數可用於創建復雜表達式。您可以在對話框中直接輸入代碼塊,或在腳本中將代碼塊作為連續字符串輸入。

  • Python 數學模塊及格式可供代碼塊參數使用。您可以導入附加模塊。數學模塊可提供數論函數與表達函數、冪函數與對數函數、三角函數、角度轉換函數、雙曲函數以及數學常數。要了解更多有關數學模塊的內容,請參閱 Python 的幫助。

  • 保存的 ArcGIS 先前版本的 VB .cal 文件可以直接使用或者只需做少量修改后即可使用。如果擁有使用 ArcObjects 的過去版本的 VBA 代碼,則計算需經過修改后才能用於 10.0。

  • 計算連接數據時,您無法直接計算連接列。然而,您可以直接計算源表的列。要計算連接數據,必須先將連接表或連接圖層添加至 ArcMap。然后可以分別對此數據執行計算。這些更改將反映在連接列中。

  • 計算字段示例

語法

CalculateField_management (in_table, field, expression, {expression_type}, {code_block})
參數 說明 數據類型
in_table

此表包含將通過新的計算進行更新的字段。

Mosaic Layer; Raster Catalog Layer; Raster Layer; Table View
field

將通過新的計算進行更新的字段。

Field
expression

使用簡單計算表達式創建的值將用於填充所選行。

SQL Expression
expression_type
(可選)

指定要使用的表達式的類型。

  • VB表達式將使用標准 VB 格式編寫。這是默認設置。
  • PYTHON表達式將使用標准 Python 格式編寫。地理處理器方法和屬性的使用與創建 9.2 版地理處理器相同。
  • PYTHON_9.3表達式將使用標准 Python 格式編寫。地理處理器方法和屬性的使用與創建 9.3 版地理處理器相同。
String
code_block
(可選)

允許為復雜表達式輸入代碼塊。

String

代碼示例

CalculateField 示例(Python 窗口)

以下 Python 窗口腳本演示了如何在立即模式下使用 CalculateField 函數。

import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.AddField_management("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.CalculateField_management("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON")
CalculateField 示例:計算質心

使用 CalculateField 將質心值分配給新字段。

# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields

 
# Import system modules
import arcpy
from arcpy import env

try: 
    # Set environment settings
    env.workspace = "C:/data/airport.gdb"
 
    # Set local variables
    inFeatures = "parcels"
    fieldName1 = "xCentroid"
    fieldName2 = "yCentroid"
    fieldPrecision = 18
    fieldScale = 11
    # Expressions are calculated using the Shape Field's geometry property
    expression1 = "float(!SHAPE.CENTROID!.split()[0])"
    expression2 = "float(!SHAPE.CENTROID!.split()[1])"
 
    # Execute AddField
    arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                              fieldPrecision, fieldScale)
    arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                              fieldPrecision, fieldScale)
 
    # Execute CalculateField 
    arcpy.CalculateField_management(inFeatures, fieldName1, expression1,
                                    "PYTHON")
    arcpy.CalculateField_management(inFeatures, fieldName2, expression2,
                                    "PYTHON")
except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message

CalculateField 示例:計算范圍

使用具有代碼塊的 CalculateField 計算基於范圍的值。

# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
#  based on ranges

 
# Import system modules
import arcpy
from arcpy import env
 
# Set environment settings
env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"
codeblock = """def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON", 
                                codeblock)
CalculateField 示例:計算隨機值

使用 CalculateField 將隨機值分配給新字段。

# Name: CalculateField_Random.py
# Description: Use CalculateField to assign random values to a new field
 
  
# Import system modules
import arcpy
from arcpy import env
 
# Set environment settings
env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "arcgis.rand('Integer 0 10')"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON")

相關主題


 

來自幫助


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM