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)获取详细的接口说明。