如何检测小叶中的多边形是否重叠

时间:2014-09-18 04:06:15

标签: polygon leaflet overlapping

我正在使用传单绘制来创建多边形。 我的要求是当用户绘制多边形时,它不应与现有多边形相交/重叠。 我在多边形传单中使用了一个点来检测点是否落在多边形内并且它正在工作, 但问题是我无法检测到一条线是否穿过另一个多边形。在这种情况下,点位于现有多边形之外但存在重叠。

下面附图可以提供更好的图片!Polygons overlap in this

3 个答案:

答案 0 :(得分:4)

您也可以使用Turf.js。 Turf是由Mapbox的人员开发的新的js GIS引擎。

以下是一些可以完成这项工作的例子:

答案 1 :(得分:1)

在leaflet.draw中,您可以将选项传递给各个绘图处理程序。其中一个allowIntersection是一个布尔类型,"确定线段是否可以交叉。"

您的选项看起来像这样(摘自leaflet.draw example config):

var options = {
    position: 'topright',
    draw: {
        polygon: {
            allowIntersection: false, // Restricts shapes to simple polygons
            drawError: {
                color: '#e1e100', // Color the shape will turn when intersects
                message: '<strong>Oh snap!<strong> you can\'t draw that!' // Message that will show when intersect
            },
            shapeOptions: {
                color: '#bada55'
            }
        },
    },
    edit: {
        featureGroup: editableLayers, //REQUIRED!!
        remove: false
    }
};

var drawControl = new L.Control.Draw(options);
map.addControl(drawControl);

答案 2 :(得分:0)

你也可以使用Terraformer Core,这是一个由ESRI人员完成的开源项目。你可能会这样做:

&#13;
&#13;
var polygon = new Terraformer.Primitive({ 
  "type": "Polygon", 
  "coordinates": [ [ [ -101.46972656250001, 34.125447565116126 ], 
                     [ -100.85449218750001, 33.760882000869195 ], 
                     [ -101.09619140625, 33.19273094190692 ], 
                     [ -102.12890625000001, 33.137551192346145], 
                     [ -102.19482421875, 33.63291573870479 ], 
                     [ -101.46972656250001, 34.125447565116126 ] ] ] }); 
var intersects = polygon.intersects({ 
  "type": "Polygon", 
  "coordinates": [ [ [ -103.32539, 30.58608 ], [ -102.32083, 29.87894 ], [ -103.32539, 30.58608 ] ] ] });
// intersects is a bool.
&#13;
&#13;
&#13;