最近开始,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:没有形成封闭图形