ArcPy函数索引与操作概览

版权申诉
0 下载量 90 浏览量 更新于2024-07-02 收藏 2.06MB PDF 举报
ArcPyFunctionIndex是一份全面指南,介绍了ArcGIS Pro中的ArcPy函数库,它是Esri提供的一种Python接口,用于与ArcGIS地理数据库(Geodatabases)进行交互。这些函数涵盖了多种类别,包括数据管理、工具箱操作、环境设置、错误处理和数据描述等,旨在简化GIS开发过程中的任务。 1. **数据管理**: - **AddDataStoreItem**: 用于向数据存储(如文件GDB或个人工作空间)添加新的数据项,支持数据导入或创建。 - **AlterAliasName**: 用于修改对象别名,便于管理和组织数据。 2. **错误和消息处理**: - **AddError**: 提供错误报告机制,用于在运行过程中记录并处理错误信息。 - **AddMessage**: 发送通用的消息,可以是警告或成功提示,有助于日志跟踪和用户反馈。 - **AddReturnMessage**: 传递函数执行结果作为消息,用于返回特定操作的状态或结果。 - **AddWarning**: 发出警告信息,提醒开发者或用户潜在问题。 3. **工具箱与工具**: - **AddToolbox**: 用于在工作空间中添加或管理工具箱,方便组织和调用GIS工具。 4. **环境设置**: - **ClearEnvironment**: 清除ArcPy环境变量,确保脚本执行时的隔离性和一致性。 - **CreateScratchName**: 生成临时工作目录名称,用于创建临时文件或工作区。 5. **几何处理**: - **AsShape**: 将数据转换为Shape对象,便于处理几何数据。 - **FromWKBGeometry**: 将Well-Known Binary (WKB)格式的几何数据转换为Python对象。 - **FromWKTGeometry**: 从Well-Known Text (WKT)字符串解析几何对象。 6. **参数获取和设置**: - **CopyParameter**: 复制参数值,常用于函数间的参数传递或自定义函数的参数设置。 - **GetArgumentCount**: 获取函数接受参数的数量,帮助开发者理解和使用函数。 7. **数据描述**: - **Describe**: 描述数据集属性,包括字段、类型、长度等信息,用于了解数据结构。 8. **GIS服务与发布**: - **CreateGPSDDraft**: 创建地理过程服务的草稿,用于准备发布地图服务。 - **CreateImageSDDraft**: 同上,但针对图像服务。 9. **随机值生成**: - **CreateRandomValueGenerator**: 生成随机数值,用于模拟或测试场景。 10. **身份管理**: - **DisconnectUser**: 断开用户连接,通常在用户完成任务后清理环境。 ArcPy_Functions.pdf文档提供了丰富的ArcPy功能,无论是对数据操作、工具箱管理,还是错误处理和环境配置,都能在其中找到相应的函数和方法。掌握这些函数对于使用ArcGIS进行GIS开发和数据分析具有重要作用。

运行import arcpy # 定义输入图层和输出图层 input_layer = arcpy.GetParameterAsText(0) output_layer = arcpy.GetParameterAsText(1) # 定义合并条件 merge_field = arcpy.GetParameterAsText(2) # 要合并的字段名 merge_gap = arcpy.GetParameterAsText(3) # 相邻图斑面积差距 # 定义面积筛选条件 selection_field = arcpy.GetParameterAsText(4) # 用于筛选的字段名 selection_value = arcpy.GetParameterAsText(5) # 筛选条件 selection_area = float(arcpy.GetParameterAsText(6)) # 面积筛选阈值 # 进行面积筛选 arcpy.MakeFeatureLayer_management(input_layer, "layer", "{}='{}' AND SHAPE_AREA > {}".format(selection_field, selection_value, selection_area)) # 寻找相邻图斑 arcpy.PolygonNeighbors_analysis("layer", "neighbors", ["FID"]) # 定义合并列表 merge_list = [] # 进行合并 with arcpy.da.SearchCursor("neighbors", ['src_FID', 'nbr_FID', 'src_{}'.format(merge_field)]) as cursor: for row in cursor: if row[0] < row[1]: src_geom = arcpy.da.SearchCursor("layer", ["SHAPE@"], "FID={}".format(row[0])).next()[0] nbr_geom = arcpy.da.SearchCursor("layer", ["SHAPE@"], "FID={}".format(row[1])).next()[0] if src_geom.area < nbr_geom.area: src_geom, nbr_geom = nbr_geom, src_geom if src_geom.area - nbr_geom.area > merge_gap: merge_list.append(row[0]) merge_list.append(row[1]) arcpy.management.Dissolve("layer", output_layer, "{}".format(merge_field), None, "MULTI_PART", "DISSOLVE_LINES") # 删除被合并的图斑 with arcpy.da.UpdateCursor(output_layer, ['FID']) as cursor: for row in cursor: if row[0] in merge_list: cursor.deleteRow()时报错Traceback (most recent call last): File "D:\实验YY\新建文件夹 (2)\批量合并小图斑.py", line 13, in <module> File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\analysis.py", line 984, in PolygonNeighbors raise e ExecuteError: 执行失败。参数无效。 ERROR 000732: 输入要素: 数据集 layer 不存在或不受支持 执行(PolygonNeighbors)失败。 执行(批量合并小图斑)失败。请改正代码

