docs

项目综合说明文档

目录

  1. 项目概述
  2. 用户使用说明
  3. 项目结构说明
  4. 计算逻辑说明

项目概述

本项目(瓦斯数据与赋存规律分析系统)是一个基于 Web 的地理空间数据计算与可视化系统,主要用于渔网点数据的多指标综合评价计算和空间插值分析。系统采用前后端分离架构,前端使用 Leaflet.js 进行地图可视化,后端使用 Node.js + Express 提供 API 服务,Python 脚本执行复杂的数值计算。

核心功能


用户使用说明

1. 系统界面介绍

系统界面分为三个主要部分:

1.1 顶部导航栏

1.2 左侧面板(配置面板)

根据当前模式显示不同的内容:

图层信息模式

计算编辑模式

1.3 右侧面板(结果面板)

根据当前模式显示不同的内容:

图层信息模式

计算编辑模式

2. 计算功能使用

2.1 熵权法计算

适用场景:当需要根据数据本身的变异程度自动确定权重时使用。

操作步骤

  1. 在左侧面板选择数据表和字段
  2. 选择计算方法为”熵权法”
  3. 配置参数:
    • 标准化方法:选择 min-max(最小-最大标准化)或 z-score(Z分数标准化)
    • 指标影响方向:设置每个指标是正向影响(1)还是负向影响(-1)
  4. 点击”计算”按钮

效果说明

2.2 G1法计算

适用场景:当有专家确定的指标重要性排序时使用。

操作步骤

  1. 选择数据表和字段
  2. 选择计算方法为”G1法”
  3. 配置参数:
    • r值列表:相邻指标的重要度比值(通常范围 1.0-1.8)
    • 例如:如果有4个指标,需要3个r值,表示第1个指标与第2个指标的重要度比、第2个与第3个的比、第3个与第4个的比
  4. 点击”计算”按钮

效果说明

2.3 组合权重法计算

适用场景:结合主观权重(G1法)和客观权重(熵权法)的优势。

操作步骤

  1. 选择数据表和字段
  2. 选择计算方法为”组合权重法(罗金辉)”或”组合权重法(博弈论)”
  3. 配置参数:
    • G1 r值:G1法的重要度比值
    • 标准化方法:数据标准化方法
    • 指标影响方向:每个指标的影响方向
  4. 点击”计算”按钮

效果说明

2.4 加权求和法计算

适用场景:当需要手动指定各指标的权重时使用。

操作步骤

  1. 选择数据表和字段
  2. 选择计算方法为”加权求和法”
  3. 配置参数:
    • 权重设置:为每个字段手动设置权重值(权重会自动归一化)
    • 标准化方法:数据标准化方法
    • 指标影响方向:每个指标的影响方向
  4. 点击”计算”按钮

效果说明

3. 可视化功能使用

3.1 渲染方式选择

每个计算结果支持三种渲染方式:

点符号图

热力图

阈值分类

3.2 颜色方案选择

系统提供多种颜色方案:

3.3 值域设置

3.4 应用设置

修改可视化参数后,点击”应用设置”按钮:

3.5 透明度调整

项目结构说明

1. 整体架构

wasi_4/
├── client/                    # 前端客户端代码
│   ├── edit_calculate.js     # 计算编辑面板主逻辑
│   └── edit_calculate.css    # 样式文件
├── server/                    # 后端服务器代码
│   ├── index.js              # Express 服务器入口
│   ├── routes/               # API 路由
│   │   ├── yw.js             # 渔网计算相关 API
│   │   ├── interpolate.js    # 插值相关 API
│   │   ├── editcalc.js       # 数据编辑相关 API
│   │   ├── layers.js         # 图层管理 API
│   │   └── rasters.js        # 栅格管理 API
│   ├── services/             # 服务层
│   │   ├── pythonRunner.js   # Python 脚本执行服务
│   │   └── rasterService.js  # 栅格处理服务
│   ├── utils/                # 工具函数
│   │   ├── db_yw.js          # 渔网数据库工具
│   │   └── db.js             # 通用数据库工具
│   ├── scripts/              # Python 脚本
│   │   ├── interpolate.py    # 插值脚本(完整版)
│   │   ├── interpolate_v2.py # 插值脚本(简化版)
│   │   └── interpolate_simple.py # 插值脚本(最小依赖版)
│   ├── compute_yw.py         # 渔网计算主脚本
│   └── requirements.txt      # Python 依赖
├── sample/                    # 示例数据和计算模块
│   ├── Entropy.py            # 熵权法计算模块
│   ├── G1.py                 # G1法计算模块
│   ├── CombineWeight.py      # 组合权重计算模块
│   └── 83yuwang/             # 示例 Shapefile 数据
├── db/                        # 数据库文件
│   ├── 83yuwang.sqlite       # 主数据库(SpatiaLite)
│   └── ...
├── qgis2web_2025_09_19-16_43_01_978602/  # QGIS 导出静态文件
│   ├── index.html            # 主 HTML 文件
│   ├── js/                   # JavaScript 库
│   ├── css/                  # 样式文件
│   └── data/                 # 静态数据文件
└── package.json              # Node.js 依赖配置

2. 前端架构

2.1 技术栈

2.2 核心文件说明

client/edit_calculate.js

qgis2web_2025_09_19-16_43_01_978602/index.html

2.3 前端数据流

