Я использую OpenLayers3 ol.interaction.Draw
, чтобы позволить пользователю рисовать фигуру на карте, либо щелкая вершины, либо Shift+Drag, чтобы нарисовать многоугольник произвольной формы (это важно для моего приложения). После того, как фигура нарисована, я использую turf.js для сравнения нарисованной фигуры со слоем WFS в клиенте, запуская intersect()
, чтобы увидеть, пересекаются ли объекты WFS с нарисованной фигурой. Однако, если нарисованная от руки фигура имеет хотя бы малейшее самопересечение, функция intersect()
turf.js завершается со следующей ошибкой (в строке 326 я вызываю intersect()
).
turf.min.js:9 Uncaught [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.js simplify()
и ol.geom.Geometry.simplify()
безрезультатно. Есть ли у кого-нибудь какие-либо предложения о том, как заставить turf.js intersect()
обрабатывать нарисованные от руки самопересекающиеся многоугольники? Или способ удалить самопересечения перед запуском пересечения?