-J 选项

-J 选项用于指定坐标变换方式或地图投影方式,即将数据投影到画布上所采用的函数。

-J 选项后接投影代码以及投影参数。GMT目前支持三种不同的方式指定投影代码和投影方式:

  • GMT投影代码

  • Proj4投影代码

  • GMT+PROJ4投影代码

GMT投影代码

-J 选项有两种写法:

-J\(\delta\)[parameters/]scale

-J\(\Delta\)[parameters/]width

其中,δΔ 用于指定投影代码,前者为小写字母,后者为大写字母。 parameters 是零个或多个由斜杠分隔的投影参数,参数数目由投影方式决定。

投影代码使用小写字母时,-J 的最后一个参数 scale 表示底图比例尺,即图上距离与真实地球距离之间的换算关系。scale 可以有两种格式:

  • 单个数字加单位,例如 2c,表示真实地球距离的1度投影到画布上为2厘米

  • 1:xxxx 格式,例如 1:10000000 表示画布上的1厘米对应真实地球距离的10000000厘米

投影代码为大写字母时,-J 的最后一个参数 width 表示底图宽度。还可以加上子选项还进一步控制 width 的含义:

  • +dw 表示 width 为底图的宽度 [默认值]

  • +dh 表示 width 为底图的高度

  • +du 表示 width 为底图维度中最大的那个维度的长度

  • +dl 表示 width 为底图维度中最小的那个维度的长度

注解

几乎所有地图投影方式,都只能指定底图宽度或高度中的任一个,而不能同时指定二者,因为地图高度会由地图宽度和投影方式自动决定。

画图时通常建议使用大写投影代码以直接指定图片宽度,除非需要明确指定比例尺。

例如:

  • -Jm1c 表示使用墨卡托投影,地图上的1度距离投影到画布上为1厘米

  • -Jm1:10000000 表示使用墨卡托投影,画布上的1 cm代表实际距离中的10000000 cm,即100 km

  • -JM15c 也表示使用墨卡托投影,整个地图的宽度是15厘米,地图的高度由 -R-J 自动确定

  • -JM15ch 表示整个地图的高度是15厘米

  • -JX10c/5c 使用线性投影,地图的宽度是10厘米,高度为5厘米

下表列出了GMT所支持的全部投影方式,详细介绍见 地图投影

GMT 投影代码

-J 代码

说明

-JAlon0/lat0[/horizon]/width

Lambert azimuthal equal area

-JBlon0/lat0/lat1/lat2/width

Albers conic equal area

-JClon0/lat0/width

Cassini cylindrical

-JCyl_stere[lon0/[lat0/]]width

Cylindrical stereographic

-JDlon0/lat0/lat1/lat2/width

Equidistant conic

-JElon0/lat0[/horizon]/width

Azimuthal equidistant

-JFlon0/lat0[/horizon]/width

Azimuthal gnomonic

-JGlon0/lat0[/horizon]/width

Azimuthal orthographic

-JGlon0/lat0/alt/azim/tilt/twist/W/H/width

General perspective

-JH[lon0/]width

Hammer equal area

-JI[lon0/]width

Sinusoidal equal area

-JJ[lon0/]width

Miller cylindrical

-JKf[lon0/]width

Eckert IV equal area

-JKs[lon0/]width

Eckert VI equal area

-JLlon0/lat0/lat1/lat2/width

Lambert conic conformal

-JM[lon0/[lat0/]]width

Mercator cylindrical

-JN[lon0/]width

Robinson

-JOalon0/lat0/azim/width[+v]

Oblique Mercator, 1: origin and azim

-JOblon0/lat0/lon1/lat1/width[+v]

Oblique Mercator, 2: two points

-JOclon0/lat0/lonp/latp/width[+v]

Oblique Mercator, 3: origin and pole

-JPwidth[+a][+f[e|p|radius]][+kkind][+roffset][+torigin][+z[p|radius]]

Polar/Cylindrical

-JPoly[lon0/[lat0/]]width

(American) polyconic

-JQ[lon0/[lat0/]]width

Equidistant cylindrical

-JR[lon0/]width

Winkel Tripel

-JSlon0/lat0[/horizon]/width

General stereographic

-JT[lon0/[lat0/]]width

Transverse Mercator

-JUzone/width

Universal Transverse Mercator (UTM)

-JV[lon0/]width

Van der Grinten

-JW[lon0/]width

Mollweide

-JXwidth[l|pexp|T|t][/height[l|pexp|T|t]][d]

Linear, logarithmic, power, and time

-JYlon0/lat0/width

Cylindrical equal area

Proj4投影代码

