Arcpy读取写入线的几何和属性

转载请注明作者(独孤尚良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——著

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用arcpy读取属性表,可以使用arcpy.SearchCursor函数。首先,你需要指定要读取要素类或图层。然后,使用SearchCursor函数创建一个游标对象,该对象可以用于遍历要素类中的每一行。在循环中,你可以使用row.getValue("字段名")来获取每一行的属性值。下面是一个示例代码: ```python import arcpy # 指定要读取要素类或图层 zone = 'zone31' # 创建游标对象 rows = arcpy.SearchCursor(zone) # 遍历每一行并获取属性值 for row in rows: value = row.getValue("字段名") print(value) ``` 请注意,你需要将"字段名"替换为你要读取属性字段的名称。这样,你就可以使用arcpy读取属性表了。\[2\] #### 引用[.reference_title] - *1* [Arcpy要素字段属性获取并写入xls](https://blog.csdn.net/u014685432/article/details/127889046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [学习记录:在ArcGIS中利用arcpy获取属性内容](https://blog.csdn.net/weixin_46506178/article/details/122272780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值