用户操作
  ↓
edit_calculate.js 处理事件
  ↓
调用 API(fetch)
  ↓
后端处理并返回数据
  ↓
更新前端状态
  ↓
重新渲染 UI 和地图图层

3. 后端架构

3.1 技术栈

3.2 核心文件说明

server/index.js

server/routes/yw.js

server/routes/interpolate.js

server/services/pythonRunner.js

server/utils/db_yw.js

3.3 后端数据流

HTTP 请求
  ↓
Express 路由
  ↓
数据库操作 / Python 脚本调用
  ↓
返回 JSON 响应

4. 数据库结构

4.1 主数据库(83yuwang.sqlite)

表1:yw_point

表2:yw_run

表3:yw_value

4.2 空间数据库特性

5. Python 计算模块

5.1 计算脚本

server/compute_yw.py

sample/Entropy.py

sample/G1.py

sample/CombineWeight.py

5.2 插值脚本

server/scripts/interpolate_v2.py


计算逻辑说明

1. 数据标准化

1.1 Min-Max 标准化

公式

原理

代码位置sample/Entropy.pystandardize_data() 函数

1.2 Z-Score 标准化

公式std_value = (value - mean) / std

原理

代码位置sample/Entropy.pystandardize_data() 函数

2. 熵权法计算

2.1 计算原理

熵权法是一种客观赋权方法,基于信息熵理论。信息熵越大,指标提供的信息量越少,权重越小;反之,信息熵越小,指标提供的信息量越多,权重越大。

2.2 计算步骤

步骤1:计算比重矩阵

对于标准化后的数据矩阵,计算每个值在所在列中的比重:

p_ij = x_ij / Σ(x_ij)  (i=1,2,...,n; j=1,2,...,m)

其中:

步骤2:计算信息熵

E_j = -k * Σ(p_ij * ln(p_ij))  (i=1,2,...,n)

其中:

步骤3:计算权重

w_j = (1 - E_j) / Σ(1 - E_k)  (k=1,2,...,m)

权重归一化,确保 Σw_j = 1

2.3 代码实现

文件sample/Entropy.py

关键函数

调用流程

compute_yw.py::compute_entropy()
  ↓
ew.standardize_data()  # 标准化
  ↓
ew.calculate_entropy()  # 计算权重
  ↓
加权求和计算综合得分

3. G1法计算

3.1 计算原理

G1法是一种主观赋权方法,基于专家确定的指标重要性排序和相邻指标的重要度比值。

3.2 计算步骤

步骤1:确定指标排序

专家确定指标的排序关系,例如:

U1 > U2 > U3 > ... > Um

其中 > 表示”重要于”。

步骤2:确定重要度比值

专家确定相邻指标的重要度比值:

r1 = ω1* / ω2*  (第1个指标与第2个指标的重要度比)
r2 = ω2* / ω3*  (第2个指标与第3个指标的重要度比)
...
r(m-1) = ω(m-1)* / ωm*  (第m-1个指标与第m个指标的重要度比)

通常 r 的取值范围为 [1.0, 1.8]:

步骤3:计算最次要指标的权重

ωm* = 1 / [1 + Σ(i=1到m-1) Π(g=i到m-1) r_g]

其中:

步骤4:反向计算其他指标权重

ω(m-1)* = r(m-1) * ωm*
ω(m-2)* = r(m-2) * ω(m-1)*
...
ω1* = r1 * ω2*

步骤5:归一化

ωi = ωi* / Σ(ωj*)  (j=1,2,...,m)

3.3 代码实现

文件sample/G1.py

关键函数

调用流程

compute_yw.py::compute_g1()
  ↓
g1w.calculate_g1_weights()  # 计算 G1 权重
  ↓
ew.standardize_data()  # 标准化数据
  ↓
加权求和计算综合得分

4. 组合权重法计算

4.1 罗老师组合权重法

原理: 组合权重公式:

w = t * w_G1 + (1-t) * w_I

其中:

差异系数计算

G_G1 = std(w_G1) / mean(w_G1)

组合系数计算

t = (2 / (m-1)) * G_G1

如果 m=1(单指标),则 t=0.5

约束t 限制在 [0, 1] 范围内。

代码实现

4.2 博弈论组合权重法

原理: 通过求解优化问题确定最优组合系数,使组合权重同时接近两种权重。

目标函数

min ||λ1*w1 + λ2*w2 - w1||² + ||λ1*w1 + λ2*w2 - w2||²

约束条件:

λ1 + λ2 = 1

求解方法

  1. 对目标函数求偏导并令其为 0,得到线性方程组
  2. 求解线性方程组得到 λ1λ2
  3. 归一化:λ1* = |λ1| / (|λ1| + |λ2|), λ2* = |λ2| / (|λ1| + |λ2|)

组合权重

w = λ1* * w1 + λ2* * w2

代码实现

5. 加权求和法计算

原理: 用户手动指定各指标的权重,直接进行加权求和。

公式

score_i = Σ(w_j * x_ij)  (j=1,2,...,m)

其中:

代码实现

6. 综合得分计算

所有计算方法最终都通过加权求和计算综合得分:

score_i = Σ(w_j * std_ij)  (j=1,2,...,m)

其中:

代码位置server/compute_yw.py 的各个 compute_*() 函数


附录

A. 技术栈总结

前端

后端

计算