Files
sunvpy-docs/docs/content/5-yun-xing-nei-zhi-shi-li-jiao-ben.md
2026-04-10 13:47:53 +08:00

228 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
sunvpy提供了一个内置的示例脚本帮助初学者快速理解如何使用SSProcess进行地物查询、属性读取和修改操作。这个示例脚本位于PySSProcess模块的`__main__`代码块中,展示了完整的数据处理工作流程,从筛选对象到修改属性再到验证结果的全部过程。
Sources: [PySSProcess.py](PySSProcess.py#L93-L140)
## 示例脚本架构概览
内置示例脚本通过一个连贯的演示将之前学习的选择集管理和属性操作知识整合在一起。该脚本展示了如何在SunvStation环境中执行典型的批量数据处理任务筛选特定编码的地物对象、查看其属性信息、批量修改多个属性字段并最终验证修改结果。
```mermaid
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](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, "<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](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开发框架的整体认知为后续的高级开发奠定坚实基础。