首页 > 解决方案 > 一个一个地从多边形中删除所有点

问题描述

我正在创建一个在绘图时从 openlayers 多边形中删除点的功能。所以有我的“配置”:

source = new ol.source.Vector({
    wrapX: false,
});

raster = new ol.layer.Tile({
      source: new ol.source.OSM()
});

vector = new ol.layer.Vector({
    source: source,
    style: new ol.style.Style(/* some config */)
});

view = new ol.View({
    center: defaultLonLatFormat,
    zoom: 12
});

mapx = new ol.Map({
       layers: [raster, vector],
       target: 'target',
       view: view
});

用于开始绘图的代码:

draw = new ol.interaction.Draw({
     source: source,
     type: 'Polygon',
});

mapx.addInteraction(draw);

用于删除最后一点的代码:

draw.removeLastPoint();
draw.changed();

在多边形打开之前,一切都像魅力一样 - 直到我将最后一个点与第一个点连接起来。之后删除最后一点没有任何意义。幸运的是,我可以删除点alt + click- 它可以工作,直到剩下 3 个点,这使得最小的闭合多边形 - 三角形。然后即使alt + click组合也不起作用。我什至在OpenLayers 示例上尝试过这个——同样的行为。所以我有三个问题:

  1. 关闭多边形后会发生什么,所以我不能用 删除点draw.removeLastPoint()

  2. 为什么我无法从多边形中删除最后三个点?

  3. 任何想法如何实现这样的功能?

标签: javascriptopenlayers-3

解决方案


  1. 绘制完成后,草图被添加到目标层,同时也从绘制交互中移除,所以如果你想访问它,你需要调用

    source.getFeatures();

任何绘图交互功能不再对其产生影响。

  1. 如此处所写,多边形是:

定义多边形的线性环阵列。阵列的第一个线性环定义多边形的外边界或表面。每个后续的线性环在多边形的表面上定义一个孔。线性环是顶点坐标的数组,其中第一个坐标和最后一个坐标是等价的。

从技术上讲,当外边界不是线性环时,它不是有效的多边形。当您的坐标少于三个时,它更像是一条线。

  1. 您可以检查多边形几何中的点数,当尝试删除第三个点时,将几何更改为线(或更确切地说是线串),并在删除第二个点时将其更改为点。

推荐阅读