9.6 KiB
sunvpy提供了一个内置的示例脚本,帮助初学者快速理解如何使用SSProcess进行地物查询、属性读取和修改操作。这个示例脚本位于PySSProcess模块的__main__代码块中,展示了完整的数据处理工作流程,从筛选对象到修改属性再到验证结果的全部过程。
Sources: PySSProcess.py
示例脚本架构概览
内置示例脚本通过一个连贯的演示,将之前学习的选择集管理和属性操作知识整合在一起。该脚本展示了如何在SunvStation环境中执行典型的批量数据处理任务:筛选特定编码的地物对象、查看其属性信息、批量修改多个属性字段,并最终验证修改结果。
graph TB
A[脚本执行入口] --> B[初始化阶段<br>清理选择集与条件]
B --> C[筛选阶段<br>按编码过滤地物]
C --> D[读取阶段<br>遍历并显示原始属性]
D --> E[修改阶段<br>批量更新属性值]
E --> F[验证阶段<br>显示修改后属性]
B --> B1[clearSelection<br>清空选择集]
B --> B2[clearSelectCondition<br>清空筛选条件]
C --> C1[setSelectCondition<br>设置编码条件]
C --> C2[selectFilter<br>执行查询]
D --> D1[getSelGeoCount<br>获取对象数量]
D --> D2[getSelGeoValue<br>读取属性值]
E --> E1[基本属性修改<br>ID/线型/颜色等]
E --> E2[扩展属性修改<br>#91;JG#93;,#91;CS#93;等]
F --> F1[二次遍历对象]
F --> F2[对比显示结果]
这个流程图清晰地展示了脚本的四个主要阶段:初始化、筛选、修改和验证。每个阶段都对应一组核心API调用,形成了一个完整的数据处理闭环。
Sources: PySSProcess.py
脚本运行方式
方法一:直接执行模块
在Windows命令行中,通过Python解释器直接执行PySSProcess模块文件:
python D:\1SunvStationDev\sunvstation-release\build\bin\Release\script\python313\Lib\site-packages\sunvpy\PySSProcess.py
这种方式的优点是简单直接,无需额外代码即可运行示例。
方法二:从Python脚本导入
创建一个Python脚本文件(如run_example.py),通过导入执行:
import sunvpy.PySSProcess
这种方法更加灵活,可以在执行前后添加自己的代码逻辑。
Sources: PySSProcess.py
示例脚本详解
阶段一:初始化与筛选
脚本首先清理环境并建立筛选条件,确保操作的准确性和可重复性。
SSProcess.clearSelection() # 清除之前的选择集
SSProcess.clearSelectCondition() # 清除之前的筛选条件
SSProcess.setSelectCondition("SSObj_Code", "==", "3103013") # 按编码筛选
SSProcess.selectFilter() # 执行查询
print(f"选择集中的点线面对象数量: {SSProcess.getSelGeoCount()}")
这几行代码完成了所有准备工作。3103013是示例使用的地物编码,在实际运行前应替换为当前地图中实际存在的编码值。
Sources: PySSProcess.py
阶段二:属性字段列表
脚本定义了一个包含35个属性字段的列表,涵盖了基本属性、几何特性和扩展属性:
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
阶段三:读取并显示原始属性
脚本遍历选择集的前10个对象,读取并显示所有定义的属性值:
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
阶段四:批量修改属性
脚本演示了如何修改不同类型的属性值:
for i in range(0, 10):
SSProcess.setSelGeoValue(i, "< SSObj_ID >", f"{i+1000}") # 几何属性修改
SSProcess.setSelGeoValue(i, "<SSObj_LineType>", "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
阶段五:验证修改结果
最后,脚本再次遍历对象,显示修改后的属性值,用于对比验证:
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
注意事项与最佳实践
运行前准备
在运行示例脚本前,请确保满足以下条件:
| 检查项 | 说明 | 检查方法 |
|---|---|---|
| SunvStation环境 | 必须在SunvStation系统中运行 | 确认系统已启动 |
| 工作空间 | 需要有打开的工作空间 | 检查是否有激活项目 |
| 地物编码 | 编码3103013必须存在于当前地图 | 使用系统查询工具确认 |
| Python路径 | Python环境需正确配置 | 运行python --version验证 |
修改建议
实际运行时,建议根据当前地图情况调整脚本参数:
# 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
学习价值
这个内置示例脚本集成了sunvpy的多个核心概念,具有很高的学习价值:
- 选择集管理:演示了完整的选择集生命周期(清理、查询、遍历)
- 属性读取:展示了如何读取基本属性和扩展属性
- 属性修改:涵盖了不同类型属性的修改技巧
- 工作流程:提供了标准的数据处理流程模板
建议初学者仔细阅读并运行这个示例,然后尝试修改其中的参数和逻辑,逐步加深对sunvpy API的理解。
Sources: PySSProcess.py
下一步学习
掌握内置示例脚本后,建议按照以下路径继续深入学习:
-
深入学习选择集管理:阅读使用 SSProcess 管理选择集,了解更复杂的选择条件组合和批量操作技巧
-
理解系统架构:阅读SunvStation 系统架构和Mixin 设计模式,深入理解底层设计原理
通过这个示例脚本的实际运行和代码研究,您将建立起对sunvpy开发框架的整体认知,为后续的高级开发奠定坚实基础。