Files
sunvpy-docs/docs/content/1-ku-gai-shu.md

188 lines
9.0 KiB
Markdown
Raw Permalink Normal View History

2026-04-10 13:47:53 +08:00
sunvpy是SunvStation地理信息系统的Python脚本接口库专为二次开发和自动化数据处理任务设计。该库通过SWIG封装技术将C++核心功能暴露给Python提供了完整的地理对象管理、空间查询、数据交换和质量检查能力。
Sources: [__init__.py](__init__.py#L1-L12)
## 核心架构
sunvpy采用分层架构设计底层为SWIG封装的C++扩展模块上层为面向Python的高级API封装。SSProcessManager作为主要入口类通过Mixin模式组织功能模块实现了关注点分离和代码复用。
```mermaid
graph TB
subgraph "Python API层"
A[SSProcessManager<br/>进程管理器]
B[ObjBaseAttr<br/>属性管理器]
C[SelectionMixin<br/>选择集操作]
D[GeoEditMixin<br/>地理编辑]
E[ProjectMixin<br/>工程管理]
F[LogMixin<br/>日志记录]
G[ProgressMixin<br/>进度管理]
end
subgraph "SWIG封装层"
H[PySSCore.pyd<br/>核心功能]
I[PySSMap.pyd<br/>地图操作]
J[PySSDataSource.pyd<br/>数据源管理]
K[PySSDatabase.pyd<br/>数据库操作]
L[PySSDataX.pyd<br/>数据交换]
M[PySSCheck.pyd<br/>数据检查]
N[PySSMath.pyd<br/>数学计算]
O[PySSWidget.pyd<br/>UI组件]
P[PySSView.pyd<br/>视图控制]
Q[PySSGisDBUpdate.pyd<br/>GIS数据库更新]
end
subgraph "C++核心层"
R[SunvStation<br/>C++引擎]
end
A --> C
A --> D
A --> E
A --> F
A --> G
A --> H
A --> I
A --> J
A --> K
A --> L
A --> M
A --> N
A --> O
A --> P
A --> Q
B --> H
H -.-> R
I -.-> R
J -.-> R
K -.-> R
L -.-> R
M -.-> R
N -.-> R
O -.-> R
P -.-> R
Q -.-> R
```
SSProcessManager继承自五个功能Mixin类每个Mixin负责特定的功能域。这种设计使得代码组织清晰易于维护和扩展。全局单例SSProcess提供统一访问入口确保工作空间和地图实例的一致性。
Sources: [PySSProcess.py](PySSProcess.py#L28-L46)
## 模块功能概览
sunvpy包含多个功能模块每个模块对应特定的地理信息系统操作领域。下表列出了主要模块及其功能描述。
| 模块名称 | 文件名 | 功能描述 | 封装类型 |
|---------|--------|---------|---------|
| 核心功能 | PySSCore.pyd | 提供基础数据结构、工作空间管理、地物对象等核心类 | SWIG封装 |
| 地图操作 | PySSMap.pyd | 地图显示、缩放控制、坐标系转换等地图相关功能 | SWIG封装 |
| 数据源管理 | PySSDataSource.pyd | 数据集访问、数据源管理、数据浏览等功能 | SWIG封装 |
| 数据库操作 | PySSDatabase.pyd | 数据库连接、查询、更新等数据库操作功能 | SWIG封装 |
| 数据交换 | PySSDataX.pyd | 数据导入导出、格式转换等数据交换功能 | SWIG封装 |
| 数据检查 | PySSCheck.pyd | 拓扑检查、规则验证等数据质量检查功能 | SWIG封装 |
| 数学计算 | PySSMath.pyd | 几何计算、坐标变换、数学运算等数学工具 | SWIG封装 |
| UI组件 | PySSWidget.pyd | 进度条、对话框、全局选项等用户界面组件 | SWIG封装 |
| 视图控制 | PySSView.pyd | 视图刷新、窗口管理、显示控制等视图功能 | SWIG封装 |
| GIS数据库更新 | PySSGisDBUpdate.pyd | GIS数据库批量更新、同步等高级功能 | SWIG封装 |
| 进程管理器 | PySSProcess.py | 统一API入口整合所有功能的Python封装 | Python层 |
| 属性管理器 | ObjBaseAttr.py | 地物基本属性名称注册和索引管理 | Python层 |
Sources: [PySSProcess.py](PySSProcess.py#L5-L19)
## 主要特性
sunvpy提供了丰富的GIS操作功能覆盖了地理数据处理的主要场景。选择集管理允许用户通过灵活的查询条件筛选地物对象支持属性过滤和空间查询。地物编辑功能包括创建新对象、修改几何坐标、调整属性值等完整操作流程。
数据交换能力支持多种格式的导入导出可以方便地与其他GIS系统进行数据交互。数据检查模块提供拓扑检查、属性验证、规则检测等质量保证功能确保数据符合规范要求。批量操作和缓存机制优化了大数据量场景下的性能有效减少数据库访问次数。
进度条和日志系统为长时间运行的任务提供了用户反馈和调试支持,增强了脚本的可维护性和用户体验。撤销标记管理实现了操作的撤销功能,提高了数据操作的安全性。
Sources: [PySSProcess.py](PySSProcess.py#L57-L88)
## 快速上手
使用sunvpy进行地物查询和属性修改非常直观。以下示例展示了如何筛选编码为"3103013"的地物,并修改其属性值。
```python
from sunv import SSProcess
# 清空选择集和查询条件
SSProcess.clearSelection()
SSProcess.clearSelectCondition()
# 设置查询条件:编码等于"3103013"
SSProcess.setSelectCondition("SSObj_Code", "==", "3103013")
# 执行过滤查询
SSProcess.selectFilter()
# 获取选择集中的地物数量
geo_count = SSProcess.getSelGeoCount()
print(f"选择集中的地物对象数量: {geo_count}")
# 遍历前10个对象并修改属性
for i in range(min(10, geo_count)):
# 修改地物ID
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是全局单例对象无需手动创建实例即可直接使用。该对象在首次访问时自动初始化工作空间和地图连接确保后续操作的正确性。
Sources: [PySSProcess.py](PySSProcess.py#L124-L140)
## 项目结构
sunvpy包采用清晰的目录结构组织代码将Python实现和C++扩展分离。顶层目录包含所有PySS开头的SWIG封装模块、对应的.pyd二进制文件、以及纯Python实现的功能模块。
```
sunvpy/
├── __init__.py # 包初始化文件
├── PySSProcess.py # 进程管理器主要API入口
├── ObjBaseAttr.py # 地物基本属性管理器
├── PySSCore.py # 核心功能SWIG封装
├── PySSMap.py # 地图操作SWIG封装
├── PySSDataSource.py # 数据源管理SWIG封装
├── PySSDatabase.py # 数据库操作SWIG封装
├── PySSDataX.py # 数据交换SWIG封装
├── PySSCheck.py # 数据检查SWIG封装
├── PySSMath.py # 数学计算SWIG封装
├── PySSWidget.py # UI组件SWIG封装
├── PySSView.py # 视图控制SWIG封装
├── PySSGisDBUpdate.py # GIS数据库更新SWIG封装
├── _PySSCore.pyd # 核心功能C++扩展
├── _PySSMap.pyd # 地图操作C++扩展
├── _PySSDataSource.pyd # 数据源管理C++扩展
├── _PySSDatabase.pyd # 数据库操作C++扩展
├── _PySSDataX.pyd # 数据交换C++扩展
├── _PySSCheck.pyd # 数据检查C++扩展
├── _PySSMath.pyd # 数学计算C++扩展
├── _PySSWidget.pyd # UI组件C++扩展
├── _PySSView.pyd # 视图控制C++扩展
├── _PySSGisDBUpdate.pyd # GIS数据库更新C++扩展
└── ssprocess_mixins/ # 功能Mixin模块目录
├── selection_mixin.py # 选择集操作Mixin
├── geo_edit_mixin.py # 地理编辑Mixin
├── project_mixin.py # 工程管理Mixin
├── log_mixin.py # 日志记录Mixin
└── progress_mixin.py # 进度管理Mixin
```
ssprocess_mixins目录将SSProcessManager的功能分解为多个独立的Mixin类每个类专注于特定的功能域。这种模块化设计便于理解、测试和扩展功能。
Sources: [PySSProcess.py](PySSProcess.py#L21-L26)
## 学习路径建议
为了帮助初学者系统地掌握sunvpy建议按照以下顺序学习文档。首先从[安装与环境配置](2-an-zhuang-yu-huan-jing-pei-zhi)开始,了解如何正确安装和配置运行环境。接着阅读[第一个脚本:查询地物属性](3-di-ge-jiao-ben-cha-xun-di-wu-shu-xing),通过实际操作建立直观认识。
掌握基础操作后,深入学习[使用 SSProcess 管理选择集](4-shi-yong-ssprocess-guan-li-xuan-ze-ji)和[运行内置示例脚本](5-yun-xing-nei-zhi-shi-li-jiao-ben)熟悉常用API的使用方法。当需要理解底层原理时可以参考[SunvStation 系统架构](6-sunvstation-xi-tong-jia-gou)和[SWIG 封装机制说明](7-swig-feng-zhuang-ji-zhi-shuo-ming)。
对于高级应用场景,建议学习[Mixin 设计模式](9-mixin-she-ji-mo-shi)以理解代码组织方式,以及查阅[SSProcessManager 完整 API](40-ssprocessmanager-wan-zheng-api)获取详细的接口说明。