1 加载面数据
- 使用 ogr2ogr 将 Shapefile 格式转换为 GMT 可识别的 OGR/GMT 格式
ogr2ogr -f geo3al.gmt geo3al.shp -t_srs EPSG:4326
注:
- 原始数据使用的是以米为单位的投影坐标,而非以经纬度表示的地理坐标。因而在使用 ogr2ogr 时需要加上 -t_srs EPSG:4326 参数进行坐标转换
- 转换时 .dbf、.prj、.shx 等文件必须和 shp 文件放在同一目录下
- 加载数据
gmt plot -R80/130/20/60 geo3al.gmt -W0.5p -png shp
- 后续可以根据属性,用不同的颜色表示
—>可自定义CPT 色标文件,存储为.cpt文件
#第一列为属性表名称 第二列为属性颜色 第三列为图例中所要显示的名称
Q 255/242/186 ;Quaternary
\N 255/230/25 ;Neogene
Pg 253/154/82 ;Paleogene
T 242/249/29 ;Tertiary (undivided)
Cz 255/255/191 ;Cenozoic (undivided)
TK 242/250/140 ;Cretaceous-Tertiary
4.填充色块,地质年代从数据的 GEN_GLG 属性中提取,用不同的颜色表示
#-aZ="GEN_GLG" 使用 GEN_GLG 元数据作为 Z 值。
#-G+z 根据 Z 值和 CPT 文件确定填充颜色。
gmt plot -R80/130/20/60 geo3al.gmt -Cgeoage.cpt -aZ="GEN_GLG" -G+z -png shp
5.图例中选择性显示
#不显示以B、F、N、#开头的内容
#将其他行的内容读入 label、color 和 period 变量中
gawk '!/^($|B|F|N|#)/' $cpt | while read label color period
do
#将这些变量的值写入 type_legend.txt 文件中,生成图例项。每个图例项的格式如下:
echo "S 0.2c r 0.4c $color 0.5p 0.6c $period" >> type_legend.txt
#具体来说,echo 命令在这里的作用是将 S 0.2c r 0.4c $color 0.5p 0.6c $period 这一行文本追加到 type_legend.txt 文件中,其中 $color 和 $period 是在 while 循环中从 hydrogeo.cpt 文件中读取的变量。
done
#-----------------------------------------------------
#若仅仅只想读取前N=4行
# 初始化计数器
count=0
gawk '!/^($|B|F|N|#)/' $cpt | while read label color period
do
# count=$((count + 1)):每次循环时,计数器 count 增加1。
count=$((count + 1))
# 输出一行到 type_legend.txt
echo "S 0.2c r 0.4c $color 0.5p 0.6c $period" >> type_legend.txt
# 如果计数器达到4,使用 break 退出循环,
if [ $count -eq 4 ]; then
break
fi
done
#-----------------------------------------------------
#如果想在读取中间插入一个新变量,替换掉原始数据
#以替换掉第N=4个为例
# 初始化计数器
count=0
gawk '!/^($|B|F|N|#)/' $cpt | while read label color period
do
# 增加计数器
count=$((count + 1))
#如果 count 等于 4,即在第四次迭代时,定义一个新变量 new_variable="CustomLabel" 并用它来替换原来的 period 变量。
if [ $count -eq 4 ]; then
new_variable="CustomLabel"
echo "S 0.2c r 0.4c $color 0.5p 0.6c $new_variable" >> type_legend.txt
else
# 正常处理其他迭代
echo "S 0.2c r 0.4c $color 0.5p 0.6c $period" >> type_legend.txt
fi
# 继续循环,直到文件读取完毕
done
#------------------------------------
#如果不想替换掉原来的某一行数据而是插入
#以替第N=4插入为例
# 初始化计数器
count=0
gawk '!/^($|B|F|N|#)/' $cpt | while read label color period
do
# 增加计数器
count=$((count + 1))
# 如果是第四次迭代,插入一个新变量并输出
if [ $count -eq 4 ]; then
new_variable="CustomLabel"
echo "S 0.2c r 0.4c $color 0.5p 0.6c $new_variable" >> type_legend.txt
fi
# 正常处理其他迭代
echo "S 0.2c r 0.4c $color 0.5p 0.6c $period" >> type_legend.txt
# 继续循环,直到文件读取完毕
done
2 加载点线数据
- 注:加载点线shp数据和面方法的差别不大,但是若在绘制图中无法显示,在确认了绘制代码没错的前提下,有可能是shp数据的坐标系有问题,应该使用地理坐标系。
ogr2ogr -f OGR_GMT point.gmt point.shp
参考:GMT 中文社区