nearneighbor

官方文档:

nearneighbor

简介:

使用最邻近算法网格化表数据

nearneighbor 读取 (x,y,z[,w]) 形式的数据,并使用最邻近算法计算网格点的加权平均值。计算原理为

\[w(r_i) = \frac{w_i}{1 + d(r_i) ^ 2}, \quad d(r) = \frac {3r}{R}, \quad \bar{z} = \frac{\sum_i^n w(r_i) z_i}{\sum_i^n w(r_i)}\]

其中 n 为满足筛选标准的数据点数,\(r_i\) 为网格点到第 i 个数据点的距离,如果不给定输入点的权重,则假定其为等权,即 \(w_i = 1\)

Source Code

../../_images/369dcd55c17734ef2e2584a8f73afad3.png

算法示意图。R 为搜索半径,其限制了考虑的点和扇区的数量,只有每个扇区中最近的点(红色点)参与估计

语法

gmt nearneighbor [ table ] -Goutgrid -Iincrement -Rregion -Ssearch_radius [ -Eempty ] [-Nsectors[+mmin_sectors]|n] [ -V[level] ] [ -W ] [ -aflags ] [ -bibinary ] [ -dinodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -hheaders ] [ -iflags ] [ -nflags ] [ -qiflags ] [ -rreg ] [ -wflags ] [ -:[i|o] ] [ --PAR=value ]

必选选项

table

输入表数据,包含三列或四列 (x,y,z[,w]) 形式的数据(见 -W 选项)

-Goutgrid[=ID][+ddivisor][+ninvalid] [+ooffset|a][+sscale|a] [:driver[dataType][+coptions]]

输出网格名。各子选项含义见 网格文件

-Ixinc[+e|n][/yinc[+e|n]]

指定X和Y方向的网格间隔

  • xincyinc 为 X 和 Y 方向的网格间隔。对于地理坐标,可以指定网格间隔单位 [默认单位为度]

  • +e 微调X和Y方向范围的最大值,使得其是网格间隔的整数倍(默认会微调网格间隔以适应给定的数据范围)

  • +n 表明 xincyinc 不是网格间隔,而是X和Y方向的节点数。此时会根据节点数、网格区域范围以及网格配准方式重新计算网格间隔。

注意:

  • yinc 设置为0,则表示其与 xinc 相同

  • 若使用 -Rgrdfile 选项,则网格间隔和配准方式已经根据网格文件自动初始化,此时依然可以使用 -I-r 覆盖相应的值

-Rxmin/xmax/ymin/ymax[+r][+uunit] (more …)

指定数据范围

-Ssearch_radius

设置 search_radius ,即上图中的 R,可在后面追加单位

可选选项

-Eempty

指定空节点的值为 empty ,默认为 NaN

-Nsectors[+mmin_sectors]|n

以每个网格节点为中心可以将圆形的搜索区域划分为扇区 sectors+m 选项用来设置最少搜索的扇区 min_sectors ,即至少 min_sectors 个扇区至少含有一个数据时,才计算最终的加权值;未通过此测试的节点值被设置为 NaN,见 -E 。如果不设置该选项,GMT 至少设置 50% 的扇区来计算加权值,默认情况下,sectos = min_sectors = 4。每个扇区最接近的值才会被用来计算加权值,远处的点则被忽略。使用 -Nn 可以调用 GDAL 的最邻近算法,而不是用 GMT 的该算法。

-W

表明输入数据的第四列为权重,该权重与距离权重因子相乘即为最终权重

-V[level] (more …)

设置 verbose 等级 [w]

-acol=name[,…] (more …)

设置非空间数据项与数据列之间的对应关系

-bi[ncols][type][w][+l|b] (more …)

设置二进制输入数据的格式

-dinodata (more …)

将输入数据中值为 nodata 的列替换为 NaN

-e[~]“pattern” | -e[~]/regexp/[i] (more …)

筛选或剔除匹配指定模式的数据记录

-f[i|o]colinfo (more …)

指定输入或输出列的数据类型

-g[a]x|y|d|X|Y|D|[col]zgap[+n|p] (more …)

确定数据或线段的间断

-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle] (more …)

跳过或生成指定数目的头段记录

-icols[+l][+sscale][+ooffset][,][,t[word]] (more …)

设置输入数据列及简单变换(0表示第一列,t 表示文本列)

-qi[~]rows[+ccol][+a|f|s] (more …)

筛选输入的行或数据范围

-r[g|p] (more …)

设置网格配置方式 [默认为网格线配准]

-wy|a|w|d|h|m|s|cperiod[/phase][+ccol] (more …)

将输入坐标转换为循环坐标

-:[i|o] (more …)

交换输入或输出中的第一和第二列

-^-

显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -

-++

显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明

--PAR=value

临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数

距离单位

GMT支持多种不同的距离单位,以及三种不同的球面距离计算方式。详情见 单位-j 选项

示例

将文件 ship_15.txt 格网化成 5 分分辨率的网格,搜索半径设置为 15 分,绘制最终的网格

gmt begin map
    gmt nearneighbor @ship_15.txt -R245/255/20/30 -I5m -Ggrid.nc -S15m
    gmt grdimage grid.nc -B
gmt end show

使用 seaMARCII_bathy.lon_lat_z 文件创建 0.5 分分辨率的网格,设置搜索半径为 5 km,将搜索圆范围分为八个扇区,每个扇区必须有数据,并将最终的空节点设置为 -9999

gmt nearneighbor seaMARCII_bathy.lon_lat_z -R242/244/-22/-20 -I0.5m -E-9999 -Gbathymetry.nc -S5k -N8+m8

使用 geoid.xyz 数据创建全球 1 度分辨率的网格,搜索半径为 200 km,距离计算使用球面距离,将搜索范围分为4个扇区,至少 2 个扇区包含数据时计算加权值

gmt nearneighbor geoid.xyz -R0/360/-90/90 -I1 -Ggeoid.nc -S200k -N4

相关模块

blockmean, blockmedian, blockmode, greenspline, sphtriangulate, surface, triangiulate