2026年10月16日,地图渲染引擎GLMap团队宣布将核心的多边形切分模块独立开源,推出遵循ISC协议的单头文件C++库与npm模块earstrip。在苹果M4 Pro芯片单核环境下,该算法处理波兰马佐夫舍省13级离线地图的374万个多边形,最终跑出489毫秒的极速,比Mapbox维护了近十年的行业事实标准earcut.hpp快14%,在浏览器Wasm环境下提速达到1.4至2.1倍。
这组测试数据在开发者社区激起不小涟漪。任何GPU在底层光栅化时都只认三角形,而电子地图的建筑、草坪、水体全由多边形构成,三角化切分是矢量地图渲染绕不开的第一道计算窄门。然而,这并不是一场单纯依靠重构耳切法(Ear Clipping)实现的算法黑魔法,它的提速底牌是一套极其务实的算法分流混合架构,以及对现代图形管线输出格式的定制。
489毫秒破纪录:向Mapbox八年基石发起挑战
为了验证极限性能,测试集z13.bin预加载了3,740,425个多边形、3,763,815个环和28,943,266个顶点,所有坐标均采用16位有符号瓦片网格,取7次运行的最优计时。GLMap旧引擎基于约束德劳内三角化(CDT),切完整个数据集耗时2.93秒。由于CDT致力于让三角形最小内角最大化以维持几何优良度,在只求平面纯色填充的地图场景中显得过于奢侈。
换上基础耳切法后耗时降至1.12秒,随后作者展开了一系列微架构与数据结构剪裁:先是将检测范围缩小到内凹点(reflex vertex),跳过无内凹的凸多边形;对超过32个内凹点的复杂图形构建分桶空间索引;再用无分支指令统计点位命中。仓储后续基准测试将该记录更新为490毫秒。
表面上看,这是一场属于底层微架构优化的胜利。但真正拉开代差的分水岭,并不在常规几何形状上。
混合算法的阳谋:超128环的CDT分流战
当面对世界地图数据集中56,472个包含复杂孔洞的多边形时,两者的差距彻底拉大。这批数据极为严苛,单个多边形内孔洞数量最多达到11,675个。在此类场景下,原生C++编译的earstrip仅耗时459毫秒,而earcut.hpp 3.2.4足足耗费了2,892毫秒,性能差距超过6倍。
这一战果并非来自耳切法本身。如果强制earstrip跑纯耳切逻辑,该数据集耗时立刻上升到1,848毫秒。耳切法的死穴在于处理孔洞时需要寻找内外环搭桥切开,孔洞极多时每次测试都要扫描成百上千个点,计算复杂度呈平方级膨胀。
earstrip提速的本质不是战胜了耳切法的数学极限,而是学会了在临界点放弃耳切。
earstrip引入了混合调度架构:常规简单多边形走耳切以保极速,一旦检测到环数超过128个或出现自相交问题环,引擎便自动切换到约束德劳内回退路径,并改用非零环绕数(Non-zero winding)规则进行填充。正是这种算法路由机制,在复杂地形上瞬间消解了耳切法的瓶颈。
- 结论.多边形切分在工业场景的核心矛盾不是单一算法的纯粹度,而是几何复杂度的阶梯分布。自适应分流比守着单一范式更具工程价值。
隐藏在三角带与精度网格里的工程取舍
除了调度策略,性能数字的统计口径同样暗藏玄机。earcut默认输出的是三角形列表(Triangle List),每个三角形必须老老实实写下三个顶点索引;而earstrip原生与Wasm内部默认生成的是三角带(Triangle Strip)。通过在交替剪切耳角时左右穿梭,马佐夫舍省生成的2,150万个三角形仅用了3,580万个索引,相比独立三角形列表的6,450万个索引减少了近44%。
这种输出格式直接契合了移动端GPU图元管线,但在跨语言对接时会产生开销。在V8引擎的Wasm基准测试中,如果模块在内部循环且保留内存,耗时仅需601毫秒。但若为了兼容earcut的原生调用习惯,走npm包装的一多边形一次JS跨边界交互,耗时便会拉长至766毫秒。如果把三角带强行解构成独立三角形列表,原本在浏览器端标称的2.1倍加速也会收窄至1.4到1.6倍。
更深层的妥协发生在几何鲁棒性层面。earstrip并不是无边界的通用几何库,它设定了明确的算术精度范围:耳切运算针对±2^25以内的整数,CDT针对32位整数,超出部分则强制量化映射至包围盒上的2^30网格。
针对地理测绘中屡见不鲜的脏数据,earstrip兼容接口(如earstrip()或batch())坚守不动态添加交叉点的原则,遇到自相交与退化多边形时采用环路分割近似。只有在strips()等特定高级接口下,库才会返回新增交点,并通过lastStatus()状态机暴露出当前结果究竟是绝对精确(exact)、受约束(constrained)还是近似值(approximate)。
这种务实让它在82个无法精确耳切的退化多边形测试中交出了不错的成绩。在128x128分辨率光栅化后,earstrip与理论奇偶填充的平均像素不一致率仅为0.15%,而earcut.hpp由于孔洞穿透与无效顶点回环,像素不一致率高达31%。
- 提醒.使用该库无法获得等同于CGAL等重型计算几何库的拓扑绝对证明。它用有限网格量化和状态机回退,换取了图形渲染领域最需要的视觉正确与极速。
对于MapLibre生态、移动端自研GIS或WebGPU应用的开发者而言,earstrip提供了一个诱人的性能升级选项。但替换掉运行多年的earcut前,必须确认渲染管线是否原生支持三角带排布,以及地理数据管道能否接受非零环绕数与网格量化带来的边缘行为变化。
