写Python代码,如何根据GDB中一个要素类的字段分成多个GDB

文摘   2024-11-21 07:55   云南  

以下是一个 Python 脚本,使用 ArcPy 将某个要素类根据字段值拆分成多个要素类,并分别存储到新的 GDB 中:

脚本说明

  1. 读取输入的 GDB 和要素类。

  2. 根据指定字段的唯一值对要素类进行拆分。

  3. 为每个唯一值创建一个新的 GDB,并将对应的子集数据导入到新 GDB 中。

示例代码

python

复制代码

import arcpy
import os

# 输入参数
input_gdb = r"C:\path\to\input.gdb" # 输入 GDB 路径
input_feature_class = "YourFeatureClass" # 要素类名称
split_field = "YourFieldName" # 根据此字段分组
output_folder = r"C:\path\to\output_folder" # 输出 GDB 存放的文件夹

# 设置环境
arcpy.env.workspace = input_gdb

# 获取字段唯一值
unique_values = set(row[0] for row in arcpy.da.SearchCursor(input_feature_class, [split_field]))
print(f"找到唯一值: {unique_values}")

# 遍历唯一值,创建新 GDB 并导出对应数据
for value in unique_values:
# 定义输出 GDB 名称
gdb_name = f"{value}.gdb"
output_gdb_path = os.path.join(output_folder, gdb_name)

# 创建新 GDB
if not arcpy.Exists(output_gdb_path):
arcpy.CreateFileGDB_management(output_folder, gdb_name)
print(f"创建 GDB: {output_gdb_path}")

# 定义输出要素类路径
output_feature_class = os.path.join(output_gdb_path, input_feature_class)

# 构建 SQL 查询表达式
query = f"{split_field} = '{value}'" if isinstance(value, str) else f"{split_field} = {value}"

# 使用 Select 来导出对应的子集数据
arcpy.Select_analysis(
in_features=input_feature_class,
out_feature_class=output_feature_class,
where_clause=query
)
print(f"导出: {value} 到 {output_feature_class}")

print("拆分完成!")


代码说明

  1. 输入参数:

  • input_gdb: 输入 GDB 的路径。

  • input_feature_class: 要处理的要素类名称。

  • split_field: 用于拆分的字段名称。

  • output_folder: 用于存储生成的 GDB 的文件夹路径。

  • 逻辑流程:

    • 创建对应的文件 GDB。

    • 使用 Select 工具将符合条件的数据导出到新 GDB 中。

    • 使用 SearchCursor 获取字段的唯一值。

    • 遍历唯一值:

  • SQL 表达式:

    • 根据字段类型(字符串或数值)动态生成 SQL 表达式。

  • 检查是否已存在 GDB:

    • 如果目标 GDB 已存在,跳过创建步骤。


    注意事项

    • 路径管理: 确保输入 GDB 和输出文件夹路径正确。

    • 字段类型: 如果字段包含特殊字符(如空格),需在字段名称加双引号或方括号。

    • 唯一值数量: 如果唯一值数量过多,生成的 GDB 会很多,注意存储空间。


    如果需要进一步定制或优化,请告知您的具体需求!

    GISAI
    ArcGIS培训和二次开发
     最新文章