9.0 KiB
sunvpy是SunvStation地理信息系统的Python脚本接口库,专为二次开发和自动化数据处理任务设计。该库通过SWIG封装技术将C++核心功能暴露给Python,提供了完整的地理对象管理、空间查询、数据交换和质量检查能力。
Sources: init.py
核心架构
sunvpy采用分层架构设计,底层为SWIG封装的C++扩展模块,上层为面向Python的高级API封装。SSProcessManager作为主要入口类,通过Mixin模式组织功能模块,实现了关注点分离和代码复用。
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
模块功能概览
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
主要特性
sunvpy提供了丰富的GIS操作功能,覆盖了地理数据处理的主要场景。选择集管理允许用户通过灵活的查询条件筛选地物对象,支持属性过滤和空间查询。地物编辑功能包括创建新对象、修改几何坐标、调整属性值等完整操作流程。
数据交换能力支持多种格式的导入导出,可以方便地与其他GIS系统进行数据交互。数据检查模块提供拓扑检查、属性验证、规则检测等质量保证功能,确保数据符合规范要求。批量操作和缓存机制优化了大数据量场景下的性能,有效减少数据库访问次数。
进度条和日志系统为长时间运行的任务提供了用户反馈和调试支持,增强了脚本的可维护性和用户体验。撤销标记管理实现了操作的撤销功能,提高了数据操作的安全性。
Sources: PySSProcess.py
快速上手
使用sunvpy进行地物查询和属性修改非常直观。以下示例展示了如何筛选编码为"3103013"的地物,并修改其属性值。
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
项目结构
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
学习路径建议
为了帮助初学者系统地掌握sunvpy,建议按照以下顺序学习文档。首先从安装与环境配置开始,了解如何正确安装和配置运行环境。接着阅读第一个脚本:查询地物属性,通过实际操作建立直观认识。
掌握基础操作后,深入学习使用 SSProcess 管理选择集和运行内置示例脚本,熟悉常用API的使用方法。当需要理解底层原理时,可以参考SunvStation 系统架构和SWIG 封装机制说明。
对于高级应用场景,建议学习Mixin 设计模式以理解代码组织方式,以及查阅SSProcessManager 完整 API获取详细的接口说明。