ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – OpenLayers 3删除功能不会从地图中删除该功能

2019-06-24 10:23:13  阅读:233  来源: 互联网

标签:javascript openlayers


非常感谢以下问题的任何和所有帮助:

我使用openlayers 3来绘制多边形.我想要实现的目标如下 – 当开始绘制一个新的多边形时 – 从地图中删除任何现有的多边形,这样一次只能绘制一个多边形.然而,会发生的是,功能(多边形)仅从内存中删除,但仍然在地图上保持可见.

这个jsfiddle演示了这个问题:
http://jsfiddle.net/jp4dojwu/

如您所见,onDrawStart我首先清除tempVectorSource(绘制多边形的位置,因为featureOverlay.source === tempVectorSource),然后提醒tempVectorSource的功能数量.警报将始终按预期显示0,但多边形仍在地图上可见.

function onDrawStart(event)
{
     //remove everything drawn previously
     tempVectorSource.clear();

     //can see the feature(s) are removed from memory
     alert(tempVectorSource.getFeatures().length);
}

提前致谢!

编辑:找到遇到相同问题的任何人的解决方法 – 在向量源上调用clear之前,将所有先前绘制的要素的几何图形设置为没有坐标的点,如下所示:

function onDrawStart(event)
{
    var features = tempVectorSource.getFeatures();
    for(var i=0;i<features.length;i++)
    {
        features[i].setGeometry(new ol.geom.Point([]));
    }
    tempVectorSource.clear();

}

以上基本上将所有多边形渲染成“不可见”点.仍然很想找到一个真正的解决方案!

编辑(2):请在接受的答案下面看我的评论,我将featureOverlay设置为形状所在的地图实例.删除以下行修复了问题,因为featureOverlay有自己的形状副本:

featureOverlay.setMap(map);

解决方法:

不知道这是否有帮助,但我有一个相关的问题:

我编写了那段代码,可以很好地“重置”绘图层.您可以先使用onDrawStart触发该函数,然后再启动绘图部分.

function clearMap() {
  vector_layer.getSource().clear();
  if (select_interaction) {
    select_interaction.getFeatures().clear();
  }
}

这适用于最新的ol3-build(EDIT:当时是v3.0.0)

标签:javascript,openlayers
来源: https://codeday.me/bug/20190624/1277182.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有