还是用Python做ArcGIS的二次开发舒服。
# 序
怎么在 ArcGIS 中操作数据,就怎么在 Python 中输入命令。本贴记录一些基础操作。
# 创建要素类
此处以地理数据库作为工作空间举例。使用 CreateFeatureclass_management() 方法进行要素类的创建。
import arcpy
workspace = r'C:\create_feature.gdb'
arcpy.CreateFeatureclass_management(workspace, 'point_feature', 'point', spatial_reference='WGS 1984 UTM Zone 18N')
创建好要素类之后,我们需要给它添加一些字段,不同字段存储空间数据不同的属性信息。
而操作要素类或表格,需要用到 AddField_management() 方法,或者 arcpy.management.AddField() 方法,帮助文档提供了两个方法。
arcpy.management.AddField(in_table, field_name, field_type, {field_precision}, {field_scale}, {field_length}, {field_alias}, {field_is_nullable}, {field_is_required}, {field_domain})
arcpy.AddField_management(in_table, field_name, field_type, {field_precision}, {field_scale}, {field_length}, {field_alias}, {field_is_nullable}, {field_is_required}, {field_domain})
参数参考帮助文档。
import arcpy
arcpy.env.workspace = r'C:\add_field.gdb'
workspace = arcpy.env.workspace
arcpy.AddField_management('point_feature', 'abc', 'TEXT')
如果要添加多个字段,则需使用到 arcpy.management.AddFields() 或 arcpy.AddFields_management() 方法。
arcpy.management.AddFields(
'school',
[['school_name', 'TEXT', 'Name', 255, 'Hello world', ''],
['street_number', 'LONG', 'Street Number', None, 35, 'StreetNumDomain'],
['year_start', 'DATE', 'Year Start', None, '2017-08-09 16:05:07', '']])
arcpy.AddFields_management(
'school',
[['school_name', 'TEXT', 'Name', 255, 'Hello world', ''],
['street_number', 'LONG', 'Street Number', None, 35, 'StreetNumDomain'],
['year_start', 'DATE', 'Year Start', None, '2017-08-09 16:05:07', '']])
参数参考帮助文档。
字段创建完成后可以为要素类里创建要素,这里以点要素举例。
在创建要素时,可以同时填充各字段的属性值。创建要素需要用 InsertCursor 类,它不仅可在要素类或表上建立写入游标,还可以添加新行并且赋予属性值。
arcpy.da.InsertCursor (in_table, field_names, datum_transformation)
in_table参数填入要素类、图层、表或表视图的名称。field_names填入字段名称列表
字段名称列表还可以是特殊的一些字段,如要素的质心坐标(SHAPE@XY)等。
示例1:使用 InsertCursor 在表中插入新行。
import arcpy
import datetime
# Create an insert cursor for a table specifying the fields that will
# have values provided
fields = ['rowid', 'distance', 'CFCC', 'DateInsp']
cursor = arcpy.da.InsertCursor('D:/data/base.gdb/roads_maint', fields)
# Create 25 new rows. Set default values on distance and CFCC code
for x in range(0, 25):
cursor.insertRow((x, 100, 'A10', datetime.datetime.now()))
# Delete cursor object
del cursor
示例2:使用 InsertCursor 和SHAPE@XY令牌将点要素添加到点要素类中。
import arcpy
# A list of values that will be used to construct new rows
row_values = [('Anderson', (1409934.4442000017, 1076766.8192000017)),
('Andrews', (752000.2489000037, 1128929.8114))]
# Open an InsertCursor
cursor = arcpy.da.InsertCursor('C:/data/texas.gdb/counties',
['NAME', 'SHAPE@XY'])
# Insert new rows that include the county name and a x,y coordinate
# pair that represents the county center
for row in row_values:
cursor.insertRow(row)
# Delete cursor object
del cursor
示例3:使用 InsertCursor 和SHAPE@令牌添加一个使用几何对象的新要素。
import arcpy
# Create a polyline geometry
array = arcpy.Array([arcpy.Point(459111.6681, 5010433.1285),
arcpy.Point(472516.3818, 5001431.0808),
arcpy.Point(477710.8185, 4986587.1063)])
polyline = arcpy.Polyline(array)
# Open an InsertCursor and insert the new geometry
cursor = arcpy.da.InsertCursor('C:/data/texas.gdb/counties', ['SHAPE@'])
cursor.insertRow([polyline])
# Delete cursor object
del cursor
参数参考帮助文档。
# 获取栅格属性类
以 TIFF 文件举例,通过该方法获取栅格数据的属性,如最大值、最小值、标准差、平均值、唯一值等。
img_path = './data/1.tif'
rstr_rslt = arcpy.GetRasterProperties_management(img_path, 'MEAN')
mean_value = rstr_rslt.getOutput(0)