---
author: 何星辰, 田冬冬, 周茂
date: 2025-10-24
---

# 带岛屿的湖泊填充

在地理信息可视化与制图中，当绘制湖泊或其他多边形地物时，若湖泊内部存在岛屿，
直接填充颜色可能导致岛屿区域被同样填充。为了实现仅填充湖水而保留岛屿，
需要利用 GMT 的“带洞多边形”功能。

实现此目标通常包含以下步骤：

1. 准备湖泊及其岛屿的多边形数据，并按照 GMT ``> -Ph`` 语法将岛屿标记为洞；
2. 使用 {doc}`/module/plot` 模块绘制多边形，使用 **-G** 选项指定湖水填充颜色。

典型伪代码示例如下:

    gmt plot -R0/10/0/10 -JX10c -Baf -Gblue -png map << EOF
    >
    # 湖泊外轮廓
    1 1
    1 9
    9 9
    9 1
    > -Ph
    # 湖中岛屿
    3 3
    3 5
    5 5
    5 3
    EOF

使用此方法时，需保证湖泊及岛屿多边形数据的坐标顺序正确，
并严格遵循 GMT 的“洞”标记语法。绘制结果中，湖水被填充指定颜色，
而岛屿保持透明或背景色，实现真实湖泊与岛屿的可视化效果。

以下示例以太湖为例展示具体操作。由于太湖范围较大，
可通过 [Overpass Turbo](https://overpass-turbo.eu/) 网站获取太湖及其岛屿的矢量数据，
查询语句如下:

    relation["name"="太湖"];
    out geom;

将查询结果导出为 GeoJSON 格式，然后使用如下命令转换为 GMT 格式:

    ogr2ogr -f "GMT" taihu.gmt taihu.geojson

此外，也可直接下载预制文件： {download}`taihu.gmt <taihu.gmt>`

在下图示例中，左图展示了湖泊轮廓绘制效果，右图展示了湖泊填充效果，
其中岛屿保持透明，从而形成完整、真实的带岛屿湖泊可视化。

```{eval-rst}
.. gmtplot:: ex032.sh
    :width: 80%
    :show-code: true
```
