转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/93305277
有段时间不接触,就容易忘记一些细节,就容易各种踩坑。特记录如下:
写入有两种方式:一种是先创建主体,然后向主体中添加。一种是一股脑儿添加到一个新的主体。第一种就是先创建一个主体如shp文件,再通过InsertCursor插入。第二种就是把几何的一个列表通过CopyFeatures_management一股脑儿输出到一个新的主体如shp文件中。
下面先谈第一种:
创建一个线要素类或线的shp并引用:
fc=arcpy.CreateFeatureclass_management(os.path.dirname(fc),os.path.basename(fc),"POLYLINE")
读取一个线要素类或线的shp并引用:
cursor=arcpy.da.SearchCursor(fc,['SHAPE@','OID@'])
上面的['SHAPE@','OID@']是个列表,这里是放置一些几何令牌,和字段属性的。字段属性必须和此要素类或shp的字段属性完全一样,不然会出错,几何令牌请参阅ArcGIS官方文档:https://pro.arcgis.com/zh-cn/pro-app/arcpy/get-started/reading-geometries.htm#ESRI_SECTION1_A32D35B769484AA0A235BB6BACA3C517
本文的这个,第一个是几何对象,第二个是要素唯一标码属性。若是其他属性,如自己添加的属性“county”,则为['SHAPE@','OID@','county']。此即:官方设定的后缀有@,自己设的没有。
插入、删除、更新类似。
下面示范,如何插入一个几何线到某个要素类或shp中。
import arcpy
#下面是现有的一个要素类或shp文件的路径
fc='C:\\temp\\geo.gdb/xianyou'
#下面构建一个线要素对象
coords_list = [[1, 123.1, 32.1],
[1, 123.5, 32.1],
[1, 123.5, 32.5],
[1, 123.1, 32.5],
[1, 123.1, 32.1],
[1, 123.2, 32.2],
[1, 123.3, 32.3],
[1, 123.2, 32.3],
[1, 123.2, 32.2]]
array=arcpy.Array()
for coords in coords_list:
array.add(arcpy.Point(coords[1],coords[2],ID=coords[0]))
pl=arcpy.Polyline(array)
#下面插入这个线要素对象
with arcpy.da.InsertCursor(fc,['SHAPE@']) as cursor:
cursor.insertRow([pl])
最后一行,若不注意,会踩坑的。报错如下:
这是因为,你插入的要和上面的列表一一对应。如倒数第二行中的是['SHAPE@'],则插入的也要是一个列表,这个列表只有一项内容,这项内容是几何对象。
有些细节可以参阅https://blog.csdn.net/dugushangliang/article/details/83861447
第二种可参考官方文档:
import arcpy
#坐标点序列
feature_info = [[[1, 2], [2, 4], [3, 7]],
[[6, 8], [5, 7], [7, 2], [9, 5]]]
#存放几何的列表
features = []
#创建几何并加入到几何列表中
for feature in feature_info:
features.append(
arcpy.Polyline(
arcpy.Array([arcpy.Point(*coords) for coords in feature])))
# 将几何列表中的几何一股脑儿输出到一个新的主体(本处是shp文件)
arcpy.CopyFeatures_management(features, "c:/geometry/polylines.shp")
独孤尚良dugushangliang——著