sunvpy提供了一个内置的示例脚本,帮助初学者快速理解如何使用SSProcess进行地物查询、属性读取和修改操作。这个示例脚本位于PySSProcess模块的`__main__`代码块中,展示了完整的数据处理工作流程,从筛选对象到修改属性再到验证结果的全部过程。 Sources: [PySSProcess.py](PySSProcess.py#L93-L140) ## 示例脚本架构概览 内置示例脚本通过一个连贯的演示,将之前学习的选择集管理和属性操作知识整合在一起。该脚本展示了如何在SunvStation环境中执行典型的批量数据处理任务:筛选特定编码的地物对象、查看其属性信息、批量修改多个属性字段,并最终验证修改结果。 ```mermaid graph TB A[脚本执行入口] --> B[初始化阶段
清理选择集与条件] B --> C[筛选阶段
按编码过滤地物] C --> D[读取阶段
遍历并显示原始属性] D --> E[修改阶段
批量更新属性值] E --> F[验证阶段
显示修改后属性] B --> B1[clearSelection
清空选择集] B --> B2[clearSelectCondition
清空筛选条件] C --> C1[setSelectCondition
设置编码条件] C --> C2[selectFilter
执行查询] D --> D1[getSelGeoCount
获取对象数量] D --> D2[getSelGeoValue
读取属性值] E --> E1[基本属性修改
ID/线型/颜色等] E --> E2[扩展属性修改
#91;JG#93;,#91;CS#93;等] F --> F1[二次遍历对象] F --> F2[对比显示结果] ``` 这个流程图清晰地展示了脚本的四个主要阶段:初始化、筛选、修改和验证。每个阶段都对应一组核心API调用,形成了一个完整的数据处理闭环。 Sources: [PySSProcess.py](PySSProcess.py#L93-L140) ## 脚本运行方式 ### 方法一:直接执行模块 在Windows命令行中,通过Python解释器直接执行PySSProcess模块文件: ```cmd python D:\1SunvStationDev\sunvstation-release\build\bin\Release\script\python313\Lib\site-packages\sunvpy\PySSProcess.py ``` 这种方式的优点是简单直接,无需额外代码即可运行示例。 ### 方法二:从Python脚本导入 创建一个Python脚本文件(如`run_example.py`),通过导入执行: ```python import sunvpy.PySSProcess ``` 这种方法更加灵活,可以在执行前后添加自己的代码逻辑。 Sources: [PySSProcess.py](PySSProcess.py#L93-L140) ## 示例脚本详解 ### 阶段一:初始化与筛选 脚本首先清理环境并建立筛选条件,确保操作的准确性和可重复性。 ```python SSProcess.clearSelection() # 清除之前的选择集 SSProcess.clearSelectCondition() # 清除之前的筛选条件 SSProcess.setSelectCondition("SSObj_Code", "==", "3103013") # 按编码筛选 SSProcess.selectFilter() # 执行查询 print(f"选择集中的点线面对象数量: {SSProcess.getSelGeoCount()}") ``` 这几行代码完成了所有准备工作。`3103013`是示例使用的地物编码,在实际运行前应替换为当前地图中实际存在的编码值。 Sources: [PySSProcess.py](PySSProcess.py#L94-L98) ### 阶段二:属性字段列表 脚本定义了一个包含35个属性字段的列表,涵盖了基本属性、几何特性和扩展属性: ```python fields = [ "SSObj_ID", "SSObj_Code", "SSObj_LayerName", "SSObj_Type", "SSObj_Color", "SSObj_LineType", "SSObj_LineWidth", "SSObj_Name", "SSObj_Byname", "SSObj_Angle", "SSObj_DataMark", "SSObj_CreateTime", "SSObj_ModifyTime", "SSObj_ExplodeStatus", "SSObj_FontWidth", "SSObj_FontHeight", "SSObj_FontName", "SSObj_FontClass", "SSObj_FontAlignment", "SSObj_FontWordAngle", "SSObj_FontStringAngle", "SSObj_FontWeight", "SSObj_FontIlaticAngle", "SSObj_FontDownAngle", "SSObj_FontUnderLine", "SSObj_FontInterval", "SSObj_FontString", "SSObj_Area", "SSObj_Length", "SSObj_PointCount", "SSObj_X", "SSObj_Y", "SSObj_Z", "SSObj_PointName", "SSObj_PointType", "SSObj_SymType", "[JG]", "[CS]" ] ``` | 属性类别 | 字段示例 | 说明 | |---------|---------|------| | 基本标识 | SSObj_ID, SSObj_Code, SSObj_Name | 对象的唯一标识、编码和名称 | | 显示属性 | SSObj_Color, SSObj_LineType, SSObj_LineWidth | 颜色、线型、线宽等显示特征 | | 几何特性 | SSObj_Area, SSObj_Length, SSObj_PointCount | 面积、长度、点数等几何参数 | | 坐标信息 | SSObj_X, SSObj_Y, SSObj_Z | 对象的空间坐标位置 | | 扩展属性 | [JG], [CS] | 结构、层数等自定义扩展属性 | Sources: [PySSProcess.py](PySSProcess.py#L99-L108) ### 阶段三:读取并显示原始属性 脚本遍历选择集的前10个对象,读取并显示所有定义的属性值: ```python for i in range(0, 10): print(f"第 {i} 个对象属性:") for field in fields: value = SSProcess.getSelGeoValue(i, field) print(f" {field}: {value}") print("-" * 40) ``` 这段代码会为每个对象输出格式化的属性信息,方便查看原始数据状态。 Sources: [PySSProcess.py](PySSProcess.py#L110-L115) ### 阶段四:批量修改属性 脚本演示了如何修改不同类型的属性值: ```python for i in range(0, 10): SSProcess.setSelGeoValue(i, "< SSObj_ID >", f"{i+1000}") # 几何属性修改 SSProcess.setSelGeoValue(i, "", "3") # 线型修改 SSProcess.setSelGeoValue(i, "SSObj_LineWidth", "2") # 基本属性修改 SSProcess.setSelGeoValue(i, "SSObj_Color", "16777215") # 颜色修改为白色 SSProcess.setSelGeoValue(i, "SSObj_Name", f"对象{i+1}") # 名称修改 SSProcess.setSelGeoValue(i, "SSObj_Byname", f"别名{i+1}") # 别名修改 SSProcess.setSelGeoValue(i, "SSObj_Angle", "180") # 角度修改 SSProcess.setSelGeoValue(i, "SSObj_DataMark", "1") # 数据标记 SSProcess.setSelGeoValue(i, "SSObj_CreateTime", "2025-5-01 12:00:00") # 创建时间 SSProcess.setSelGeoValue(i, "SSObj_ModifyTime", "2023-7-01 12:00:00") # 修改时间 SSProcess.setSelGeoValue(i, "[JG],[CS]", "砖混, 6") # 扩展属性修改(结构、层数) ``` | 属性类型 | 修改方式 | 示例 | |---------|---------|------| | 几何属性 | 使用尖括号`< >`包围 | `< SSObj_ID >` | | 基本属性 | 直接使用属性名 | `SSObj_Color` | | 扩展属性 | 使用方括号`[ ]`包围 | `[JG],[CS]` | | 多值属性 | 逗号分隔多个字段 | `[JG],[CS]` | Sources: [PySSProcess.py](PySSProcess.py#L117-L130) ### 阶段五:验证修改结果 最后,脚本再次遍历对象,显示修改后的属性值,用于对比验证: ```python print("修改后的选择集对象属性:") for i in range(0, 10): print(f"第 {i} 个对象属性:") for field in fields: value = SSProcess.getSelGeoValue(i, field) print(f" {field}: {value}") print("-" * 40) ``` 通过对比修改前后的输出,可以清楚地看到属性变化,验证脚本执行的正确性。 Sources: [PySSProcess.py](PySSProcess.py#L132-L138) ## 注意事项与最佳实践 ### 运行前准备 在运行示例脚本前,请确保满足以下条件: | 检查项 | 说明 | 检查方法 | |-------|------|---------| | SunvStation环境 | 必须在SunvStation系统中运行 | 确认系统已启动 | | 工作空间 | 需要有打开的工作空间 | 检查是否有激活项目 | | 地物编码 | 编码3103013必须存在于当前地图 | 使用系统查询工具确认 | | Python路径 | Python环境需正确配置 | 运行`python --version`验证 | ### 修改建议 实际运行时,建议根据当前地图情况调整脚本参数: ```python # 1. 替换为实际存在的编码 SSProcess.setSelectCondition("SSObj_Code", "==", "你的实际编码") # 2. 调整遍历对象数量以匹配实际选择集大小 obj_count = SSProcess.getSelGeoCount() display_count = min(10, obj_count) # 显示对象数量不超过实际数量 for i in range(display_count): # 处理逻辑 pass # 3. 修改属性值时考虑数据类型的一致性 # 例如:颜色值应为整数,时间格式应符合系统要求 ``` Sources: [PySSProcess.py](PySSProcess.py#L96-L98) ## 学习价值 这个内置示例脚本集成了sunvpy的多个核心概念,具有很高的学习价值: - **选择集管理**:演示了完整的选择集生命周期(清理、查询、遍历) - **属性读取**:展示了如何读取基本属性和扩展属性 - **属性修改**:涵盖了不同类型属性的修改技巧 - **工作流程**:提供了标准的数据处理流程模板 建议初学者仔细阅读并运行这个示例,然后尝试修改其中的参数和逻辑,逐步加深对sunvpy API的理解。 Sources: [PySSProcess.py](PySSProcess.py#L93-L140) ## 下一步学习 掌握内置示例脚本后,建议按照以下路径继续深入学习: 1. **深入学习选择集管理**:阅读[使用 SSProcess 管理选择集](4-shi-yong-ssprocess-guan-li-xuan-ze-ji),了解更复杂的选择条件组合和批量操作技巧 2. **掌握地理对象编辑**:学习[创建默认地物对象](19-chuang-jian-mo-ren-di-wu-dui-xiang)和[对象缓存机制](23-dui-xiang-huan-cun-ji-zhi),理解对象创建和缓存管理 3. **探索数据交换功能**:查看[导入外部数据](27-dao-ru-wai-bu-shu-ju)和[导出数据到文件](28-dao-chu-shu-ju-dao-wen-jian),学习如何与其他系统交换数据 4. **理解系统架构**:阅读[SunvStation 系统架构](6-sunvstation-xi-tong-jia-gou)和[Mixin 设计模式](9-mixin-she-ji-mo-shi),深入理解底层设计原理 通过这个示例脚本的实际运行和代码研究,您将建立起对sunvpy开发框架的整体认知,为后续的高级开发奠定坚实基础。