逐个删除多边形中的所有点

时间:2018-05-25 09:15:30

标签: javascript openlayers-3

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

 Uncaught (in promise): Error: Template parse errors:
 Can't bind to 'options' since it isn't a known property of 'angular2- 
  date-picker'.


    <angular2-date-picker title="Click to enter From Date and Time" 
    [ERROR ->][options]="fromDateTransaction"
                [(ngModel)]="date" [settings]="settings" 
    "): ng:///MasterSystemModule/TransactionComponent.html@52:84

用于开始绘图的代码:

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(); 删除点 - 它可以工作,直到有3个点,这使得最小的闭合多边形 - 三角形。那么即使alt + click组合也不起作用。我甚至在OpenLayers examples上试过这个 - 同样的行为。所以我有三个问题:

  1. 关闭多边形后会发生什么,所以我无法用alt + click删除点?

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

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

1 个答案:

答案 0 :(得分:0)

  1. 绘图完成后,the sketch is added to the target layer,也从绘图交互中删除,所以如果你想访问它,你需要调用

      

    source.getFeatures();

  2. 任何绘制交互功能都不再对它产生影响。

    1. 正如here所写,Polygon是:
    2. 定义多边形的线性环数组。阵列的第一个线性环定义了多边形的外边界或表面。每个随后的线性环在多边形的表面中限定孔。线性环是顶点坐标的数组,其中第一个坐标和最后一个坐标是等效的。

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

      1. 您可以检查多边形几何体中的点数,并在尝试删除第三个点时,将几何图形更改为线条(或更多地更改为LineString),并在删除第二个点时将其更改为点。