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开发框架的整体认知,为后续的高级开发奠定坚实基础。