使用JSTS库在Leaflet多边形中查找自相交

时间:2017-12-05 05:26:58

标签: javascript mapbox leaflet.draw self-intersection

我正在使用Mapbox与Leaflet Draw,我想避免自相交的多边形。

我已经可以指定在创建绘图控件时不允许交叉点,但它仅在我使用控件创建新多边形时才有效。但是,如果我尝试编辑已经存在的多边形,则允许在那里进行交叉。

我四处搜索,发现JSTS Library完全符合我的要求,我还发现这个JSFiddle用作示例,它基于Google Maps API工作。

所以我根据以上两个链接用Mapbox创建了自己的JSFiddle。这里,'findSelfIntersects'函数如果是多边形编辑则启动,如果是新多边形则不使用它。我的想法是,如果有一个交叉点,我会向用户显示警告并取消编辑。但是,当我尝试这样做时,我收到uncaught exception: [object Object]错误。

似乎在findSelfIntersects函数的这一行上形成了错误:

var shell = geometryFactory.createLinearRing(coordinates);

我检查了Google Maps示例返回的坐标,这看起来与我得到的坐标类似。但我不知道为什么我会收到这个错误。

1 个答案:

答案 0 :(得分:0)

我刚刚注意到在谷歌地图示例中,起点和终点在坐标数组中是相同的,而我的则不是。我最初错过了它。现在我在'for'循环之后添加了下面的代码,它工作正常。

coordinates.push(new jsts.geom.Coordinate(
    corners[0].lat, corners[0].lng));

如果有人想将JSTS库与Mapbox / Leaflet一起使用,这是一个更新的JSFiddle