You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个turf.js蒙版以获得带多个孔洞的单一多边形

问题分析与解决方案

为什么turf.union返回null?

  • 你的两个输入Polygon不符合GeoJSON规范:外层多边形(第一个坐标环)被完全包含在孔洞(第二个环)内部,这种反向包含的结构是无效的,turf无法处理这类无效几何,因此返回null。
  • turf.union的设计目标是合并外层相互重叠或相邻的有效多边形,它不负责处理反向包含的几何结构,也不能直接用来合并孔洞。

正确实现「多孔洞多边形」的方案

如果你的目标是创建一个大外层多边形内部包含两个小孔洞的有效Polygon,直接构造符合GeoJSON规则的结构即可:
GeoJSON Polygon规则:

  • 第一个坐标环是外层边界,必须为顺时针方向,代表多边形的整体范围;
  • 后续所有坐标环是孔洞,必须为逆时针方向,且完全在外层边界内部。

示例代码

// 符合规范的多孔洞Polygon
const multiHolePolygon = {
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      // 外层大矩形(顺时针)
      [[-75.786602,45.296747],[-75.722062,45.296747],[-75.722062,45.329341],[-75.786602,45.329341],[-75.786602,45.296747]],
      // 第一个小孔洞(逆时针,坐标顺序与原外层反转)
      [[-75.778706,45.311839],[-75.778706,45.323789],[-75.762915,45.323789],[-75.762915,45.311839],[-75.778706,45.311839]],
      // 第二个小孔洞(逆时针)
      [[-75.74575,45.296747],[-75.74575,45.31715],[-75.728928,45.31715],[-75.728928,45.296747],[-75.74575,45.296747]]
    ]
  }
};

// 验证有效性
console.log(turf.valid(multiHolePolygon)); // 返回true

额外提示

  • 可以使用turf.valid方法检查Polygon是否符合GeoJSON规范,原始输入会返回false,修正后的结构会返回true;
  • 如果你的需求是合并两个独立的外层多边形(比如两个不重叠的小矩形合并成一个MultiPolygon或单个合并后的Polygon),确保输入的每个Polygon都是外层在外、孔洞在内的有效结构,再使用turf.union处理。

内容的提问来源于stack exchange,提问作者Vcoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:53:15