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

前言

gma库是洛大神写的一个地理库,
其中有许多可以使用的函数,
今天简单介绍一下它IDW插值的使用,并与meteva进行对比

镜像:Python 3.9 GDAL3.4.3

数据读取

In [2]:

%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()

Out[3]:

leveltimedtimeidlonlatdata0
002021-07-19 12:00:00053763112.166037.90440.3
102021-07-19 12:00:00054279126.583042.05000.1
202021-07-19 12:00:00053770112.350037.35670.1
302021-07-19 12:00:00054287128.083042.01670.5
402021-07-19 12:00:0005173081.256440.60641.3

METEVA

In [47]:

## 插值前要设置格点
grid1 = meb.grid([105,135,0.1],[25,55,0.1])
sta1 = meb.interp_sg_idw(sta,grid1,nearNum = 5)
sta1

Out[47]:

xarray.DataArray

'data0'

  • member: 1
  • level: 1
  • time: 1
  • dtime: 1
  • lat: 301
  • lon: 301
  • array([[[[[[0.40511298, 0.39965576, 0.38122562, ..., 0.        ,
                0.        , 0.        ],
               [0.40206352, 0.39143518, 0.36779505, ..., 0.        ,
                0.        , 0.        ],
               [0.3975288 , 0.36514568, 0.33766782, ..., 0.        ,
                0.        , 0.        ],
               ...,
               [0.        , 0.        , 0.        , ..., 2.95151114,
                2.95273232, 2.95393586],
               [0.        , 0.        , 0.        , ..., 2.95258093,
                2.95379257, 2.95498729],
               [0.        , 0.        , 0.        , ..., 2.95366621,
                2.9548676 , 2.95605254]]]]]])
  • Coordinates:
    • member

      (member)

      <U5

      'data0'

    • level

      (level)

      int64

      0

    • time

      (time)

      datetime64[ns]

      2021-07-19T12:00:00

    • dtime

      (dtime)

      int64

      0

    • lat

      (lat)

      float64

      25.0 25.1 25.2 ... 54.8 54.9 55.0

    • lon

      (lon)

      float64

      105.0 105.1 105.2 ... 134.9 135.0

  • Indexes: (6)
  • Attributes:

    dtime_units :

    hour

    data_start_columns :

    6

In [48]:

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)

GMA

In [51]:

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)

In [52]:

# 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()

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

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

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

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

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: arcpy中的IDW函数是一种基于反距离加权(Inverse Distance Weighting, IDW)的插值方法。该函数可以根据已知点的数值信息,在未知位置进行插值预测,并得到一个连续的表面。 在使用arcpy的IDW函数时,我们需要提供一些参数。首先,我们需要确定输入的点数据,这些点数据包含了已知位置和对应的数值。然后,我们需要确定待插值的位置,一般是一个栅格图像或矢量边界。此外,我们还需要指定一个权重半径,用于控制影响范围。较小的权重半径会导致局部影响,而较大的权重半径会导致更大范围的影响。 使用arcpy的IDW函数,我们可以获得一个插值结果,即未知位置的预测值。插值结果的精度受到点数据的分布情况和权重半径的选择影响。为了获得更准确的结果,我们可以调整权重半径的大小或增加点数据的密度。 IDW函数的应用场景很广泛。例如,我们可以使用IDW函数根据气象站点的观测数据,预测某一地区的气温分布。又如,我们可以使用IDW函数根据水质监测站的数据插值得到整个水域的水质分布情况。 总之,arcpy的IDW函数是一种常用的插值方法,能够根据已知点的数值信息,在未知位置预测数值,并得到一个连续的表面。在实际应用中,我们可以根据具体需求选择合适的参数,以获得准确的插值结果。 ### 回答2: arcpy是ArcGIS软件中的一个模块,用于处理和分析地理数据。其中的idw函数属于插值方法之一,用于根据已知点的值来预测其他位置的值。下面是关于arcpy idw函数的一些重要信息: 1. 描述:idw函数(Inverse Distance Weighting)是一种基于距离的插值方法,通过计算已知点与待预测位置之间的距离和权重,从而预测未知位置上的值。 2. 参数:idw函数有多个必需参数,包括输入点要素类、输入字段、输出栅格数据集等。其中输入字段应该是代表样点值的字段。 3. 原理:idw函数使用已知点的值与距离的倒数的加权平均来计算未知点的值。距离越近的已知点与未知点权重越高,距离越远的已知点权重越低。这种方法假设距离越近的位置相似度越高。 4. 输出:idw函数的输出是一个栅格数据集,包含采样点的预测值。可以将这个栅格数据集用于进一步的地理分析和制图。 5. 应用:idw函数主要用于处理稀疏的样点数据,通过插值来生成更为连续和平滑的表面。这对于制作高程模型、温度分布图等等地理数据的展示非常有帮助。 总之,arcpy idw函数是ArcGIS中用于插值的一种方法,通过考虑距离权重的加权平均来预测未知位置上的值。它在地理信息分析和制图中有广泛的应用。 ### 回答3: arcpy是ArcGIS软件的一个Python库,提供了一系列用于地理信息处理的工具和函数。其中的idw函数是用于进行插值分析的工具之一。 IDW(Inverse Distance Weighting)是一种常用的空间插值方法,该方法根据周围有资料点的分布情况将未知位置的值估算出来。通过对空间上已知点的距离加权平均,并以距离为权重对未知点进行插值计算,从而得到整个空间范围的连续值分布。 arcpy中的idw函数可以用以下方式进行调用和使用: 1. 导入arcpy模块: `import arcpy` 2. 指定输入和输出数据: `in_point_features = "path_to_input_point_features"` `z_field = "field_name_of_z_value"` `out_raster = "path_to_output_raster"` 3. 定义环境设置(可选): `arcpy.env.workspace = "path_to_workspace"` 4. 调用idw函数进行插值: `arcpy.Idw_3d(in_point_features, z_field, out_raster)` 在调用idw函数时,需要指定输入的点要素数据集和其中的一个字段作为要插值的值。另外,还需指定输出的栅格数据集位置。 idw函数会根据输入的点要素数据集和字段的值对未知位置进行插值计算,并将结果输出到指定的栅格数据集中。 总的来说,arcpy中的idw函数是用于进行逆距离加权插值分析的工具,它可以方便地进行地理信息处理和空间分析,具有较高的灵活性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴躁的秋秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值