Skip to content

Dy1anG/Data2oge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

多源空间数据入库系统 (OGE Data Import System)

Python PostgreSQL PostGIS MinIO PyQt6 License

📖 项目概述

多源空间数据入库系统是一个基于Python开发的综合数据入库解决方案,支持矢量数据和栅格数据的入库处理。系统提供桌面GUI应用程序和命令行工具两种使用方式,具备坐标系转换、批量处理、元数据管理、实时日志监控等功能。采用现代化的数据库设计架构,提供完整的产品管理和数据治理能力。

✨ 主要特性

🖥️ 桌面GUI应用(主要界面)

  • 现代化界面:基于PyQt6的图形界面,支持实时日志监控
  • 矢量数据导入:支持多种矢量格式,图层选择,产品管理
  • 栅格数据导入:支持多种栅格格式,元数据提取,MinIO存储
  • 实时进度:导入过程实时监控,彩色日志显示
  • 配置管理:目录选择,坐标系设置,产品配置

📋 命令行工具

  • 矢量数据处理:适合批量处理和自动化脚本调用
  • 栅格数据处理:支持批量栅格数据入库
  • Docker支持:提供容器化部署方案

🗺️ 矢量数据处理

  • 多格式支持:ESRI Shapefile、GeoJSON、KML、GML、CSV、GPKG、OpenFileGDB等
  • 坐标系转换:支持多种坐标系之间的自动转换(WGS84、CGCS2000、北京54等)
  • 图层选择:支持多图层文件的图层级选择导入
  • 批量处理:支持大批量矢量数据的高效入库

📷 栅格数据处理

  • 栅格入库:支持TIFF、GeoTIFF、JPEG2000等栅格格式
  • 云存储集成:集成MinIO对象存储,支持栅格数据的分布式存储
  • 元数据提取:自动提取栅格数据的地理元信息和统计信息
  • 快速预览:支持栅格数据的快速预览图生成

🔧 通用功能

  • 元数据管理:自动提取和管理数据元信息,支持完整的数据生命周期管理
  • 实时日志:彩色分级日志显示,支持字体大小调整
  • 产品管理:完整的产品注册和管理体系
  • 数据治理:内置数据质量检查、版本管理、安全控制

🏗️ 系统架构

整体架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   桌面GUI应用    │    │   命令行工具     │    │   配置文件       │
│   (PyQt6)      │    │   (CLI)        │    │   (JSON)        │
│   desktop_app/  │    │   vector2db/    │    │   config/       │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         └───────────────────────┼───────────────────────┘
                                 │
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   矢量数据处理   │    │   栅格数据处理   │    │   数据库存储     │
│   (vector2db)  │    │   (raster2db)  │    │  (PostgreSQL)  │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                                │
                       ┌─────────────────┐
                       │   对象存储       │
                       │   (MinIO)      │
                       └─────────────────┘

模块结构

oge-data-import/
├── desktop_app/          # 🖥️ 桌面GUI应用程序(主要界面)
│   ├── ui_components/    # UI组件
│   ├── config/          # 应用配置
│   ├── workers.py       # 后台工作线程
│   ├── main_window.py   # 主窗口
│   └── app_complete.py  # 完整应用入口
├── vector2db/            # 🗺️ 矢量数据处理模块
│   ├── core/            # 核心功能
│   ├── config/          # 配置管理
│   ├── utils/           # 工具函数
│   └── import_cli.py    # 命令行入口
├── raster2db/            # 📷 栅格数据处理模块
│   ├── raster2oge.py    # 主要处理脚本
│   ├── raster2minio.py  # MinIO存储
│   └── oge_config.json  # 栅格配置
├── sql/                  # 🗄️ 数据库脚本
├── Data/                 # 📁 测试数据
├── docs/                 # 📚 文档
└── tools/                # 🛠️ 辅助工具

🚀 快速开始

环境要求

  • Python: 3.8+
  • PostgreSQL: 12+ with PostGIS extension
  • MinIO: Latest (用于栅格数据存储)
  • 操作系统: Windows/Linux/macOS
  • GUI依赖: PyQt6 (桌面应用需要)

