✍️ 田冬冬 , 陈箫翰 • 📅 2025-10-28

# 线条属性

对于线条而言，其基本的画笔属性由三个：线宽、颜色和线型，在 画笔 中已经做过介绍。除此之外，某些模块还可以为线条设置额外的属性， 这些额外的属性可以通过在画笔属性后加上子选项来是实现。

线条的额外属性包括：端点偏移量、线条平滑和端点箭头。

## 端点偏移量

在给定若干个数据点绘制线条时，一般都是从起点（第一个点）一直画到终点（最后一个点）。 可以使用 +o 子选项为线段两端指定偏移量，使得绘制线段时的起点和终点与输入数据中 指定的起点和终点间存在一定的偏移量。该子选项的语法是： +o offset[u]

- 若只给了一个 offset，则表示起点和终点共用同一个偏移量

- 也可以用 offset/offset 分别为起点和终点指定不同的偏移量

- 对于每个偏移量，都可以使用长度单位 c|i|p 或距离单位

下面的示例展示了 +o 子选项的用法和使用效果。 图中，细线和粗线使用了相同的输入数据，其中细线没有使用 +o， 此时线段的起点和终点与数据指定的点重合； 粗线在绘制线条时使用了 -W2p+o1c/500k 选项， 即在起点处偏移1厘米，在终点处偏移500千米。

`Source Code`

线段起点偏移示意图

## 线条平滑

通常情况下，在绘制线条时，两点之间是用直线连接的（地图上两点之间默认用大圆弧连接）。 使用 +s 子选项会使用 Bezier splines 在两点之间做样条插值以得到更光滑的曲线。 需要注意的是：该样条平滑是对投影后的2D坐标进行处理的，并不针对原始坐标（即 其不是一个球面样条插值）。

下图中，左图使用了 -W2p 选项，右边使用了 -W2p+s。

    cat << EOF > line.txt
    0       0
    1   1
    2   0.5
    4   2
    2   1.5
    EOF

    gmt begin line_bezier
    gmt plot line.txt -R-0.25/4.25/-0.2/2.2 -JX3i/1.25i -W2p
    gmt plot line.txt -Sc0.1i -Gred -Wfaint
    gmt plot line.txt -W2p+s -X3i
    gmt plot line.txt -Sc0.1i -Gred -Wfaint
    rm line.txt
    gmt end show

## 端点箭头

默认情况下，在绘制线段时，线段的两个端点并没有什么特别的。使用 +v 子选项， 可以在线段的一端或两段绘制端点箭头。该子选项的语法为： +v[b|e]vspecs

- 默认会在线段两端都加上箭头，b|e 表示只绘制开头或结尾的箭头

- vspecs 用于指定端点箭头的属性，详见 矢量/箭头

下图中细线是通常绘制的线段，粗线使用的选项是 -W2p+o1c/500k+vb0.2i+gred+pfaint+bc+ve0.3i+gblue

`Source Code`

线条端点箭头示意图

## 其它属性

除了上面提到的属性之外，GMT中还有一些参数可以影响线段的外观。这些参数包括：

- PS_LINE_CAP：控制线段顶端的绘制方式

- PS_LINE_JOIN：控制线段拐点/交点的绘制方式

- PS_MITER_LIMIT：控制线段拐点在 `miter` 模式下的阈值