✍️ 田冬冬 , 陈箫翰  •  📅 2025-12-31

fitcircle

官方文档:

fitcircle

简介:

拟合球面上数据点的平均位置及圆弧

fitcircle 从标准输入 [或 table] 的前两列读取 (经度, 纬度) 值。这些值被转换为单位球上的笛卡尔三维矢量。 然后找到两个位置:输入位置的平均值,以及最拟合输入位置的大圆的极点。用户可以从该问题的两个可能解中选择一个或两个。 第一个称为 -L1,第二个称为 -L2。当数据沿大圆紧密聚集时,两个解相似。 如果数据分散程度较大,则大圆极点的确定将不如平均值那样准确。比较这两个解可作为定性检查。

-L1 解近似于角距离余弦绝对值之和的最小化。 该解将平均位置确定为数据的 Fisher 平均值,将极点位置确定为平均值与数据之间叉积的 Fisher 平均值。 对叉积取平均会根据点到平均值的距离按比例赋予权重,类似于平面线性回归中远距离点的“杠杆作用”。

-L2 解近似于角距离余弦平方和的最小化。 它创建了一个由数据矢量分量平方和组成的 3 x 3 矩阵。该矩阵的特征向量给出了平均位置和极点位置。 当有数千个数据时,此方法可能更容易受到舍入误差的影响。极点由最小特征值对应的特征向量给出; 它是数据中表现最差的因子,且通过任何一种方法都不易估计。

语法

gmt fitcircle [ table ] -Lnorm [ -Fflags ] [ -S[lat] ] [ -V[level] ] [ -aflags ] [ -bibinary ] [ -dinodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -oflags ] [ -qflags ] [ -:[i|o] ] [ --PAR=value ]

输入数据

table

一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。

必须选项

-L
-Lnorm

norm 取值 - 1: 解法1 - 2: 解法2 - 3 或留空: 同时输出解法1和解法2的结果

可选选项

-F
-Ff|m|n|s|c

控制输出格式。

正常情况下,该命令会将计算结果以较复杂的形式输出。使用本选项,则只返回简单的坐标。 后面可以加上其他修饰符以指定要返回的坐标:

  • f 平面地球平均位置

  • m 平均位置

  • n 大圆北极

  • s 大圆南极

  • c 小圆极点及其余纬,需要 -S

-S
-Slat

尝试拟合小圆而非大圆。极点将被约束在连接“最佳拟合大圆极点”与“数据平均位置”的大圆上。 可附加所需的小圆固定纬度 lat [默认自动确定最佳纬度]。

-V
-V[level]

设置 verbose 等级 [w]。 (参数详细介绍)

-a
-a[[col=]name][,]

控制输入或输出为 OGR/GMT 格式时对非空间元数据的处理方式。 (参数详细介绍)

-bi
-bi[ncols][type][w][+l|b]

控制二进制文件的输入格式。 (参数详细介绍)

-di
-dinodata

将输入数据某些特定值当作NaN。 (参数详细介绍)

-e
-e[~]“pattern” | -e[~]/regexp/[i]

筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)

-f
-f[i|o]colinfo

显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

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

确定数据或线段的间断。 (参数详细介绍)

-h
-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle]

在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-i
-icols[+l][+sscale][+ooffset][,][,t[word]]

对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-o
-ocols[,…][,t[word]]

对输出的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-q
-q[i|o][~]rows[+ccol][+a|f|s]

对输入或输出的行进行筛选,该选项在一定程度上可以代替 gawk 的某些功能。 (参数详细介绍)

-:
-:[i|o]

交换输入或输出数据的前两列。 (参数详细介绍)

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

ASCII 格式精度

ASCII 格式输出数据通过 gmt.conf 配置文件控制。控制经纬度格式的参数为 FORMAT_GEO_OUT ;控制绝对时间的的参数包括 FORMAT_DATE_OUTFORMAT_CLOCK_OUT ;普通浮点数通过参数 FORMAT_FLOAT_OUT 控制。上述格式控制可能会导致精度损失,这会在下游计算中导致一些问题。 如果用户需要保证数据精度,则应考虑将数据写为二进制文件,或者使用 FORMAT_FLOAT_OUT 指定更多的有效数字。

