前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两种降水站点数据IDW插值及可视化方法

两种降水站点数据IDW插值及可视化方法

作者头像
用户11172986
发布2024-06-20 17:38:11
890
发布2024-06-20 17:38:11
举报
文章被收录于专栏:气python风雨气python风雨

前言

gma库是洛大神写的一个地理库,他的公众号是洛的地理研学

小弟对这些开源大佬是非常感谢的,正是这种共享精神推动了python的发展.

言归正传,gma其中有许多可以使用的函数,

今天简单介绍一下它的IDW插值的使用,并与meteva进行对比

镜像:Python 3.9 GDAL3.4.3

数据读取

In [2]:

代码语言:javascript
复制
代码语言:javascript
复制
%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb

In [3]:
filename = "/home/mw/input/meteva2260/20210719120000.000"  # 替换为你的micaps文件路径
sta = meb.read_stadata_from_micaps3(filename)
sta.head()
代码语言:javascript
复制

Out[3]:

level

time

dtime

id

lon

lat

data0

0

0

2021-07-19 12:00:00

0

53763

112.1660

37.9044

0.3

1

0

2021-07-19 12:00:00

0

54279

126.5830

42.0500

0.1

2

0

2021-07-19 12:00:00

0

53770

112.3500

37.3567

0.1

3

0

2021-07-19 12:00:00

0

54287

128.0830

42.0167

0.5

4

0

2021-07-19 12:00:00

0

51730

81.2564

40.6064

1.3

METEVA

In [47]:

代码语言:javascript
复制
代码语言:javascript
复制
## 插值前要设置格点
grid1 = meb.grid([105,135,0.1],[25,55,0.1])
sta1 = meb.interp_sg_idw(sta,grid1,nearNum = 5)
sta1
代码语言:javascript
复制

Out[47]:

In [48]:

代码语言:javascript
复制
代码语言:javascript
复制
map_extend = [105, 125, 25, 50]
axs = meb.creat_axs(1, map_extend,ncol=1,sup_fontsize=7)
image = meb.add_mesh(axs[0], sta1,add_colorbar=True)
代码语言:javascript
复制

GMA

In [51]:

代码语言:javascript
复制
代码语言:javascript
复制
import gma
from gma import io
from gma.smc import Interpolate
from gma.map import  plot, inres

Points = sta.loc[:, ['lon','lat']].values
Values = sta.loc[:, ['data0']].values

# 步骤1:反距离权重插值
IDWD = Interpolate.IDW(Points, Values, Resolution = 0.1, InProjection = 'WGS84')
# 步骤2:将插值结果转换为 DataSet 数据集
IDWDataSet = io.ReadArrayAsDataSet(IDWD.Data, Projection = 'WGS84', Transform = IDWD.Transform)
代码语言:javascript
复制

In [52]:

代码语言:javascript
复制
代码语言:javascript
复制
# 1.初始化一个地图框,并配置视图范围 
MapF = plot.MapFrame(Axes = None, Extent = [105, 25, 125, 50])

# 2.将内置的世界矢量图层添加到地图框
MapL1 = MapF.AddLayer(inres.WorldLayer.Country, FaceColor = 'none', LineWidth = 0.2, EdgeColor = 'black', Zorder = 2)
MapL2 = MapF.AddLayer(inres.WorldLayer.Ocean, FaceColor = '#BEE8FF', EdgeColor = 'none')

MapD1 = MapF.AddDataSetClassify(IDWDataSet,
                                CMap = 'rainbow' )
# 3.获取经纬网
GridLines = MapF.AddGridLines(LONRange = (105, 130, 5), LATRange = (20, 60, 5))

# 4.添加地图整饰要素
AddCompass = MapF.AddCompass(LOC = (0.1, 0.8), Color = 'black')
ScaleBar = MapF.AddScaleBar(LOC = (0.1, 0.02), Width = 0.3, Color = 'black', FontSize = 7)

# 5.设置地图框边框
Frame = MapF.SetFrame()
代码语言:javascript
复制

小结:

就使用插值函数上两者都相对便利,而在可视化方面则是meteva对新手更优化,代码量二三行即可

gma在可视化方面则是需要设置更多的参数,估计需要一段时间上手之后才能画出更加美观的图

就插值结果而言两者分布是较为一致的,但是gma的resolution设为0.1和meteva设为0.1明显分辨率不一。还望有懂的前辈解惑一下。

还有则是个人的建议,希望gma插值后的数据格式可以选择为xarray,这样更加便利。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 数据读取
  • METEVA
  • GMA
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档