以地图和卫星图为底图
- 示例贡献者:
陈箫翰
当绘图区域非常小时,GMT 自带的海岸线数据与地形数据精度较差,不适宜用来绘制底图。对于这种情况,读者可以使用公开的地图或卫星图接口(例如高德地图、谷歌地图等)绘制底图。 GMT 没有下载此类地图的功能。 google-map-downloader 中的 downloader_gmtchina.py 脚本支持可以下载高德地图及卫星图以及 谷歌地图及卫星图。详细用法见 google-map-downloader 的官方说明文档。
以厦门市为例,使用如下参数下载四种地图:
$ python downloader_gmtchina.py 118.055917 118.244753 24.399450 24.559724 12 google.tif google
$ python downloader_gmtchina.py 118.055917 118.244753 24.399450 24.559724 16 google_sat.tif google_sat
$ python downloader_gmtchina.py 118.055917 118.244753 24.399450 24.559724 12 amap.tif amap
$ python downloader_gmtchina.py 118.055917 118.244753 24.399450 24.559724 16 amap_sat.tif amap_sat
当绘图区域非常小时,在 GMT 中可以使用“度:分:秒”的格式表示地理坐标,避免计算小数。
例如 121:52:38.3
表示东经 121 度 52 分 38.3 秒。
下面的例子展示了绘制厦门市四种地图的示例。通过对比可见 GMT 自带的海岸线数据在绘图区域较小时准确性较差。
#!/usr/bin/env bash
gmt begin map
# 设置绘图时以“度:分:秒”的格式显示坐标
gmt set FORMAT_GEO_MAP ddd:mm:ss.xF
# 设置标注、标题格式
gmt set FONT_ANNOT 5p
gmt set FONT_TITLE 8p
gmt set MAP_TITLE_OFFSET 0p
# 指定作图区域为东经118度4分9.1秒到118度12分36秒,北纬24度25分12.6秒到24度33分23秒
# -Bxa5mf 设置经度标注间隔5分,-Bya4mf 设置纬度标注间隔4分
gmt basemap -R118:04:09.1/118:12:36.0/24:25:12.6/24:33:23.0 -JM4c -Bxa5mf -Bya4mf -B+t"Amap (GCJ-02 to WGS84)"
# 加载高德地图
gmt grdimage amap.tif -Ve
# 以最高精度绘制 GMT 自带的海岸线数据,并绘制比例尺
gmt coast -W0.5p -Lg118:11:00/24:27:00+c118:11:00/24:27:00+w2k+u -Df
# -X5.5c 将绘图原点右移5.5厘米
gmt basemap -R118:04:09.1/118:12:36.0/24:25:12.6/24:33:23.0 -JM4c -Bxa5mf -Bya4mf -B+t"Amap Satellite (GCJ-02 to WGS84)" -X5.5c
# 加载高德卫星图
gmt grdimage amap_sat.tif -Ve
gmt coast -W0.5p -Df
# -X-5.5c 将绘图原点左移5.5厘米,-Y-5.5c 将绘图原点下移5.5厘米
gmt basemap -R118:04:09.1/118:12:36.0/24:25:12.6/24:33:23.0 -JM4c -Bxa5mf -Bya4mf -B+t"Google Maps (GCJ-02 to WGS84)" -X-5.5c -Y-5.5c
# 加载谷歌地图
gmt grdimage google.tif -Ve
gmt coast -W0.5p -Df
gmt basemap -R118:04:09.1/118:12:36.0/24:25:12.6/24:33:23.0 -JM4c -Bxa5mf -Bya4mf -B+t"Google Satellite WGS84" -X5.5c
# 加载谷歌卫星图
gmt grdimage google_sat.tif -Ve
gmt coast -W0.5p -Df
gmt end show