Better

Ethan的博客,欢迎访问交流

从 JSTS 奇怪的报错了解几种非法的图形

最近开始,JSTS 报错后会导致代码的堆栈信息的错误,提示的代码报错位置也是错误的,导致很难定位,如何避免这种情况呢

报错的原因

当你对图形进行操作的时候,可能会把图形变成非法图形,可以通过 jsts.geom.Geometry 的 isValid 函数判断图形是否合法。

如果图形非法了,通常我们可以通过 simplify 将图形简化成合法图形,比如使用 jsts.simplify.DouglasPeuckerSimplifier.simplify 方式。

最佳时间

当你需要对图形进行操作时,比如 intersection、buffer、difference 时,先判断 geometry 是不是 valid 图形。如果 invalid 则 simplify 一下,从而避免不可预知的错误

什么样的图形会非法呢

找了篇文章了解一下,大致有如下几种

  • Hole Outside Shell:洞不在外壳里
  • Nested Holes:洞发生了嵌套
  • Disconnected Interior:图形断开了连接
  • Self Intersection:自相交
  • Ring Self Intersection:环自交
  • Nested Shells:针对 MultiPolygon 而言,外壳发生嵌套
  • Duplicated Rings:针对 MultiPolygon 而言,外壳重复
  • Too Few Points:针对 Polygon 而言,点不足以构成图形
  • Invalid Coordinate:无效的坐标,比如 NaN
  • Ring Not Closed:没有形成封闭图形

资料



留言