我正在使用传单绘制来创建多边形。 我的要求是当用户绘制多边形时,它不应与现有多边形相交/重叠。 我在多边形传单中使用了一个点来检测点是否落在多边形内并且它正在工作, 但问题是我无法检测到一条线是否穿过另一个多边形。在这种情况下,点位于现有多边形之外但存在重叠。
下面附图可以提供更好的图片!
答案 0 :(得分:4)
答案 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人员完成的开源项目。你可能会这样做:
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;