GMT用单个字母指定投影方式,但英文字母只有26个,而投影方式却不止26个,因而,从GMT 4.3.0开始,GMT开始支持 Proj4 包的投影代码。Proj4 包不是使用单个字符指定投影方式,而是通过一个单词指定。比如墨卡托投影既可以用 -Jm 指定也可以用 -Jmerc 指定。

其语法为:

-Jabbrev/[parameters/]scale

-JAbbrev/[parameters/]width

类似的,若投影代码的首字母为大写,则最后一个参数表示底图宽度;若投影代码为小写,则最后一个参数表述底图比例尺。

Proj4投影代码

代码

说明

-Jaea/lon0/lat0/lat1/lat2/scale

Albers conic equal area

-Jaeqd/lon0/lat0[/horizon]/scale

Azimuthal equidistant

-Jcass/lon0/lat0/scale

Cassini cylindrical

-Jcea/lon0/lat0/scale

Cylindrical equal area

-Jcyl_stere/[lon0[/lat0/]]scale

Cylindrical stereographic

-Jeqc/[lon0[/lat0/]]scale

Equidistant cylindrical

-Jeqdc/lon0/lat0/lat1/lat2/scale

Equidistant conic

-Jgnom/lon0/lat0[/horizon]/scale

Azimuthal gnomonic

-Jhammer/lon0/scale

Hammer equal area

-Jeck4/lon0/scale

Eckert IV equal area

-Jeck6/lon0/scale

Eckert VI equal area

-Jlaea/lon0/lat0[/horizon]/scale

Lambert azimuthal equal area

-Jlcc/lon0/lat0/lat1/lat2/scale

Lambert conic conformal

-Jmerc/[lon0[/lat0/]]scale

Mercator cylindrical

-Jmill/lon0/scale

Miller cylindrical

-Jmoll/[lon0/]scale

Mollweide

-Jnsper/lon0/lat0alt/azim/tilt/twist/W/H/scale

General perspective

-Jomerc/lon0/lat0azim/scale

Oblique Mercator, 1: origin and azimuth

-Jomerc/lon0/lat0/lon1/lat1/scale

Oblique Mercator, 2: two points

-Jomercp/:lon0/lat0/lonp/latp/scale

Oblique Mercator, 3: origin and pole

-Jortho/lon0/lat0[/horizon]/scale

Azimuthal orthographic

-Jpolar/[a]scale[/origin]

Polar [azimuthal] (\(\theta, r\)) (or cylindrical)

-Jpoly/[lon0[/lat0/]]scale

(American) polyconic

-Jrobin/[lon0/]scale

Robinson

-Jsinu/lat0/scale

Sinusoidal equal area

-Jstere/lon0/lat0[/horizon]/scale

General stereographic

-Jtmerc/[lon0[/lat0/]]scale

Transverse Mercator

-Jutm/zone/scale

Universal Transverse Mercator (UTM)

-Jvandg/[lon0/]scale

Van der Grinten

-Jwintri/[lon0/]scale

Winkel Tripel

-Jxyxscale[l|pexp|T|t][/yscale[l|pexp|T|t]][d]

Linear, log\(_{10}\), \(x^a-y^b\), and time

GMT+PROJ4

从GMT6开始,GMT支持使用 PROJ.4 库来实现坐标和基准面的转换。这一特性是通过GDAL 实现的,因而需要GMT在安装时链接到GDAL库。详细的 PROJ.4 语法见 https://proj.org/apps/index.html

在PROJ.4中,投影一般有很多参数,多个参数之间用空格分隔。在GMT中,可以将所有参数用双引号括起来:

-J"+proj=merc +ellps=WGS84 +units=m"

或直接将所有参数连在一起:

-J+proj=merc+ellps=WGS84+units=m

也可以直接使用 EPSG codes,但需要设置环境变量 GDAL_DATA 指向 GDAL 的 data 子目录。例如 -JEPSG:4326 表示使用 WGS-84 系统。

对于 mapprojectgrdproject 模块,可以直接使用 +to 关键字直接指定要将A参考系统转换为B参考系统,而不需要中间步骤。例如:

-JEPSG:4326+to+proj=aeqd+ellps=WGS84+units=m

对于使用 mapprojectgrdproject 进行点和网格文件的转换,GMT可以使用所有的 PROJ.4投影。但对于绘图而言,其用处却很有限。一方面,只有一部分 PROJ.4 的投影方式可以被映射到GMT的投影语法中。另一方面,由于PROJ.4不是一个绘图库,其不支持设置地图比例尺或地图大小。因而,GMT为PROJ.4语法引入了两个扩展:+width=size+scale=1:xxxx 使得其与经典的GMT中的工作方式相似。也可以在投影参数的最后加上字符串 /1:xxx 来指定比例尺。