水质遥感反演系统MegaWater部署与实战指南
2026/9/2 14:26:02 网站建设 项目流程

这次我们来看一个叫 MegaWater 的水质参数反演分析系统。项目标题里有一句话:"让每一滴水,都被看得清清楚楚。"这句话放在水质遥感这块,本质上就是一个目标:把传统逐点采样的水质监测,变成基于遥感影像的大范围连续制图。

先说人话版本。MegaWater 做的事情,是把遥感影像作为输入,通过波段反射率、水体指数和实测水质数据之间的关系,反演出叶绿素 a、悬浮物、浊度、透明度、总氮、总磷、COD 等水质参数的空间分布。换句话说,以前你要知道一条河的水质,得开着船去各个断面采水样,一瓶一瓶测;现在则可以拿一景卫星影像,直接生成整条流域的水质参数分布图。

它最值得关注的特点有四个:一是面向遥感/GIS 数据流程,不是普通的 Web 展示系统;二是反演模型可切换,既有传统经验模型,也能接入机器学习和深度学习模型;三是支持批量影像处理,适合时间序列分析和流域对比;四是输出是标准空间数据产品,比如 GeoTIFF、PNG 制图和 CSV 统计表,方便后续进 GIS 或业务系统。

这篇文章会带你把 MegaWater 从环境准备、数据校验、单景反演测试、模型训练、批量任务到接口调用完整走一遍,最后给出常见的启动报错和资源占用排查方式。如果你是做环境监测、水利信息化、遥感应用或者研究生论文相关方向,这篇可以直接收藏。

由于 MegaWater 本身在不同版本里的接口路径、模型格式和启动脚本可能存在差异,文中的命令和代码会以通用模板为主,具体到本机时需要按照实际项目目录和配置文件做少量调整。这不妨碍验证整体流程,你只要把"输入影像在哪里、模型权重在哪里、输出目录在哪里"这三个信息对齐,就基本能跑起来。

1. MegaWater 核心能力速览

先给一张速览表,方便快速判断这个系统是不是你需要的。

能力项说明
项目定位水质参数遥感反演分析系统,输入遥感影像,输出水质参数空间分布结果
核心能力叶绿素 a、悬浮物、浊度、透明度、总氮/总磷、COD 等参数反演(以实际版本支持的参数列表为准)
模型机制支持经验模型、半经验模型,并可扩展机器学习和深度学习反演模型
输入数据多光谱/高光谱遥感影像,如 Landsat、Sentinel-2、高分系列、无人机高光谱影像
输出数据GeoTIFF 栅格、PNG 制图、CSV 统计表、典型断面序列数据等
启动方式命令行 / Web 服务 / API 接口,按实际版本确认
硬件要求常规 CPU 可完成单景中小影像和传统模型推理;大范围影像或深度学习模型建议 8G 以上显存 GPU
操作平台Linux / Windows 均可,推荐 Linux 服务器做批量和 API 服务部署
批量任务支持影像目录批量处理、时间序列批量反演(以实际版本为准)
接口能力提供 HTTP API 调用,便于接入外部业务系统
适合场景河湖水质遥感监测、环境保护督察、流域水环境评估、科研制图、应急监测

从表格可以看出来,MegaWater 不是一套"上传一张图片,看一个好看结果"的演示系统,它是偏生产和研究向的水质遥感数据处理工具。价值点在于把采样数据、影像数据和统计建模串成一条完整流程,减少手工用 ENVI、ArcGIS、Python 脚本反复倒腾的中间环节。

2. 水质参数反演原理与数据处理链路

要顺利使用 MegaWater,先得理解水质参数反演在遥感上是怎么发生的。

水体中的不同组分对太阳辐射的吸收和散射特性不同。例如叶绿素 a 在蓝紫光波段和红光波段存在明显吸收峰,在近红外附近会出现反射峰;悬浮物浓度升高时,红光和近红外波段的反射率会明显增加;透明度高的水体在蓝绿波段反射率通常比较低。遥感反演的本质,就是利用这些光谱特征,建立"地表反射率/离水辐射亮度"与"实测水质参数浓度"之间的映射关系。

完整的反演链路一般包括六个步骤:

  1. 影像获取与预处理:获取多光谱/高光谱影像,完成辐射定标、大气校正、水体掩膜。
  2. 实测水质样本准备:获取采样点的实测水质数据,包括采样时间、经纬度坐标、参数浓度。
  3. 波段特征提取:从预处理影像中提取采样点对应位置的反射率值,计算波段比值、归一化差值指数等特征。
  4. 模型训练与优选:使用样本数据训练回归模型,使用决定系数 R2、均方根误差 RMSE、相对误差等指标评估精度。
  5. 全图反演计算:将训练好的模型应用于整幅影像,生成水质参数连续分布图。
  6. 制图与统计分析:输出栅格、专题图,统计河流/湖泊范围内的参数均值、最大值、超标面积等。

经验模型里常用的是单波段模型、波段比值模型和归一化差异指数模型,例如把NIR - RedNIR + Red组合成指数,再和悬浮物浓度做回归。这类模型结构简单、可解释性强,但精度受区域和水体类型影响较大。机器学习模型可以把多个波段反射率、波段指数、地形因子一起输入 RandomForest、SVR、XGBoost 等模型,适合数据量大、水体类型复杂的场景。深度学习模型则通常以影像 patch 为输入,用 CNN 或 U-Net 直接预测参数分布,对训练样本数量和数据质量要求更高。

MegaWater 的价值就在这里:它把这些步骤封装成系统化流程,使用者不需要每次都在多个软件之间来回切换,直接按项目配置输入影像和实测数据,就能完成建模和反演。

3. 适用场景与使用边界

适合用 MegaWater 的场景,大致有三类。

第一类是环境监测部门。传统水质监测站点是离散的,站点之间的大面积区域是盲区。使用 MegaWater 做遥感反演,可以在两次采样任务之间补全空间分布,识别污染高值区、异常区域,辅助布设新的采样点。

第二类是水利和流域管理单位。在汛期、蓝藻暴发、水质恶化等事件中,遥感影像时间分辨率高、覆盖范围广,可以快速生成同一时间不同断面的水质分布对比图,为调度决策提供辅助信息。

第三类是高校和科研院所。研究人员可以用它跑时间序列反演,分析某条河流十几年间的参数变化趋势,也可以把 MegaWater 的中间流程拆出来,替换自己的模型做精度对比实验。

不适合的情况也要说清楚。MegaWater 不是一个化学分析仪器,它不能代替实验室化验,反演结果本质上是基于光学信号的估算值,精度依赖影像质量、大气校正效果、水体光学特性和样本代表性。云层遮挡、水体面积过小、风浪较大、富营养化严重导致水面反射异常,这些情况下反演结果都可能不稳定。另外,如果项目没有提供实测水质数据,只靠影像做无监督反演,精度很难保证,结果只能作为粗略参考。

合规边界必须强调。遥感影像数据要从官方数据平台或合法授权渠道获取,如果涉及高分辨率影像和敏感区域,还需要遵守测绘地理信息、数据安全相关法规。实测水质数据如果来自第三方或企业内部,需要确认数据授权范围,不能把未授权的采样点信息直接公开发布。涉及具体企业排污口、饮用水源地等敏感位置时,成图发布前要做脱敏处理,防止引发不必要的数据风险。

4. 环境准备与前置条件

在正式部署 MegaWater 前,按下面的清单做环境检查,能省掉后面大量排查时间。

4.1 硬件环境

  • CPU:建议 4 核以上。单景中小影像的波段计算和传统模型推理,普通台式机、工作站都可以。
  • 内存:建议 16G 以上。处理大影像时,按分块读取方式可以把内存占用控制下来,但内存太小会频繁交换磁盘。
  • 显卡:如果只跑传统经验模型和机器学习模型,CPU 就够;如果需要训练或推断深度学习反演模型,建议 NVIDIA 显卡 8G 显存以上。
  • 磁盘:保留至少 50G 可用空间。原始影像、预处理中间文件、反演结果和模型文件都会占用空间,时间序列分析时数据量增长很快。

4.2 软件依赖

MegaWater 这类遥感反演系统最常见的运行环境是 Python,核心依赖通常包括:

  • Python 3.9 / 3.10 / 3.11,具体以项目要求为准
  • GDAL / rasterio:栅格影像读写和坐标投影处理
  • numpy / pandas / scikit-learn:波段计算和数据建模
  • joblib / pickle:模型持久化
  • Flask / FastAPI:Web 服务和 API 接口
  • torch / tensorflow:如果需要深度学习模型
  • Matplotlib / cartopy:制图与空间可视化

建议先建一个独立虚拟环境,避免和系统 Python、其他项目的依赖互相污染。

# 创建虚拟环境,Python 版本以项目要求为准 python -m venv mega_water_env # Linux / macOS 激活 source mega_water_env/bin/activate # Windows 激活 # mega_water_env\Scripts\activate # 安装基础依赖,具体版本号以项目 requirements.txt 为准 pip install -U pip pip install rasterio numpy pandas scikit-learn joblib flask

4.3 环境自检

安装完成后,先跑一段环境检查脚本,确认关键库都能正常导入。

import sys import numpy import pandas import sklearn import rasterio print("Python 版本:", sys.version) print("NumPy 版本:", numpy.__version__) print("Pandas 版本:", pandas.__version__) print("scikit-learn 版本:", sklearn.__version__) print("rasterio 版本:", rasterio.__version__) # 检查 GPU 可用性(如果安装 PyTorch) try: import torch print("CUDA 可用:", torch.cuda.is_available()) if torch.cuda.is_available(): print("GPU 数量:", torch.cuda.device_count()) print("GPU 名称:", torch.cuda.get_device_name(0)) except ImportError: print("未安装 PyTorch,使用深度学习模型时需要安装。")

这一步输出正常,说明 Python 环境基本没问题。后续如果启动报缺库,再按报错逐个补装即可。

5. 安装部署与启动方式

MegaWater 的安装部署方式取决于具体发布形态。针对不同的交付方式,下面分别给出对应的启动思路。

5.1 命令行启动

命令行模式适合做单景反演测试和批处理任务。常见的启动形如:

# 进入项目目录 cd MegaWater # 查看命令行参数 python main.py --help # 单景反演示例,参数名以实际版本为准 python main.py \ --scene ./inputs/sentinel2_20250101.tif \ --model ./models/rf_chla.joblib \ --parameter CHLA \ --output ./outputs/chla_20250101.tif \ --log ./logs/inversion.log

先用--help把命令行参数确认清楚。不同版本可能使用--input--image--weights这类命名,直接复制别人的命令不一定能跑。

5.2 Web 服务启动

MegaWater 如果带 Web 管理界面,一般会提供启动脚本。启动后可以通过浏览器访问服务地址,上传影像、选择参数、查看反演结果。

# Web 服务启动示例,默认监听 8000 端口 python app.py --host 0.0.0.0 --port 8000

浏览器访问http://127.0.0.1:8000,如果打开的是系统管理页面,说明 Web 服务启动成功。注意:如果只在本机调试,建议监听127.0.0.1,不要暴露到公网,防止接口被未授权调用。

5.3 Docker 部署

如果项目提供 Docker 镜像,部署会更干净,不用在宿主机装 Python 环境。

# 拉取镜像示例,镜像名称以实际提供为准 docker pull megawater/megawater:latest # 运行容器,映射端口和数据目录 docker run -d \ --name megawater \ -p 8000:8000 \ -v /data/inputs:/data/inputs \ -v /data/outputs:/data/outputs \ megawater/megawater:latest

Docker 部署的关键是数据目录挂载。把输入影像和输出结果目录挂载到宿主机,后续通过文件系统或 API 访问都会方便很多。启动后查看容器日志确认没有异常:

docker logs -f megawater

5.4 工程目录建议

不管哪种启动方式,建议都按下面的目录组织数据,尤其是做批量任务的时候:

MegaWater/ ├── configs/ # 配置文件,如模型参数、波段配置 ├── inputs/ │ ├── scenes/ # 原始遥感影像 │ └── samples/ # 实测水质数据 CSV ├── models/ # 训练好的模型文件 ├── outputs/ # 反演结果、制图、统计表 └── logs/ # 运行日志

分目录管理的最大好处是批量任务出问题时,可以快速定位是影像问题、样本问题还是输出路径问题。

6. 功能测试与效果验证

部署启动不是终点,关键是判断反演结果能不能用。这里给出一套可操作的功能测试流程。

6.1 输入数据校验

MegaWater 的所有计算结果都建立在影像坐标和波段信息正确的基础上。先校验输入影像。

import rasterio scene_path = "./inputs/sentinel2_20250101.tif" with rasterio.open(scene_path) as src: print("波段数:", src.count) print("宽度:", src.width, "高度:", src.height) print("坐标系:", src.crs) print("数据范围:", src.bounds) print("波段顺序:", src.descriptions if src.descriptions else "无描述") print("NoData 值:", src.nodata)

检查要点:

  • 坐标系必须是地理坐标或投影坐标,不能是"未定义"。如果crs为空,后续空间统计和出图都会出问题。
  • 波段数要大于等于 4。水质反演常用蓝、绿、红、近红外四个波段,波段太少的影像很难构建有效模型。
  • NoData 值如果为空,水面掩膜计算时会异常,可能把陆地像素也纳入反演范围。
  • 如果影像中有云,建议先做云掩膜,避免云层反射干扰反演值。

6.2 水体指数计算测试

水体提取是水质反演的前置步骤。先用归一化差异水体指数(NDWI)做一个快速验证,确认影像数据和波段运算链路正常。

import rasterio import numpy as np def calc_index(green_band, nir_band, output_path, nodata=-9999): """ 计算归一化差异指数,常见形式为 (green - nir) / (green + nir)。 实际波段选取根据传感器配置调整。 """ with rasterio.open(green_band) as src_g, rasterio.open(nir_band) as src_n: green = src_g.read(1).astype("float32") nir = src_n.read(1).astype("float32") profile = src_g.profile with np.errstate(divide="ignore", invalid="ignore"): index = (green - nir) / (green + nir) index = np.where(np.isinf(index) | np.isnan(index), nodata, index) profile.update(dtype="float32", nodata=nodata) with rasterio.open(output_path, "w", **profile) as dst: dst.write(index, 1) calc_index( "./inputs/sentinel2_20250101_green.tif", "./inputs/sentinel2_20250101_nir.tif", "./outputs/ndwi_20250101.tif" ) print("NDWI 计算完成。")

判断标准:生成的栅格在水体区域为正值,陆地和水体边界清晰,打开后可以看到河湖轮廓。如果整个文件全是异常值,优先检查输入波段是不是正确的绿光和近红外波段,以及影像是否经过了辐射定标。

6.3 传统机器学习反演建模测试

水质反演系统的核心能力是模型。用 scikit-learn 构建一个随机森林回归模型,对比实测水质数据和遥感特征。

import pandas as pd import numpy as np from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error # 样本数据:遥感特征 + 实测水质参数 # 假设 CSV 包含 blue, green, red, nir, ndwi, tss 等列 data = pd.read_csv("./inputs/samples/sample_tss.csv") print("样本数量:", len(data)) features = ["blue", "green", "red", "nir", "ndwi"] X = data[features].values y = data["tss"].values X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) model = RandomForestRegressor( n_estimators=300, max_depth=10, min_samples_leaf=2, n_jobs=-1, random_state=42 ) model.fit(X_train, y_train) y_pred = model.predict(X_test) print("R2:", round(r2_score(y_test, y_pred), 4)) print("RMSE:", round(np.sqrt(mean_squared_error(y_test, y_pred)), 4)) print("MAE:", round(mean_absolute_error(y_test, y_pred), 4)) # 保存模型,后续用于整景反演 import joblib joblib.dump(model, "./models/rf_tss.joblib")

判断成功标准:

  • R2 在 0.6 以上,RMSE 在合理范围内,说明模型对测试集有一定解释能力。
  • R2 很低并不代表系统坏了,更多是特征没选好或样本量不够。先加波段比值、加入水体类型分组,再重新训练。
  • 样本数量少于 30 时,先不要拆分训练集测试集,改用交叉验证评估,否则结果波动很大。

6.4 整景反演与制图输出

模型训练完成后,用模型对整幅影像做逐像元反演。这里的核心逻辑是把模型预测应用到所有水体像元上。

import rasterio import numpy as np import joblib from sklearn.ensemble import RandomForestRegressor from pyproj import Transformer def predict_scene(model, green_path, nir_path, water_mask_path, output_path, nodata=-9999): """ 整景反演示例:读取波段、计算特征、逐像元预测。 实际项目会封装成 mw invert 之类的命令。 """ model: RandomForestRegressor = joblib.load(model) with rasterio.open(green_path) as src_g, \ rasterio.open(nir_path) as src_n, \ rasterio.open(water_mask_path) as src_w: green = src_g.read(1).astype("float32") nir = src_n.read(1).astype("float32") water_mask = src_w.read(1) profile = src_g.profile # 计算特征 ndwi = (green - nir) / (green + nir) # 这里假设模型输入为 green, nir, ndwi 三列 height, width = green.shape output = np.full((height, width), nodata, dtype="float32") # 对水体像元逐行预测,避免一次性构建超大数组 rows, cols = np.where(water_mask > 0) for i in range(0, len(rows), 10000): idx = slice(i, min(i + 10000, len(rows))) r = rows[idx] c = cols[idx] features = np.column_stack([ green[r, c], nir[r, c], ndwi[r, c] ]) output[r, c] = model.predict(features) profile.update(dtype="float32", nodata=nodata, count=1) with rasterio.open(output_path, "w", **profile) as dst: dst.write(output, 1) predict_scene( "./models/rf_tss.joblib", "./inputs/sentinel2_20250101_green.tif", "./inputs/sentinel2_20250101_nir.tif", "./outputs/water_mask_20250101.tif", "./outputs/tss_20250101.tif" ) print("整景反演完成。")

生成的结果可以在 QGIS、ArcGIS 或者 MegaWater 自带的结果预览页面里打开,检查水体内部是否有明显的带状或点状异常,边界是否和水体掩膜一致。输出值应该是连续浮点数,不能是整片 0 或整片 nodata。

6.5 结果统计与精度复核

反演图不等于最终结论。在关键断面、取样点附近做结果复核,拿出一组独立实测数据对比反演值和实测值。

import pandas as pd # 实测验证数据 validation = pd.read_csv("./inputs/samples/validation_tss.csv") inversion_points = pd.read_csv("./outputs/tss_points.csv") merged = pd.merge( inversion_points, validation[["sample_id", "measured_tss"]], on="sample_id", how="inner", ) merged["absolute_error"] = abs(merged["predicted_tss"] - merged["measured_tss"]) print(merged.describe()) mae = merged["absolute_error"].mean() print("验证点位平均绝对误差:", round(mae, 4))

如果验证点误差明显大于训练集误差,说明模型存在过拟合,或者训练样本和验证样本来自不同时间和水体条件。这时候不要继续调参,先检查训练样本和验证样本的分布是否一致。

7. 批量任务与接口 API 调用

MegaWater 真正好用的地方在批量。大量历史影像需要做时间序列反演、多个参数需要并行出图时,纯手工操作不可行,必须走批量任务和接口。

7.1 批量目录任务

批量任务的基本模式是:指定输入影像目录、模型目录、输出目录,系统自动遍历影像并执行反演。

# 批量反演目录示例,参数名以实际版本为准 python run_batch.py \ --input_dir ./inputs/scenes \ --model_dir ./models \ --output_dir ./outputs \ --parameter TSS,CHLA,NTU \ --workers 4 \ --log_file ./logs/batch_20250101.log

批量任务要注意三点:

  • workers表示并行进程数,设置太高容易把内存吃满,建议先设置为 CPU 核数的一半。
  • 输出目录里每个参数单独建子目录,结果文件用影像名加参数名命名,避免互相覆盖。
  • 批量任务必须开启日志。任何影视渲染和水质反演批量任务都一样,日志是事后排查问题的唯一线索。

7.2 HTTP API 调用

如果 MegaWater 部署了 API 服务,可以把反演能力集成到环境监测平台、数据中台或 Web 项目里。调用过程一般是:提交任务、等待执行、查询结果。

import requests import time api_base = "http://127.0.0.1:8000" task_payload = { "scene_path": "/data/inputs/landsat8_20250201.tif", "parameter": "TSS", "model": "rf_tss", "output_dir": "/data/outputs", "callback_url": "http://127.0.0.1:8080/megawater/callback" } # 提交任务 resp = requests.post(f"{api_base}/api/inversion/tasks", json=task_payload, timeout=30) print("提交状态码:", resp.status_code) task_id = resp.json().get("task_id") print("任务 ID:", task_id) # 轮询任务状态 for _ in range(60): status_resp = requests.get(f"{api_base}/api/inversion/tasks/{task_id}", timeout=30) data = status_resp.json() print("当前状态:", data.get("status")) if data.get("status") in ("SUCCESS", "FAILED"): print("结果信息:", data) break time.sleep(5)

也可以使用 curl 快速验证接口连通性:

curl -X POST http://127.0.0.1:8000/api/inversion/tasks \ -H "Content-Type: application/json" \ -d '{ "scene_path": "/data/inputs/landsat8_20250201.tif", "parameter": "TSS", "model": "rf_tss", "output_dir": "/data/outputs" }'

注意,上面的api/inversion/tasks是通用 RESTful 任务模式示例,不代表 MegaWater 一定使用这个路径。实际接口要以系统提供的 OpenAPI 文档或项目 README 为准。任务接口的好处是支持异步:影像反演可能耗时几分钟到几十分钟不等,提交任务后可以先干别的,再回来轮询结果或接收回调。

7.3 批量失败重试建议

批量任务数量大时,总会遇到个别影像因为格式、坐标或缺失波段而失败。建议在脚本里加入失败重试机制。

# 批量任务失败重试示例 python run_batch.py \ --input_dir ./inputs/scenes \ --model_dir ./models \ --output_dir ./outputs \ --parameter TSS \ --workers 4 \ --max_retry 3 \ --retry_delay 10 \ --skip_existing

--skip_existing很实用,它会跳过已经生成输出文件的影像,这样程序中断后重新执行,不会重复处理全部任务。

8. 资源占用与性能观察

系统跑起来之后,重点观察三件事:内存、显存和磁盘 IO。

8.1 显存占用观察

如果 MegaWater 启用了深度学习反演模块,使用 GPU 推理时观察显存。

# 实时查看显存占用 nvidia-smi -l 2

也可以单独用 Python 监控判断当前显存占用是否异常:

import torch if torch.cuda.is_available(): print("当前显存占用(MB):", torch.cuda.memory_allocated() / 1024 ** 2) print("显存缓存(MB):", torch.cuda.memory_reserved() / 1024 ** 2)

深度学习模型推理显存占用由输入 patch 大小、batch size 和模型参数量决定。如果显存不足,优先减小 patch 尺寸或 batch size,而不是换更大的模型。传统机器学习的随机森林反演主要吃 CPU 和内存,显存占用通常为 0。

8.2 CPU 与内存观察

批量任务过程中,系统负载会比较高。

# 查看 CPU 和内存占用 top # 或者使用 htop,可交互查看更多信息 htop

多进程并行时,每个 worker 都会占用内存。如果机器内存是 16G,workers建议先设置为 2 到 4,跑一轮看内存峰值再逐步增加。影像读取时如果采用的是整幅读入内存,一个 8000x8000 像素的 float32 影像仅单个波段就需要约 256M 内存,多个波段加中间计算结果,峰值很容易突破 2G。分块读取和分块计算是处理大影像的必备思路。

8.3 降低资源占用的常规手段

  • 改用分块读写影像,而不是一次性src.read(1)读取全图。
  • 对模型输入做特征裁剪,去掉相关性极低的波段和指数,降低特征维度。
  • 深度学习推理使用半精度(float16),在支持 Tensor Cores 的显卡上能显著降低显存占用。
  • 批量任务使用进程池代替无限多 worker。
  • 输出结果设置合适的压缩选项,GeoTIFF 使用 LZW 压缩可减少磁盘占用。

这些优化在 MegaWater 的 web 界面或配置文件中一般都有参数控制,命令行跑批时优先通过参数调整。

9. 常见问题与排查方法

在实际使用中,最容易出问题的点集中在影像坐标、依赖库、显存和接口调用上。下面给出常见排查表。

问题现象可能原因排查方式解决方案
启动时报缺少_gdalrasterio导入失败GDAL 动态库版本不匹配运行python -c "import rasterio; print(rasterio.__version__)"重新安装匹配 Python 版本的 rasterio,或安装系统级 GDAL
启动后页面无法访问服务未启动或端口被占用查看启动日志,运行netstat -tlnp | grep 8000更换端口后重启服务,或关闭占用端口的进程
输入影像打不开,报坐标系统错误初始影像没有空间参考信息用 GIS 软件查看影像元数据先给影像定义正确坐标系,或重新下载成品数据
反演结果全图都是 0 或 nodata水体掩膜未正确生成,或特征值范围异常检查水体掩膜和中间指数图层重新计算水体掩膜,确认影像已经过大

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询