问题
利用GMT绘制小区域图件时,经纬度不利于表达图内部要素的相对方位,但是可以很直观的表达图所处的绝对位置。UTM平面坐标则可以直接表达图内的位置关系。那么如何才能让经纬度和UTM同时显示在一个图件中?达到以下这样的效果,如图示:
- 上、右轴显示经纬度标注
-
左、下轴显示UTM投影平面坐标
思路
这张图的本质是要用投影平面坐标系作为绘图边框,而非常规GMT的经纬度坐标。投影类型应该选用UTM投影的-Ju
,但是该投影并不支持标注平面坐标。并且经实验后发现,使用该投影后边框有两种不同形式:
- 边框为带弧度的地理坐标系
-R
后接常规的经纬度区域范围,如-R103/104/33/34
时,那么边框就是地理坐标系下的带一定弧度的边框。 - 边框为横平竖直的平面坐标系
-R
后如果用网格数据指范围,且网格数据格式为UTM时,如-Rutm.grd
,那么边框就是横平竖直的平面坐标系了。
了解这些后,我们应这么处理:
- 左、下轴
采用线性投影-Jx
,让左、下轴显示UTM平面坐标。 - 右、上轴
右、上轴采用-Ju
投影,并和-Jx
保持相同的比例尺。问题在于边框,这里图示一下上述的地理坐标系边框和平面坐标系边框的区别:-
-R103/104/33/34
会导致右、上轴的为经纬度边框,这样和左、下轴的平面坐标边框是不匹配的。见代码和示意图:
-
gmt begin test pdf,png
gmt basemap -Jx1:500000 -Rutm.grd -Bag -BSWrt --MAP_FRAME_PEN=1p,blue --MAP_GRID_CROSS_SIZE_PRIMARY=5p
#gmt basemap -Ju48S/1:500000 -Rutm.grd -Bag -BNElb --MAP_FRAME_PEN=0.4p,red
gmt basemap -Ju48S/1:500000 -R103/104/33/34 -Bag -BNEls --MAP_FRAME_PEN=0.4p,red
gmt end
-
-Rutm.grd
这样右、上轴是平面坐标系的边框,和左、下轴匹配,见代码和示意图。
gmt begin test pdf,png
gmt basemap -Jx1:500000 -Rutm.grd -Bag -BSWrt --MAP_FRAME_PEN=1p,blue --MAP_GRID_CROSS_SIZE_PRIMARY=5p
gmt basemap -Ju48S/1:500000 -Rutm.grd -Bag -BNElb --MAP_FRAME_PEN=0.4p,red
#gmt basemap -Ju48S/1:500000 -R103/104/33/34 -Ba -BNEls --MAP_FRAME_PEN=0.4p,red
gmt end
- 如何获取UTM格式的网格数据
一般下载得到的数据都是基于地理坐标的,但grdproject
可以对网格数据做地图变换和逆变换。代码如下:
gmt grdproject lon-lat.grd -Gutm.grd -Ju48S/1:1 -C -F
后期绘图
如果是经纬度数据,就将其放在-Ju
那行代码下面进行相关绘制。
如果是UTM坐标数据,就将其放在-Jx
那行代码后面进行绘制。