ArcPy常用基础功能
? 先來一段簡單的ArcPy腳本:
# -*-coding:utf-8-*- import arcpytry:source_path_name = r"F:/GIS測試數據/測試.gdb"source_name = "DLTB"target_name = "Target_copy"arcpy.env.workspace = source_path_name# 覆蓋已存在數據arcpy.env.overwriteOutput = Trueprint "Copy {0} to {1}".format(source_name, target_name)arcpy.Copy_management(source_name, target_name) except arcpy.ExecuteError:print arcpy.GetMessages() except Exception as e:print e.message1、環境變量設置(env)
1.1、設置當前工作空間,將指定的工作空間用作地理處理工具輸入和輸出的默認位置。
arcpy.env.workspace = r"F:/GIS測試數據/測試.gdb"1.2、覆蓋任何現有輸出。設置為?True?時,工具將執行并覆蓋輸出數據集。設置為?False?時,將不會覆蓋現有輸出,工具將返回錯誤。
arcpy.env.overwriteOutput = True1.3、設置XY容差
arcpy.env.XYTolerance = "0.01 meters"1.4、輸出去除M值
arcpy.env.outputMFlag = "Disabled"1.5、輸出去除Z值
arcpy.env.outputZFlag = "Disabled"2、列表函數
?2.1、ListDatasets:列出工作空間中的所有數據集。可針對數據集名稱和數據集類型指定搜索條件,從而限制返回的列表。
print "存在數據集 {0}".format(arcpy.ListDatasets('*'))2.2、ListFeatureClasses:列出工作空間中的要素類,受名稱、要素類型和可選要素數據集的限制。
print "存在要素類 {0}".format(arcpy.ListFeatureClasses(feature_type="Point"))2.3、ListTables:按名稱和表類型列出工作空間中的表
print "存在表 {0}".format(arcpy.ListTables())2.4、ListRasters:按名稱和柵格類型返回工作空間中的柵格列表。
print "存在柵格數據 {0}".format(arcpy.ListRasters())2.5、ListFields:列出指定數據集中的要素類、shapefile 或表中的字段。返回的列表可用針對名稱和字段類型的搜索條件進行限制,并將包含字段對象。
for field in arcpy.ListFields("F:/GIS測試數據/測試.gdb/DLTB"):print "{0} is a type of {1} with a length of {2}".format(field.name, field.type, field.length)3、屬性信息(Describe)
ftDesc = arcpy.Describe(source_name)3.1、獲取要素類屬性
print "要素類的要素類型 {0}".format(ftDesc.featureType) print "是否有Z值 {0}".format(ftDesc.hasZ) print "是否有M值 {0}".format(ftDesc.hasM) print "指示要素類是否具有空間索引 {0}".format(ftDesc.hasSpatialIndex) print "Shape 字段的名稱 {0}".format(ftDesc.shapeFieldName) print "幾何形狀類型 {0}".format(ftDesc.shapeType)3.2、數據集屬性
print "空間坐標系名稱 {0}".format(ftDesc.spatialReference.name)4、游標操作
4.1、查詢游標(SearchCursor):
? ? ? ? 從表中檢索的每一行都會作為一組字段值而返回。會按照提供給游標的 field_names 參數的相同順序返回這些值。游標的 fields 屬性也可用于確定字段值的順序。
with arcpy.da.SearchCursor(r"F:\GIS測試數據\測試.gdb\XZQ", ["OID@"]) as cursor:for row in cursor:print "OID:{0}".format(row[0])? ?通過以下方式獲取記錄數:?
# 方式一 count = len([feature[0] for feature in arcpy.da.SearchCursor(source_name, "OID@")]) # 方式二 count = int(arcpy.GetCount_management(source_name).getOutput(0))?4.2、更新游標(UpdateCursor)?
# 刪除地類編碼為0101的記錄 with arcpy.da.UpdateCursor(r'F:\GIS測試數據\測試.gdb\YBH', ['OID@'], "DLBM = '0101'") as cursor:for row in cursor:cursor.deleteRow() # 將面積值賦值給NEW_AREA with arcpy.da.UpdateCursor(r"F:\GIS測試數據\測試.gdb\XZQ", ["NEW_AREA", "SHAPE@AREA"]) as cursor:for row in cursor:row[0] = row[1]cursor.updateRow(row)4.3、插入游標(InsertRow)
cursor = arcpy.da.InsertCursor("c:/base/data.gdb/roads_lut", ["roadID", "distance"]) # Create 25 new rows. Set the initial row ID and distance values for i in range(0, 25):cursor.insertRow([i, 100]) del cursor5、令牌
令牌是字段的一種快捷訪問方式。常用令牌:
ObjectID字段的令牌:OID@ shape字段的令牌:SHAPE@ 要素質心的令牌:SHAPE@XY X、Y坐標的令牌:SHAPE@X、SHAPE@Y 坐標JSON字符串的令牌:SHAPE@JSON 面積和長度的令牌:SHAPE@AREA、SHAPE@LENGTH with arcpy.da.SearchCursor(r"F:\GIS測試數據\測試.gdb\XZQ",["OID@", "SHAPE@", "SHAPE@XY", "SHAPE@X", "SHAPE@Y", "SHAPE@AREA", "SHAPE@LENGTH","SHAPE@JSON"], "OBJECTID=1") as cursor:for row in cursor:print "OID:{0};Feature:{1};質心:{2};X坐標:{3};Y坐標:{4};面積:{5};長度:{6};" \"坐標JSON字符串:{7}".format(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7])轉載來自:https://www.jianshu.com/p/3355b6efc0d6
總結
以上是生活随笔為你收集整理的ArcPy常用基础功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中的会话控制器,php – cod
- 下一篇: 实验3 系统调用