2023-05-22 上传

import arcpy# 定义输入图层和输出图层input_layer = arcpy.GetParameterAsText(0)output_layer = arcpy.GetParameterAsText(1)# 定义合并条件merge_field = arcpy.GetParameterAsText(2) # 要合并的字段名merge_gap = arcpy.GetParameterAsText(3) # 相邻图斑面积差距# 定义面积筛选条件selection_field = arcpy.GetParameterAsText(4) # 用于筛选的字段名selection_value = arcpy.GetParameterAsText(5) # 筛选条件selection_area = float(arcpy.GetParameterAsText(6)) # 面积筛选阈值# 进行面积筛选arcpy.MakeFeatureLayer_management(input_layer, "layer", "{}='{}' AND SHAPE_AREA > {}".format(selection_field, selection_value, selection_area))# 寻找相邻图斑arcpy.PolygonNeighbors_analysis("layer", "neighbors", ["FID"])# 定义合并列表merge_list = []# 进行合并with arcpy.da.SearchCursor("neighbors", ['src_FID', 'nbr_FID', 'src_{}'.format(merge_field)]) as cursor: for row in cursor: if row[0] < row[1]: src_geom = arcpy.da.SearchCursor("layer", ["SHAPE@"], "FID={}".format(row[0])).next()[0] nbr_geom = arcpy.da.SearchCursor("layer", ["SHAPE@"], "FID={}".format(row[1])).next()[0] if src_geom.area < nbr_geom.area: src_geom, nbr_geom = nbr_geom, src_geom if src_geom.area - nbr_geom.area > merge_gap: merge_list.append(row[0]) merge_list.append(row[1])arcpy.management.Dissolve("layer", output_layer, "{}".format(merge_field), None, "MULTI_PART", "DISSOLVE_LINES")# 删除被合并的图斑with arcpy.da.UpdateCursor(output_layer, ['FID']) as cursor: for row in cursor: if row[0] in merge_list: cursor.deleteRow()运行上面代码报错Traceback (most recent call last): File "D:\实验YY\新建文件夹 (2)\批量合并小图斑.py", line 13, in <module> File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\analysis.py", line 984, in PolygonNeighbors raise e ExecuteError: 执行失败。参数无效。 ERROR 000732: 输入要素: 数据集 layer 不存在或不受支持 执行(PolygonNeighbors)失败。 执行(批量合并小图斑)失败。请改正代码

2023-05-22 上传

# coding=UTF-8 # This Python file uses the following encoding: utf-8 import arcpy # 设置工作空间和环境设置 arcpy.env.workspace = "D:/数据备份" # 设置工作空间路径 arcpy.env.overwriteOutput = True # 允许覆盖输出 # 定义线图层和点图层的名称 line_layer = r"D:\数据备份\线1.shp" # 替换为线图层的名称 point_layer = r"D:\数据备份\点.shp" # 替换为点图层的名称 # 创建一个用于存储要删除的节点的列表 nodes_to_delete = [] # 遍历线图层中的每个要素 with arcpy.da.UpdateCursor(line_layer, ["SHAPE@"]) as cursor: for row in cursor: line_geometry = row[0] # 获取线几何对象 # 检查线的起点和终点是否与点图层中的点重叠 start_point = line_geometry.firstPoint end_point = line_geometry.lastPoint start_point_overlaps = False end_point_overlaps = False with arcpy.da.SearchCursor(point_layer, ["SHAPE@"]) as point_cursor: for point_row in point_cursor: point_geometry = point_row[0] # 获取点几何对象 # 检查起点是否与点重叠 if start_point.within(point_geometry): start_point_overlaps = True break # 检查终点是否与点重叠 if end_point.within(point_geometry): end_point_overlaps = True break # 如果起点和终点都没有与点重叠,则将该要素的所有节点添加到要删除的列表中 if not start_point_overlaps and not end_point_overlaps: for i in range(1, line_geometry.pointCount - 1): nodes_to_delete.append(i) # 删除要删除的节点 with arcpy.da.UpdateCursor(line_layer, ["SHAPE@"]) as cursor: for row in cursor: line_geometry = row[0] # 获取线几何对象 # 创建一个新的 Polyline 对象 new_line_geometry = arcpy.Polyline() # 复制需要保留的节点到新的 Polyline 对象中 for i in range(line_geometry.pointCount): if i not in nodes_to_delete: new_line_geometry.addPoint(line_geometry.getPart(0).getObject(i)) # 更新要素 cursor.updateRow([new_line_geometry]) print("节点删除完成!")

2023-07-15 上传