我正在使用 OpenLayers3ol.interaction.Draw
让用户在地图上绘制一个形状,可以通过单击顶点或通过 Shift+Drag 来绘制自由多边形(这对我的应用程序很重要)。绘制形状后,我使用 turf.js 将绘制的形状与客户端中的 WFS 图层进行比较,运行intersect()
以查看 WFS 特征是否与绘制的形状相交。但是,如果手绘形状有最轻微的自相交,turf.jsintersect()
函数会失败并出现以下错误(我调用的是第 326 行intersect()
)。
turf.min.js:9 未捕获 [object Object]
getResultGeometry @ turf.min.js:9
si.overlayOp @ turf.min.js:9
交点 @ turf.min.js:15
e.exports @ turf.min.js :16
(匿名函数)@main.js:326
以下是我的代码草图。
var features = new ol.Collection();
var vs = new ol.source.Vector({
format: new ol.format.GeoJSON(),
url: function(extent) {
return XXXXXX;
},
strategy: ol.loadingstrategy.bbox
});
features.on('add', function() {
vs.forEachFeatureIntersectingExtent(extent, function(feature) {
// use to turf.js to intersect each feature with drawn feature
var bt = gjformat.writeFeatureObject(feature, {rightHanded: false});
var dt = gjformat.writeFeatureObject(features.item(0), {rightHanded: false} );
var intersection = turf.intersect(bt, dt);
}
});
我尝试同时使用 turf.jssimplify()
并ol.geom.Geometry.simplify()
无济于事。有人对让 turf.jsintersect()
处理手绘自相交多边形有什么建议吗?或者在运行交叉路口之前删除自交叉路口的方法?