安装步骤

  1. 克隆项目

    git clone <repository-url>
    cd oge-data-import
  2. 安装依赖

    # 桌面应用依赖(包含所有模块)
    pip install -r desktop_app/requirements_desktop.txt
    
    # 或分别安装各模块依赖
    pip install -r vector2db/requirements.txt
    pip install -r raster2db/requirements.txt
    pip install -r desktop_app/requirements_desktop.txt
  3. 配置数据库

    # 编辑矢量数据数据库配置
    vim vector2db/config/config.json
    
    # 编辑栅格数据配置
    vim raster2db/oge_config.json
  4. 初始化数据库

    # 执行SQL脚本创建表结构
    psql -d your_database -f sql/init_new_tables.sql
    psql -d your_database -f sql/oge_vector_fact.sql
    psql -d your_database -f sql/oge_vector_import_metadata.sql
  5. 启动MinIO服务(栅格数据存储)

    # 下载并启动MinIO
    docker run -p 9000:9000 -p 9001:9001 \
      minio/minio server /data --console-address ":9001"

基本使用

🖥️ 桌面GUI应用(推荐)

# 启动桌面应用程序
cd desktop_app
python app_complete.py

# 或使用调试模式
python run_debug.py

# 或使用conda环境
run_with_conda.bat

📋 命令行使用

矢量数据导入:

# 单文件导入
python -m vector2db.import_cli "Data/example.shp" --owner admin --layer-products "example:测试产品" --create-product

# 多图层文件导入
python -m vector2db.import_cli "Data/data.gdb" --owner admin --layer-products "图层1:产品1" "图层2:产品2" --create-product

# 指定坐标系
python -m vector2db.import_cli "Data/data.shp" --target_crs EPSG:4326 --owner admin --layer-products "data:产品" --create-product

栅格数据导入:

# 栅格数据入库
cd raster2db
python raster2oge.py oge_config.json

# 或使用自定义配置
python raster2oge.py my_config.json

⚙️ 配置说明

系统包含两个核心配置文件,需要根据不同的部署环境进行相应修改:

1. 矢量数据配置 (vector2db/config/config.json)

文件位置: vector2db/config/config.json

配置内容:

{
  "database": {
    "host": "111.37.195.111",
    "port": 7021,
    "database": "oge",
    "username": "oge",
    "password": "ypfamily608"
  }
}

环境配置说明:

环境类型 配置示例 说明
本地开发 "host": "localhost" 本地PostgreSQL数据库
内网测试 "host": "172.20.70.144" 内网测试环境数据库
内网生产 "host": "172.20.70.143" 内网生产环境数据库
外网穿透 "host": "111.37.195.111" 通过内网穿透访问

2. 栅格数据配置 (raster2db/oge_config.json)

文件位置: raster2db/oge_config.json

配置结构:

{
  "postgre": {
    "Jinan-public": {
      "db_host": "111.37.195.111",
      "db_port": 7011,
      "db_user": "oge",
      "db_password": "ypfamily608",
      "describe": "济南内网穿透"
    },
    "Jinan": {
      "db_host": "172.20.70.144",
      "db_port": 30865,
      "db_user": "oge",
      "db_password": "ypfamily608",
      "describe": "济南内网"
    },
    "Jinan-test": {
      "db_host": "172.20.70.162",
      "db_port": 30865,
      "db_user": "oge",
      "db_password": "ypfamily608",
      "describe": "济南测试环境"
    },
    "local-test": {
      "db_host": "localhost",
      "db_port": 5432,
      "db_user": "oge_user",
      "db_password": "oge_password",
      "db_name": "postgres",
      "describe": "本地测试数据库"
    }
  },
  "minio": {
    "local": {
      "server_host": "172.16.102.35:9000",
      "access_key": "minioadmin",
      "secret_key": "minioadmin",
      "bucket_name": "remotesensing",
      "describe": "海阳本地测试"
    },
    "Jinan": {
      "server_host": "172.20.70.143:9006",
      "access_key": "oge",
      "secret_key": "ypfamily608",
      "bucket_name": "ogebos",
      "describe": "济南内网"
    }
  },
  "basic": {
    "root_dir": "D:/rsData/test",
    "tmp_dir": "F:/temp/cog",
    "postgre": "Jinan-test-2",
    "minio": "local"
  }
}