示例

: 下面是该模块的一些有效语法示例。使用远程文件(文件名以 @ 开头)的示例可以剪切并粘贴到您的终端中进行测试。其他需要输入文件的命令只是常见的使用类型的虚拟示例,但不能按编写的原样运行。

以最小二乘法寻找最拟合远程文件 @sat_03.txt 中 (经度, 纬度) 点的大圆参数:

gmt fitcircle @sat_03.txt -L2 -Fm

假设在文件 ship.xyg 中有沿着弯曲船迹的 经度, 纬度, 重力 数据。希望将这些数据投影到大圆上,并按距离进行重采样,以便对其进行滤波或检查其频谱:

gmt fitcircle ship.xyg -L2
gmt project ship.xyg -Cox/oy -Tpx/py -S -Fpz | gmt sample1d -S-100 -I1 > output.pg

此处,ox/oy 是 fitcircle 得到的平均位置的经纬度,而 px/py 是极点的经纬度。文件 output.pg 包含了沿最拟合 ship.xyg 的大圆每隔 1 km 采样一次的距离和重力数据。

数据文件 data.txt 中包含 经度, 纬度 点,使用 L2 范数返回北半球大圆极点位置:

gmt fitcircle data.txt -L2 -Fn > pole.txt

用两种计算方法拟合了数据的大圆弧路径和小圆弧路径,并借助 project 生成路径坐标。

#!/usr/bin/env bash
gmt begin fitcircle_ex1

    # Fit great circle to red points and small circle to green points
    # Plot the best-fitting great and small circles as well as the
    # location of the mean locations and pole locations for both
    # the -L1 and -L2 options (i.e., -L3).

    gmt fitcircle gcircle.txt -L3 > g.txt
    gmt fitcircle scircle.txt -L3 -S > s.txt
    gpole1=`grep "L1 N Hemisphere" g.txt | gawk '{printf "%s/%s\n", $1, $2}'`
    gpole2=`grep "L2 N Hemisphere" g.txt | gawk '{printf "%s/%s\n", $1, $2}'`
    spole1=`grep "L1 Small Circle Pole" s.txt | gawk '{printf "%s/%s\n", $1, $2}'`
    spole2=`grep "L2 Small Circle Pole" s.txt | gawk '{printf "%s/%s\n", $1, $2}'`
    slat1=`grep "L1 Small Circle" s.txt | gawk '{print 90-$NF}'`
    slat2=`grep "L2 Small Circle" s.txt | gawk '{print 90-$NF}'`
    gmt plot -Rg -JG-30/40/7i -Bg gcircle.txt -Sc0.04i -Gred -Xc -Yc
    gmt plot scircle.txt -Sc0.04i -Ggreen
    gmt project -G1 -T$gpole1 -L-180/180 | gmt plot -W3p
    gmt project -G1 -T$gpole2 -L-180/180 | gmt plot -W1p,-
    gmt project -G1/$slat1 -T$spole1 -L-180/180 | gmt plot -W3p
    gmt project -G1/$slat2 -T$spole2 -L-180/180 | gmt plot -W1p,-
    grep "Great Circle Pole" g.txt | gmt plot -Sa0.2i -Gred -W0.25p
    grep "Small Circle Pole" s.txt | gmt plot -Sa0.2i -Ggreen -W0.25p
    grep "L1 Average" g.txt | gmt plot -Sa0.2i -Gyellow -W0.25p
    grep "L2 Average" g.txt | gmt plot -Sa0.2i -Gyellow -W0.25p
    grep "L1 Average" s.txt | gmt plot -Sa0.2i -Gyellow -W0.25p
    grep "L2 Average" s.txt | gmt plot -Sa0.2i -Gyellow -W0.25p

    rm g.txt s.txt
gmt end
../../_images/f1dc58c788985293c2f691b825439bfb.png

fitcircle示例

相关模块

vector, project, mapproject, sample1d