turf.js OpenLayers3 Draw中自相交多边形的相交错误
turf.js Intersect Error for Self-intersecting Polygons from OpenLayers3 Draw
我使用OpenLayers3 ol.interaction.Draw
让用户在地图上绘制一个形状,可以通过单击顶点,也可以通过Shift+Drag来绘制自由多边形(这对我的应用程序很重要)。一旦绘制了形状,我就使用turf.js将绘制的形状与客户端中的WFS层进行比较,运行intersect()
查看WFS特征是否与绘制的形状相交。然而,如果手绘形状甚至有最轻微的自相交,则turf.js intersect()
函数将失败,并出现以下错误(第326行是我调用intersect()
的地方)。
trurt.min.js:9未捕获[object对象]
getResultGeometry@surfs.min.js:9
si.overlayOp@草皮.最小.js:9
交叉路口@草皮.min.js:15
e.exports@草皮.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.js simplify()
和ol.geom.Geometry.simplify()
,但都没有用。有人对使用turf.js intersect()
处理手绘自相交多边形有什么建议吗?或者在运行交叉口之前删除自交叉口的方法?
受使用JSTS缓冲区来识别自相交多边形的答案的启发(感谢lead@ahocevar),我将解决方案移植到了turf.js。将绘制的具有自相交的特征缓冲0将删除较小的自相交多边形,并为您提供一个运行intersect()
的干净功能。
features.on('add', function() {
vs.forEachFeatureIntersectingExtent(extent, function(feature) {
// create geojson of wfs features and drawn feature
var bt = gjformat.writeFeatureObject(feature, {rightHanded: false});
var dt = gjformat.writeFeatureObject(features.item(0), {rightHanded: false} );
// check for kinks in the drawn feature
var kinks = turf.kinks(dt);
var dtf;
if(kinks.features.length > 0) {
// if there are self-intersections, buffer by 0 to get rid of them
dtf = turf.buffer(dt, 0, 'meters');
} else {
// if there are no self-intersection, intersect by unbuffered features
dtf = dt;
}
var intersection = turf.intersect(bt, dtf);
}
});
您至少可以警告用户自交叉。这些可以通过JSTS检测到。请参见谷歌地图多边形自相交检测。删除自相交比较困难,但使用JSTS也应该可以:使用JSTS缓冲区来识别自相交多边形。
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- 错误检测到多边形中的点
- 将多边形添加到d3 vornoi导致错误
- svg,多边形,JS函数错误
- 不能让鼠标悬停多边形与未捕获的参考错误:谷歌没有定义
- turf.js OpenLayers3 Draw中自相交多边形的相交错误
- 诺基亚Here地图计算多边形(如三角形)的质心会产生错误的结果