环境配置说明:

数据库环境配置

环境名称 配置标识 适用场景 说明
Jinan-public "postgre": "Jinan-public" 外网访问 通过内网穿透访问,端口7011
Jinan "postgre": "Jinan" 内网生产 济南内网环境,端口30865
Jinan-test "postgre": "Jinan-test" 内网测试 济南测试环境,端口30865
Jinan-test-2 "postgre": "Jinan-test-2" 外网测试 外网测试环境,端口7021
local-test "postgre": "local-test" 本地开发 本地PostgreSQL数据库

MinIO存储配置

环境名称 配置标识 适用场景 说明
local "minio": "local" 本地测试 海阳本地测试环境
Jinan "minio": "Jinan" 内网生产 济南内网MinIO服务

基础配置

配置项 说明 环境差异
root_dir 栅格数据根目录 根据实际数据存储位置调整
tmp_dir 临时文件目录 确保有足够磁盘空间
postgre 使用的数据库环境 根据上述环境配置选择
minio 使用的存储环境 根据上述环境配置选择

3. 环境配置切换指南

开发环境配置

// vector2db/config/config.json
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "database": "oge_dev",
    "username": "oge_dev",
    "password": "dev_password"
  }
}

// raster2db/oge_config.json 的 basic 部分
{
  "basic": {
    "root_dir": "D:/dev/rsData",
    "tmp_dir": "D:/dev/temp",
    "postgre": "local-test",
    "minio": "local"
  }
}

测试环境配置

// vector2db/config/config.json
{
  "database": {
    "host": "172.20.70.162",
    "port": 30865,
    "database": "oge",
    "username": "oge",
    "password": "ypfamily608"
  }
}

// raster2db/oge_config.json 的 basic 部分
{
  "basic": {
    "root_dir": "D:/test/rsData",
    "tmp_dir": "D:/test/temp",
    "postgre": "Jinan-test",
    "minio": "local"
  }
}

生产环境配置

// vector2db/config/config.json
{
  "database": {
    "host": "172.20.70.144",
    "port": 30865,
    "database": "oge",
    "username": "oge",
    "password": "ypfamily608"
  }
}

// raster2db/oge_config.json 的 basic 部分
{
  "basic": {
    "root_dir": "D:/prod/rsData",
    "tmp_dir": "D:/prod/temp",
    "postgre": "Jinan",
    "minio": "Jinan"
  }
}

4. 配置验证

数据库连接测试

# 测试PostgreSQL连接
psql -h <host> -p <port> -U <username> -d <database>

# 测试MinIO连接
python -c "
from minio import Minio
client = Minio('<server_host>', access_key='<access_key>', secret_key='<secret_key>')
buckets = client.list_buckets()
print('连接成功:', [b.name for b in buckets])
"

配置文件语法检查

# 检查JSON语法
python -m json.tool vector2db/config/config.json
python -m json.tool raster2db/oge_config.json

5. 桌面应用配置

桌面应用支持调试模式,编辑 desktop_app/config.py 进行配置:

# 调试模式配置
DEBUG_MODE = True
DEBUG_PORT = 5678

# 模块路径配置
VECTOR2DB_PATH = "../vector2db"

🗄️ 数据库设计

核心表结构

系统采用现代化的数据库设计架构:

  1. oge_data_product - 产品元数据表

    • 存储产品基本信息、空间范围、坐标系等
    • 支持多语言描述、标签管理、发布控制
    • 支持矢量和栅格两种数据类型
  2. oge_vector_fact - 矢量数据关联表

    • 关联产品与具体数据表
    • 记录数据存储位置和处理状态
  3. oge_vector_import_metadata - 入库元数据表

    • 详细的文件元数据信息
    • 包含文件编码、校验和、处理时间等

