(3)ArcPy:创建点线面要素及添加字段

使用ArcPy创建常用的要素文件时(shapefile),如、点、线面要素,其创建步骤基本相同。线、面要素与点要素创建的不同在于,点要素使用单个点坐标创建,线和面则是将一组点放入一个数组中,使用数组来创建线或者面。下面展示创建要素的基本步骤
均为在PyCharm中进行

## 创建要素的基本步骤:
# 1.输入数据
# 2.定义空间参考
# 3.确定创建要素的路径、名称
# 4.创建要素类
# 5.创建要素字段
# 6.创建游标
# 7.创建点,遍历所有数据
# 8.新建要素、新建行
# 9.将新建的行写入游标中

点、线、面要素的创建如上所述。下面展示点线面要素创建的python代码以及相应的解释:
1.点要素的创建

#coding:utf-8
import arcpy
points=[[113.12345,34.3654],[113.12365,34.65894],[113.12389,34.6547]]

sp=arcpy.SpatialReference(4326)
path="H:\pyStudy\data_points" #输出创建文件的路径
filename="testPoint.shp"      #所创建文件的名称
fc=arcpy.CreateFeatureclass_management(path,filename,"POINT","","","",sp) #创建要素类
arcpy.AddField_management(fc,"FIDX","TEXT",50) #创建字段,即属性表中的字段名
arcpy.AddField_management(fc,"X","TEXT",50)
arcpy.AddField_management(fc,"Y","TEXT",50)
cursor=arcpy.InsertCursor(fc) #创建游标

index=0
for pt in points:
    point=arcpy.Point()
    point.X=pt[0]
    point.Y=pt[1]
    row=cursor.newRow()
    row.shape=point
    row.FIDX=index #将字段数据写入行中
    row.X=pt[0]
    row.Y=pt[1]
    cursor.insertRow(row)
    index+=1
print "Finished!"
print "创建成功!"


##创建多点,即多个点为一条记录
pointArray=[
            [[113.12345,34.3654],[113.12365,34.65894],[113.12389,34.6547]],
            [[113.1235,34.3654],[113.12365,34.6894],[113.2389,34.6547]],
            [[113.12345,34.654],[113.365,34.6894],[113.9,34.6547]],
           ]
sp=arcpy.SpatialReference(4326)
path="H:\pyStudy\data_points"
filename="testMultiPoints"
fc=arcpy.CreateFeatureclass_management(path,filename,"MULTIPOINT","","","",sp)
arcpy.AddField_management(fc,"FIDn","TEXT",50)
cursor=arcpy.InsertCursor(fc)

index=0
for coord in pointArray:
    array=arcpy.Array()
    for pt in coord:
        point=arcpy.Point()
        point.X=pt[0]
        point.Y=pt[1]
        array.add(point)
    multipoint=arcpy.Multipoint(array)

    row=cursor.newRow()
    row.shape=multipoint
    row.FIDn=index
    cursor.insertRow(row)
    index+=1
print "创建多点完成!"#创建单点

2.线要素的创建

###创建线要素
polylinePts=[
            [[113.12345,34.3654],[113.12365,34.65894],[113.12389,34.6547]],
            [[113.1235,34.3654],[113.12365,34.6894],[113.2389,34.6547]],
            ] #每组有三个点,每组为一条线段
sp=arcpy.SpatialReference(4326)
path="H:\pyStudy\data_polylines"
filename="test_polylines.shp"
fc=arcpy.CreateFeatureclass_management(path,filename,"POLYLINE","","","",sp)
arcpy.AddField_management(fc,"polyline","TEXT",50)
cursor=arcpy.InsertCursor(fc)

for coord in polylinePts:
    array=arcpy.Array()
    for pt in coord:
        point=arcpy.Point()
        point.X=pt[0]
        point.Y=pt[1]
        array.add(point)
    polyline=arcpy.Polyline(array)
    row=cursor.newRow()
    row.shape=polyline
    row.polyline="***123"
    cursor.insertRow(row)
print "创建线要素完成!"

3.面要素的创建

###创建面要素
polygonPts=[
             [[113.12345,34.3654],[114.12365,34.65894],[113.12389,34.6547]],
             [[113.1235,34.3654],[113.12365,35.6894],[113.2389,34.6547]],
           ] #每组三个点,三个点组成一个面
sp=arcpy.SpatialReference(4326)
path="H:\pyStudy\data_polygon"
filename="test_polygons.shp"
fc=arcpy.CreateFeatureclass_management(path,filename,"POLYGON","","","",sp)
arcpy.AddField_management(fc,"Polygon","TEXT",50)
cursor=arcpy.InsertCursor(fc)

for coord in polygonPts:
    array = arcpy.Array()
    for pt in coord:
        point=arcpy.Point()
        point.X=pt[0]
        point.Y=pt[1]
        array.add(point)
    polygon=arcpy.Polygon(array)
    row=cursor.newRow()
    row.shape=polygon
    row.Polygon="Polygon"
    cursor.insertRow(row)
print "面要素创建完成!"
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用arcpy批量添加字段的方法如下: 首先,使用arcpy.ListFeatureClasses()函数获取要添加字段的矢量文件列表。 然后,使用for循环遍历每个文件,使用arcpy.AddField_management()函数为每个文件添加一个名称为name的字段。 在arcpy.AddField_management()函数中,将字段类型设置为"TEXT",字段长度设置为50。 最后,使用arcpy.CalculateField_management()函数为每个字段赋值为文件名称。 以下是示例代码: ``` import arcpy arcpy.env.workspace = r"E:\GEDIshuiku\shp" ListGEDI = arcpy.ListFeatureClasses() for i in ListGEDI: arcpy.AddField_management(i, "name", "TEXT", field_length=50) arcpy.CalculateField_management(i, field="name", expression=i\[9:22\], expression_type="VB", code_block="") ``` 这段代码会循环读取每一个矢量文件,给每一个文件添加一个名称为name的字段,并将字段赋值为文件名称的一部分。\[1\] #### 引用[.reference_title] - *1* [基于arcpy批量添加矢量属性表字段并赋值](https://blog.csdn.net/m0_46471094/article/details/127700032)[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^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [arcpy——利用Arcpy进行字段操作](https://blog.csdn.net/knkn123/article/details/124278289)[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^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISerQ.

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值