如何使用 OpenLayers 限制现有多边形内的绘图
How to limit drawing inside existing polygon using OpenLayers
小介绍:我想在限制层上使用捕捉交互来限制现有多边形内的绘图。
我在绘图交互上实现了条件,检查限制性源的功能是否可用,如果它们可用,则在其中启用绘图。
它工作正常,但有点过于严格。 (例如,如果我想在现有边界上绘制多边形,或者我想使用现有边界在多边形内部绘制)。
示例如下:
new Draw({
condition: (e) => {
let coords = e.coordinate
let features = restrictionSource.getFeaturesAtCoordinate(coords);
if (features.length > 0) {
return true;
} else {
return false;
}
},
type: "Polygon",
source: vectorDrawLayer.getSource(),
style: styleDuringDraw
});
我在限制性多边形内部绘制时检测到一些奇怪的行为。在某些边缘我可以点击,在其他边缘我不能。
在下面的实例中:
https://stackblitz.com/edit/js-txi1es
我无法从右下角(以及上角)的内边缘开始绘图,因为某些原因,捕捉交互不起作用。我有这样的情况,我需要绘制使用整个限制性多边形区域的多边形区域,但我不能这样做,因为我的方法有点限制性。
我想知道在这种情况下是否有任何不同的方法可用或推荐。
第一个问题,您的多边形没有正确闭合,这意味着捕捉在一个边上不起作用:
'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], [-3e6, -1e6], [-5e6, -1e6]]]
snap 捕捉到一个像素点,好像那个事件中的坐标有时不完全在地物上,所以这个测试应该更可靠
let features = olMap.getFeaturesAtPixel(e.pixel, { layerFilter: function(layer) { return layer === restrictionLayer; }});
if (features && features.length > 0) {
小介绍:我想在限制层上使用捕捉交互来限制现有多边形内的绘图。
我在绘图交互上实现了条件,检查限制性源的功能是否可用,如果它们可用,则在其中启用绘图。
它工作正常,但有点过于严格。 (例如,如果我想在现有边界上绘制多边形,或者我想使用现有边界在多边形内部绘制)。
示例如下:
new Draw({
condition: (e) => {
let coords = e.coordinate
let features = restrictionSource.getFeaturesAtCoordinate(coords);
if (features.length > 0) {
return true;
} else {
return false;
}
},
type: "Polygon",
source: vectorDrawLayer.getSource(),
style: styleDuringDraw
});
我在限制性多边形内部绘制时检测到一些奇怪的行为。在某些边缘我可以点击,在其他边缘我不能。
在下面的实例中:
https://stackblitz.com/edit/js-txi1es
我无法从右下角(以及上角)的内边缘开始绘图,因为某些原因,捕捉交互不起作用。我有这样的情况,我需要绘制使用整个限制性多边形区域的多边形区域,但我不能这样做,因为我的方法有点限制性。
我想知道在这种情况下是否有任何不同的方法可用或推荐。
第一个问题,您的多边形没有正确闭合,这意味着捕捉在一个边上不起作用:
'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], [-3e6, -1e6], [-5e6, -1e6]]]
snap 捕捉到一个像素点,好像那个事件中的坐标有时不完全在地物上,所以这个测试应该更可靠
let features = olMap.getFeaturesAtPixel(e.pixel, { layerFilter: function(layer) { return layer === restrictionLayer; }});
if (features && features.length > 0) {