diff --git a/source/examples/ex008/index.rst b/source/examples/ex008/index.rst new file mode 100644 index 0000000000..8b3562816f --- /dev/null +++ b/source/examples/ex008/index.rst @@ -0,0 +1,56 @@ +:orphan: + +绘制缓冲区 +=========== + +:示例贡献者: 周茂 + +---- + +GMT 的 :doc:`source/module/gmtspatial` 通过调用 `Geos 库`__ 可实现部分 GIS +分析功能,包括生成缓冲区。下面为一个笛卡尔坐标多边形生成缓冲区。 + +.. gmtplot:: + :caption: 简单多边形的缓冲区 + :width: 100% + + gmt begin poly_buffer + # 创建多边形 + cat > poly < poly_buffer + # 绘制多边形 + gmt plot -R-1/2/-1/2 -JX5i poly -W0.5p,black -B + # 绘制缓冲区 + gmt plot poly_buffer -W0.5p,red + + gmt end show + +对于复杂的多边形,生成的缓冲区可能存在一些问题,以下图为例,生成的缓冲中有许多异常点, +用户可手动编辑生成的 :file:`tw_buffer.geo` 中位于文件尾部的异常点,再绘图或进行其他分析。 +还需要注意的是,缓冲区生成算法是基于笛卡尔坐标实现的,因此会将输入的地理坐标假定为笛卡尔 +坐标,这在使用地理坐标时,通常是不合适的。正常的做法是,先将多边形坐标投影,然后计算 +缓冲区,最后再将缓冲区做投影逆变换得到地理坐标,其中的投影变换或逆变换可通过 +:doc:`source/module/mapproject` 实现,选择的投影最好为等面积投影。 + +.. gmtplot:: + :caption: 海岸线缓冲区 + :width: 100% + + gmt begin coast_buffer + + # 提取边界 + gmt coast -ETW -M -Dc > tw.geo + # 适当删除面积太小的岛屿等特征,以防生成缓冲区出问题或计算太慢 + gmt spatial -Qc1000+h tw.geo -fg > tw_temp.geo + # 生成缓冲区,宽度为 0.5 度 + gmt spatial tw_temp.geo -Sb0.5 > tw_buffer.geo + gmt plot -R116/124/20/26 -JQ5i tw.geo -W0.5p,black -B + gmt plot tw_buffer.geo -W0.5p,red + + gmt end show