gmt2kml
- 贡献者:
- 最近更新日期:
2025-10-20
- 官方文档:
- 简介:
将 GMT 数据表转换为 Google Earth KML 文件
2kml 读取一个或多个 GMT 表格文件,并将它们转换为使用 Google Earth KML 格式的单个输出文件。 数据可以表示点、线、面或波动,你可以指定额外属性,如标题、海拔模式、颜色、笔宽、透明度、 区域以及数据描述。还可以将特征延伸到底面(假设高于地面),并为点符号使用自定义图标。 最后,可以根据细节等级设置、海拔、区域控制可见性,包括在 Google Earth 加载时的状态, 以及随缩放变化的淡入淡出效果。输入文件应包含以下列:
lon lat [ alt ] [ timestart [ timestop ] ]
其中 lon 和 lat 对所有特征都是必需的,alt 对所有特征都是可选的 (参见 -A 和 -C),timestart 和 timestop 适用于事件和时间跨度特征。 对于波动,alt 列是必需的,但应表示沿轨迹的数据异常,例如重力、磁力等。 这些值将被缩放以产生沿线的偏移距离(以度为单位)。
语法
gmt 2kml [ table ] [ -Aa|g|s[alt|xscale] ] [ -Ccpt ] [ -Ddescriptfile ] [ -E[+e][+s] ] [ -Fe|l|p|s|t|w ] [ -G[color][+f|n] ] [ -Iicon ] [ -K ] [ -Lname1,name2,… ] [ -N[t|col|name_template|name] ] [ -O ] [ -Qa|i|sarg ] [ -Re|w/e/s/n ] [ -Sc|nscale] ] [ -Ttitle[/foldername] ] [ -V[level] ] [ -W[pen][attr] ] [ -Z[+aalt_min/alt_max][+fminfade/maxfade][+lminLOD/maxLOD][+o][+v] ] [ -aflags ] [ -bibinary ] [ -dinodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -qiflags ] [ -:[i|o] ] [ --PAR=value ] [ > output.kml ]
注意:选项标志和相关参数之间不允许有任何空格。
必选选项
- table
一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。
可选选项
- -Aa|g|s[alt|xscale]
选择 Google Earth 认可的三种海拔模式之一,确定特征的高度(以米为单位): a 绝对高度,g 相对地面高度,s 相对海底高度。 要将特征绘制在固定海拔上,可附加高度 alt(单位:米)。 使用 0 可将特征固定在选定参考面。或者附加 xscale 来按该比例缩放输入文件中的海拔。 如果未附加值,则海拔(米)从输入文件第 3 列读取。[默认情况下,特征固定在海面或地面]。
- -Ccpt
使用 CPT 为符号、事件或时间跨度图标分配颜色,基于输入文件第 3 列的值。 对于线或面,我们检查段头的 -Z<value> 声明,并通过 CPT 查找获取颜色。 注意,仅可使用离散颜色。
- -Ddescriptfile
包含 HTML 片段的文件,将作为 KML 文件的主要描述内容的一部分包含进去 [无描述]。 参见 SEGMENT INFORMATION 下的特定特征描述。
- -E[+e][+s]
控制线和面的 Google Earth 渲染方式。附加 +e 将特征延伸至地面 [默认不延伸]。 附加 +s 用直线连接点(可能穿过地球表面并不可见) [铺设到表面]。
- -Fe|l|p|s|t|w
设置特征类型。输入文件前两列应为 (lon, lat)。当需要高度或值( 即未使用 -A 给出高度,或 -C 设置)时, 第 3 列需要包含 altitude 或 value。选择以下指令:
event: 仅在特定 time 可见的符号,时间在下一列给出。
line: 使用 -W 设置的属性绘制线。
symbol: 永远可见的普通符号。
timespan: 仅在下一两列指定的时间段内激活的符号(含 timestart, timestop)。使用 NaN 表示无限时间范围。
wiggle: 第 3 列必须包含数据异常。如果还需要绘制轨迹本身,则单独使用 -Fl。参见 -Q 获取附加参数。
注意:如果使用时间,格式应为 ISO yyyy-mm-ddThh:mm:ss[.xxx] 或 GMT 相对时间格式(参见 -f)。对于指令 e|s|t, 符号通过 -I 设置。
- -G[color][+f|n]
设置填充颜色(+f,默认)或标签字体颜色(+n)。 填充颜色应用于符号、延伸、面和正异常波动 [默认为 75% 透明浅橙色]。 使用 -G+f 可关闭填充。文本标签:指定字体颜色 [默认白色], 使用 -G+n 可禁用标签。
- -Iicon
指定用于符号的替代图标 URL [默认 Google Earth 圆形]。若 URL 以 + 开头, 则在名称前加
http://maps.google.com/mapfiles/kml/
。 若完全关闭图标(例如只想使用文本标签),使用 -I-。
- -K
允许后续追加更多 KML 代码 [完成 KML 文件]。
- -Lname1,name2,…
扩展数据。附加一列或多列名称,用逗号分隔。我们期望输入文件中存在对应数据列, 并在 KML 文件中作为 Extended Data 编码, 在 Google Earth 中选择项目时可在气球显示属性。 如果可用数值列比扩展数据少 1,则将剩余文本作为最后一列扩展数据; 否则,将文本拆分为单词作为单独列。
- -N[t|col|name_template|name]
默认情况下,如果段头包含 -L”label string”, 将用作 KML 特征名称(面、线段或符号集合)。 默认名称为 “Line %d” 或 “Point Set %d”。每个点将按段名加序号命名。可选:
col:从数据列格式化为字符串作为符号标签
t:用每条记录的尾随文本作为标签(仅 ASCII 文件可用)
自定义字符串含 %d,为每个特征生成唯一编号
无参数关闭符号标签,线段仍有名称
- -O
将 KML 代码追加到现有 KML 文件 [初始化新文件]。
- -Qa|i|sarg
波动绘图可重复选项(需 -Fw)。控制正波动指向: - -Qa:附加方位角,定义正异常指向半圆 - -Qi:固定方位角 - -Qs scale:波动缩放(z 单位/地图度数)
- -Re|w/e/s/n
发出单个区域标签。附加 w/e/s/n 设置特定区域(忽略区域外点), 或附加 e 自动确定数据域 [默认不发区域标签]。
- -Sc|nscale
缩放图标或标签。-Sc 缩放符号图标,-Sn 缩放名称标签 [默认 1]。
- -Ttitle[/foldername]
设置文档标题 [默认未设置]。可附加 /FolderName 将特征分组到 KML 文件内文件夹。 默认文件夹名为 “Name Features”。
- -V[level] (more …)
设置 verbose 等级 [w]
- -W[pen][attr] (more …)
设置线、波动或面轮廓的笔属性 [默认:宽 0.25p, 颜色黑, 样式实线]。 附加 +cl 从 CPT 获取颜色,+cf 从 CPT 设置符号填充,+c 两者皆用。 KML 中笔宽以像素为单位。
- -Z[+aalt_min/alt_max][+fminfade/maxfade][+lminLOD/maxLOD][+o][+v]
设置 Document 和 Region 标签属性。+a 设置可见高度范围, +f 设置淡入淡出范围, +l 设置细节等级范围(lod_max=-1 表示无限可见) , +o 加载时打开文档, +v 加载时隐藏特征。
- -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 …)
筛选输入的行或数据范围
- -:[i|o] (more …)
交换输入或输出中的第一和第二列
- -^ 或 -
显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -)
- -+ 或 +
显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明
- -? 或无参数
显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明
- --PAR=value
临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数
示例
注: 下面是该模块的一些有效语法示例。使用远程文件(文件名以 @
开头)的示例可以剪切并粘贴到您的终端中进行测试。其他需要输入文件的命令只是常见的使用类型的虚拟示例,但不能按编写的原样运行。
要根据远程文件 @kml_pointsets.txt 的 CPT 绘制彩色符号,先生成 CPT,再创建 KML 文件:
gmt makecpt -Ccategorical > categories.cpt
gmt 2kml @kml_pointsets.txt -Ccategories.cpt > points.kml
将包含点位置 (lon, lat) 的文件转换为红色圆形符号的 KML 文件,尝试:
gmt 2kml mypoints.txt -Gred+f -Fs > mypoints.kml
将多段线文件(lon, lat)转换为 KML,段头含 -L 标签, 使用粗白笔,并设置文档标题,尝试:
gmt 2kml mylines.txt -Wthick,white -Fl -T"Lines from here to there" > mylines.kml
将多段面文件转换为 KML,段头含 -L 标签,使用粗黑笔和半透明黄色填充, 设置文档标题,并指定区域限制,尝试:
gmt 2kml mypolygons.txt -Gyellow@50+f -Fp -T"My polygons" -R30/90/-20/40 > mypolygons.kml
将包含点位置 (lon, lat, time) 的文件转换为绿色圆形符号 KML 文件, 符号将在指定时间激活并一直显示,尝试:
awk '{print $1, $2, $3, "NaN"}' mypoints.txt | gmt 2kml -Ggreen+f -Ft > mytimepoints.kml
从网格 temp.nc 中提取每 10 单位的等值线和标签,并以 75% 透明红色线和红色标签(不透明)绘制 KML,尝试:
gmt grdcontour temp.nc -Jx1id -A10+tlabel.txt -C10 -Dcontours.txt
gmt 2kml contours.txt -Fl -W1p,red@75 -K > contours.kml
gmt 2kml -O -Nt -Fs -Sn2 -Gred@0+n label.txt -I- >> contours.kml
将等值线绘制为线并使用 CPT 文件 contours.cpt 上色,尝试:
gmt 2kml contours.txt -Fl -Ccontours.cpt > contours.kml
沿轨迹绘制磁异常波动,正异常为橙色,波动线为 2p 黑色笔, 将磁异常(nT)缩放为地图上 1nm 对应 50 nT,并将波动置于海面 50m 以上,尝试:
gmt 2kml magnetics_lon_lat_mag.txt -Fw -Gorange+f -W2p -Ag50 -Qs50n > wiggles.kml
局限
Google Earth 在跨经线绘制填充面时存在问题。 目前必须手动将跨越日期变更线的多边形分成西、 东两部分并分别绘制。Google Earth 还有其他文件大小或线长的限制,未记录。 如特征未显示且无错误,可尝试通过拆分文件减小大小。
构建 KMZ 文件
使用 KMZ 格式更优,因为占用空间小。KMZ 是 KML 文件及其引用的图像、图标或数据文件的压缩包。 可将大数据集分组到 Folders 中。Document 可包含任意数量文件夹。 可用脚本和 -K、-O 选项创建复合 KML 文件。参见 -T 了解文件夹/文档切换。 gmt_shell_scripts.sh 中的 gmt_build_kmz 可协助将多个 KML 文件(及引用图片)打包为 KMZ 文件。 需先 source gmt_shell_scripts.sh。
KML 层级
GMT 按特征类型(使用 -O、-K 或 -T/foldername)、 输入文件(非标准输入时)及线段(段头名称或 -N)将特征存入层级文件夹。 在 Google Earth 中可方便切换文档内容。示例:
[ KML header information; not present if -O was used ]
<Document><name>GMT Data Document</name>
<Folder><name>Point Features</name>
<!--This level of folder is inserted only when using -O, -K>
<Folder><name>file1.txt</name>
<!--One folder for each input file (not when standard input)>
<Folder><name>Point Set 0</name>
<!--One folder per line segment>
<!--Points from the first line segment in file file1.txt go here>
<Folder><name>Point Set 1</name>
<!--Points from the second line segment in file file1.txt go here>
</Folder>
</Folder>
<Folder><name>Line Features</name>
<Folder><name>file1.txt</name>
<!--One folder for each input file (not when standard input)>
<Placemark><name>Line 0</name>
<!--Here goes the first line segment>
</Placemark>
<Placemark><name>Line 1</name>
<!--Here goes the second line segment>
</Placemark>
</Folder>
<Folder>
</Document>
[ KML trailer information; not present if -K was used ]
分段信息
2kml 会扫描段头中 -L”some label“ [参见 -N] 和 -T”some text description“。如存在,将解析为当前特征的名称和描述标签。
相关模块
gmt_shell_functions.sh, grd2kml, img2google, kml2gmt, psconvert