表命名规范

动态数据表采用统一命名格式:

oge_vec_{filename}_{layer}_{timestamp}_{uuid}

示例:oge_vec_s2_shandong_s2_shandong_20250731_083026_0f07d4

📦 打包部署

桌面应用打包

使用PyInstaller打包

cd desktop_app

# 打包完整应用
pyinstaller oge_data_import.spec

# 打包矢量导入应用
pyinstaller oge_vector_import.spec

# 或使用快速构建脚本
quick_build_app_complete.bat
quick_build_vector2db.bat

使用auto-py-to-exe(推荐新手)

# 安装工具
pip install auto-py-to-exe

# 启动图形化打包工具
auto-py-to-exe

Docker部署

矢量数据处理模块

# 构建镜像
docker build -t oge-vector-import .

# 运行容器
docker run -it --rm oge-vector-import

# 或使用构建脚本
build_vector2db.bat

栅格数据处理模块

cd raster2db
docker build -t oge-raster-import .
docker run -it --rm oge-raster-import

生产环境部署

  1. 环境准备

    # 安装系统依赖
    sudo apt-get install postgresql postgis python3-pip docker.io
    
    # 创建数据库用户
    sudo -u postgres createuser oge
    sudo -u postgres createdb oge
    
    # 启动MinIO服务
    docker run -d -p 9000:9000 -p 9001:9001 \
      --name minio \
      -e "MINIO_ROOT_USER=minioadmin" \
      -e "MINIO_ROOT_PASSWORD=minioadmin" \
      -v /data:/data \
      minio/minio server /data --console-address ":9001"
  2. 应用部署

    # 安装依赖
    pip install -r desktop_app/requirements_desktop.txt
    
    # 配置环境变量
    export OGE_DB_HOST=localhost
    export OGE_DB_PORT=5432
    export OGE_DB_NAME=oge
    export OGE_DB_USER=oge
    export OGE_DB_PASSWORD=your_password
    export MINIO_HOST=localhost:9000
    export MINIO_ACCESS_KEY=minioadmin
    export MINIO_SECRET_KEY=minioadmin
  3. 服务启动

    # 启动桌面应用程序
    cd desktop_app
    python app_complete.py

🔧 开发指南

开发环境搭建

  1. 克隆项目

    git clone <repository-url>
    cd oge-data-import
  2. 创建虚拟环境

    # 使用conda
    conda env create -f environment.yml
    conda activate oge-data-import
    
    # 或使用venv
    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    venv\Scripts\activate     # Windows
  3. 安装开发依赖

    pip install -r requirements.txt
    pip install -r desktop_app/requirements_desktop.txt

调试模式

桌面应用支持远程调试:

# 设置环境变量启用调试
export DEBUG_MODE=true
export DEBUG_PORT=5678

# 启动应用
cd desktop_app
python run_debug.py

在VS Code中配置调试器:

{
    "name": "桌面应用调试",
    "type": "python",
    "request": "attach",
    "connect": {
        "host": "localhost",
        "port": 5678
    }
}

代码结构

桌面应用模块 (desktop_app/)

  • main_window.py - 主窗口类
  • workers.py - 后台工作线程
  • ui_components/ - UI组件
    • vector_data_widget.py - 矢量数据组件
    • raster_data_widget.py - 栅格数据组件
    • data_type_selector.py - 数据类型选择器

矢量数据处理模块 (vector2db/)

  • core/ - 核心功能
    • file_validate.py - 文件验证
    • file_analyze.py - 文件分析
    • file_split.py - 文件拆分
    • crs_transform.py - 坐标系转换
    • data_import.py - 数据导入
  • config/ - 配置管理
  • utils/ - 工具函数

栅格数据处理模块 (raster2db/)

  • raster2oge.py - 主要处理脚本
  • raster2minio.py - MinIO存储
  • raster2postgre.py - 数据库存储
  • oge_config.py - 配置管理

🧪 测试

运行测试

# 运行所有测试
python -m pytest tests/

# 运行特定模块测试
python -m pytest vector2db/tests/
python -m pytest raster2db/tests/

# 生成测试报告
python -m pytest --html=report.html tests/

功能测试

# 桌面应用功能测试
cd desktop_app
python run_debug.py

# 矢量数据处理测试
cd vector2db
python import_cli.py "../Data/example.shp" --owner admin --layer-products "example:测试产品"

# 栅格数据处理测试
cd raster2db
python raster2oge.py oge_config.json

📚 文档导航

核心文档

开发文档

桌面应用文档

🛠️ 技术栈

核心技术

  • 数据库: PostgreSQL + PostGIS(空间数据库)
  • 对象存储: MinIO(栅格数据存储)
  • 开发语言: Python 3.8+
  • GUI框架: PyQt6(桌面应用)
  • 核心库:
    • GeoPandas - 地理数据处理
    • SQLAlchemy - 数据库ORM
    • PyProj - 坐标系转换
    • psycopg2 - PostgreSQL驱动
    • Fiona - 矢量文件读写
    • GDAL/OGR - 栅格和矢量数据处理
    • MinIO-py - 对象存储客户端

支持格式

矢量数据格式

  • ESRI Shapefile (.shp, .dbf, .shx, .prj)
  • GeoJSON (.geojson)
  • GeoPackage (.gpkg)
  • KML/KMZ (.kml/.kmz)
  • File Geodatabase (.gdb)
  • 其他OGR支持格式

栅格数据格式

  • GeoTIFF (.tif, .tiff)
  • JPEG2000 (.jp2)
  • IMG (.img)
  • 其他GDAL支持格式

🔒 安全与权限

访问控制

  • 角色权限: 管理员、操作员、查看者
  • 数据分级: 公开、内部、机密
  • 操作审计: 记录所有数据操作

数据保护

  • 存储加密支持
  • 传输加密(HTTPS)
  • 备份加密保护

🤝 贡献指南

开发流程

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

代码规范

  • 遵循 PEP 8 代码风格
  • 添加适当的注释和文档字符串
  • 编写单元测试
  • 确保所有测试通过

提交规范

feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 代码重构
test: 测试相关
chore: 构建过程或辅助工具的变动

📝 更新日志

[2.1.0] - 2025-08-21

  • 🔧 修复矢量数据导入时的图层选择问题
  • 🖥️ 优化桌面应用UI界面
  • 📊 改进实时日志显示
  • 🗄️ 更新数据库表结构
  • 🐳 优化Docker部署配置

[2.0.0] - 2025-08-07

  • 🖥️ 新增桌面GUI应用程序(基于PyQt6)
  • 📷 新增栅格数据入库功能
  • ☁️ 集成MinIO对象存储
  • 🎨 实时彩色日志显示
  • 🔧 动态字体大小调整
  • 📊 改进的用户界面和体验

[1.0.0] - 2025-07-31

  • ✨ 初始版本发布
  • 🗺️ 支持多种矢量格式导入
  • 🔄 自动坐标系转换
  • 📊 完整元数据管理
  • 🏷️ 产品注册和管理
  • 🛡️ 数据质量检查

详细更新历史请参考 CHANGELOG.md

📄 许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

📞 联系方式

如有问题或建议,请通过以下方式联系:

🙏 致谢

感谢以下开源项目的支持:


🌟 项目亮点

  • 🎯 一站式解决方案:同时支持矢量和栅格数据处理
  • 🖥️ 现代化界面:基于PyQt6的桌面应用,用户体验优秀
  • 📊 实时监控:彩色分级日志,处理过程一目了然
  • ☁️ 云原生:集成对象存储,支持分布式部署
  • 🔧 高度可配置:灵活的配置系统,满足不同需求
  • 🛡️ 企业级:完整的数据治理和质量控制
  • 🐳 容器化支持:提供Docker部署方案
  • 📦 打包工具:支持PyInstaller和auto-py-to-exe打包

注意: 本项目正在积极开发中,API可能会有变化。建议在生产环境使用前充分测试。

⭐ 如果这个项目对你有帮助,请给我们一个星标!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors