LXX
读完需要
速读仅需 1 分钟
前言:
在湖底地形变化不大的情况下,湖区的水面面积主要受到水位的影响,水位要素中最简单的一种观测值就是水位,虽然遥感影像数据可以带来空间意义上的水面变化信息,但当前卫星遥感数据在时间上还无法达到水位监测数据同等的获取频率。定量地研究湖泊面积和水位之间的关系,能够从水位数据推求出遥感手段无法监测湖泊时的湖水面积。本文分享通过水位数据得到水面面积的方法。
希望各位同学点个关注,点个小赞,这将是更新的动力,不胜感激❥(^_-)
1
对于前期中从 ICESat-2-ATL13 数据中提取到的水位数据,可利用模型来预测水面面积,以弥补云天状况下光学遥感难以监测到水面范围的不足。能够为利用遥感影像实时监控水情空间动态变化提供可行的方法。这里我们主要用四种方法:
1.1
线性模型
依据水位与面积两个变量之间的关系,构建自变量与应变量之间的回归函数,水位为因变量,面积为自变量,因变量(y)随自变量和随机误差的变化而改变。回归函数模型如下式所示:
式中:( ) x1, x2, … ,xn 为 y 对自变量的“回归函数”;b 为随机误差值。
1.2
指数模型
指数模型假设面积和水位之间的关系是指数型的,即水位的变化随着面积的增加呈现指数增长或衰减。
参数 a 和 b 分别表示指数模型的比例因子和指数系数。这种模型通常用于描述非线性变化较为显著的情况。
1.3
二次多项式模型
二次多项式模型假设面积和水位之间的关系可以用一个二次多项式来描述。
参数 a 是面积的平方项的系数,表示面积平方对水位的影响。参数 b 是面积的一次项系数,表示面积对水位的线性影响。参数 c 是截距,表示当面积为零时的水位。
1.4
三次多项式模型
三次多项式模型假设面积和水位之间的关系可以用一个三次多项式来描述。
参数 a 是面积的三次项系数,表示面积三次方对水位的影响。参数 b 是面积的平方项系数,表示面积平方对水位的影响。参数 c 是面积的一次项系数,表示面积对水位的线性影响。参数 d 是截距,表示当面积为零时的水位。
2
实现代码
以线性模型为例,代码示例如下:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import numpy as np
# 读取 CSV 文件
csv_file_path = "D:/other/数据1.csv"
df = pd.read_csv(csv_file_path)
# 提取水位和水体面积数据
mean = df["h"].values.reshape(-1, 1)
area = df["area"].values
# 线性回归模型
model = LinearRegression()
model.fit(mean, area)
# 获取模型的参数
a = model.coef_[0]
b = model.intercept_
r_squared = model.score(mean, area)
# 生成线性拟合线
x_range = np.linspace(min(mean), max(mean), 100)
y_pred = a * x_range + b
# 绘制散点图和拟合线
#plt.figure(figsize=(8, 6))
plt.scatter(mean, area, color="black",s=20)
plt.plot(x_range, y_pred, color="red")
# 添加线性模型方程和 R² 值
plt.text(min(mean) + 0.5, max(area) * 0.8, f"y = {a:.2f}x + {b:.2f}\n$R^2$ = {r_squared:.3f}", fontsize=12)
plt.rcParams['font.sans-serif'] = ['STSong']
plt.rcParams['axes.unicode_minus'] = False
# 添加图表标签
plt.xlabel('水位/m', fontsize=14)
plt.ylabel('面积/Km²', fontsize=14)
plt.title('线性模型', fontsize=16)
plt.grid(True)
plt.savefig('D:/other/fig.png', bbox_inches='tight',dpi=300)
plt.show()
(1)水位面积由前期得到
(2)水位数据由ICESat-2--ATL13数据处理后得到
ICESat-2 | 基于ATL13 数据的博斯腾湖水位变化监测
(3)模型结果: