✍️ 田冬冬 , 陈箫翰 , 姚家园 , 王亮 • 📅 2026-01-12

# solar

官方文档:

  solar

简介:

  计算或/和绘制晨昏线以及民用、航海用以及天文用曙暮光区域

solar 计算昼夜平分线（晨昏线）以及民用、航海和天文曙暮光的闭合多边形，并将其写入标准输出，或在地图上用于裁剪或填充。

## 语法

gmt solar [ `-B`[p|s]parameters ] [ `-C` ] [ `-G`[fill] ] [ `-I`[lon/lat][+d date][+z TZ] ] [ `-J` parameters ] [ `-M` ] [ `-N` ] [ `-R` region ] [ `-T` dcna[+d date][+z TZ]] [ `-U`[stamp] ] [ `-V`[level] ] [ `-W` pen ] [ `-X`[a|c|f|r][xshift] ] [ `-Y`[a|c|f|r][yshift] ] [ `-bo` binary ] [ `-o` flags ] [ `-p` flags ] [ `-t` transp ] [ --PAR=value ]

## 必须选项

`-I` 和 `-T` 必须使用一个。

## 可选选项

-B

-B parameters

  设置底图边框和轴属性。 (参数详细介绍)

-C

-C

  在一行内格式化打印（以Tab键分隔）`-I` 选项输出的信息。输出内容包括：

  - 太阳的经度、纬度、方位角、高度角，单位为度

  - 日出、日落、正午的时间，用小数形式的天表示，比如0.5表示正午12点

  - 日长，单位为分钟

  - 考虑折射效应矫正后的太阳高度较正以及均时差，单位为分钟

  备注

  若没有通过 `-I` lon/lat 提供经纬度，则太阳高度角之后的数据均以 (0,0) 作为参考点。

      $ gmt solar -I120/40+d2016-11-01T01:00:00+z8 -C
      160.885755836   -14.5068940782  38.6719503593   -59.513608404   0.270214374769  0.706928713211  0.48857154399   628.868647356   -59.5102114599  16.4569766548

-G

-G[fill]

  根据晨昏线对黑夜区域填充颜色或图案，见 填充。 若不指定 fill 则剪裁黑夜区域，且需要通过 gmt clip -C 停止区域剪裁， 见 clip。

-I

-I[lon/lat][+d date][+z TZ]

  输出太阳的当前位置、方位角和高度角。加上 lon/lat 则输出日出、日落、 正午时间以及一天时间长度。用 +d data 指定ISO格式的日期时间 （比如 +d2000-04-25T10:00:00 ）来计算特定时刻的太阳参数。如果有需要， 也可以通过 +z TZ 加上时区。

      $ gmt solar -I120/40+d2016-11-01T01:00:00+z8
            Sun current position:    long = 160.885756    lat = -14.506894
                                Azimuth = 38.6720    Elevation = -59.5136
            Sunrise  = 06:29
            Sunset   = 16:58
            Noon     = 11:44
            Duration = 10:29

-J

-J projection

  设置地图投影方式。 (参数详细介绍)

-M

-M

  将晨昏线数据以多段ASCII表格式写到标准输出（或二进制格式， 见 -b 选项）。使用该选项，则只输出数据不绘图。

-N

-N

  反转晨昏线“内”和“外”概念颠倒。仅可与 `-G` 一起使用以剪裁出白昼区， 不可与 `-B` 一同使用。

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

  指定数据范围。 (参数详细介绍)

-T

-Tdcna[+d date][+z TZ]

  绘制一个或多个不同定义的晨昏线。若需要导出晨昏线数据，见 `-M` 选项。

  通过添加 dcna 来绘制一个或多个不同定义的晨昏线。其中，

  - d 指晨昏线

  - c 指民用曙暮光

  - n 指航海曙暮光

  - a 指天文曙暮光

  +d date 为ISO格式的日期时间（例如 +d2000-04-25T12:15:00）， 以得到该时刻晨昏交替的位置。也可以通过 +z TZ 加上时区。

  不同曙暮光区的定义如下图所示：

  曙暮光区的多种定义（图片来自于 https://en.wikipedia.org/wiki/Twilight）

  - 民用曙暮光分为晨间曙光区和晚间暮光区：

    - 晨间曙光区是指太阳的几何中心位于地平线以下6˚至地平线以下0˚50'（或日出， 即太阳上边缘接触地平线）这段时间

    - 晚间曙光区是指太阳的几何中心位于地平线以下 0˚50'（或日落，即太阳下边 缘接触地平线）至地平线以下6˚ 这段时间

  - 航海曙暮光指太阳中心位于地平线以下 0˚50' 至 12˚ 这段时间

  - 天文曙暮光指太阳中心位于地平线以下 0˚50' 至 18˚ 这段时间

-U

-U[label][+c][+j just][+o dx/dy]

  在图上绘制GMT时间戳logo。 (参数详细介绍)

-V

-V[level]

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

-W

-W[pen]

  设置晨昏线的画笔属性，见 画笔。

-X

-Y

-X[a|c|f|r][xshift[u]]

-Y[a|c|f|r][yshift[u]]

  移动绘图原点。 (参数详细介绍)

-bo

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

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

-o

-o cols[,...][,t[word]]

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

-p

-p[x|y|z]azim[/elev[/zlevel]][+w lon0/lat0[/z0]][+v x0/y0]

  设置3D透视视角。 (参数详细介绍)

-t

-t[transp]

  设置图层透明度（百分比）。取值范围为0（不透明）到100（全透明）。 (参数详细介绍)

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## 示例

    gmt begin solar
      gmt coast -Rd -JKs0/10i -Dl -A5000 -W0.5p -S175/210/255 -Bafg --MAP_FRAME_TYPE=plain

      # 绘制晨昏线
      gmt solar -Td+d2016-02-09T16:00:00 -Gnavy@95

      # 绘制不同定义的晨昏区
      gmt solar -Tc+d2016-02-09T16:00:00 -Gnavy@85
      gmt solar -Tn+d2016-02-09T16:00:00 -Gnavy@80
      gmt solar -Ta+d2016-02-09T16:00:00 -Gnavy@80

      # 计算指定时间太阳位置并绘制在底图上
      gmt solar -I+d2016-02-09T16:00:00 -C | gmt plot -Sk@sunglasses/1.5c -Gyellow -W0.2p
    gmt end show

打印在给定日期、时间和时区下的当前太阳位置以及日出、日落时间:

    gmt solar -I-7.93/37.079+d2016-02-04T10:01:00+z02:00

绘制昼夜平分线和民用曙暮光:

    gmt begin
      gmt coast -Rd -W0.1p -JQ0/14c -B -BWSen -Dl -A1000
      gmt solar -W1p -Tdc
    gmt end show

根据昼夜平分线设置剪裁路径叠加层:

    gmt solar -G -Td

## 参考

代码来自于 https://www.esrl.noaa.gov/gmd/grad/solcalc/calcdetails.html

## 相关模块

clip, coast, plot