【问题标题】:OpenLayers 2.13.1: deleting a geometry from a multigeometry featureOpenLayers 2.13.1:从多几何特征中删除几何
【发布时间】:2014-06-16 07:38:46
【问题描述】:

例如,我有一个由两个多边形组成的多面体。我可以使用 modifyFeature 控件和删除键删除顶点。但是, modifyFeature 控件不允许我完全删除多边形,因为它必须包含至少 3 个顶点。如何从多面要素中完全删除一个面(使用删除键)?是否有适用于 OpenLayers 的控件或插件?

我自己尝试了修补控件,但导致了多个小错误。所以我想在我花很多时间解决问题之前先问问是否有人已经这样做了。

【问题讨论】:

  • 您正在寻找选择控件上的删除功能?

标签: javascript openlayers


【解决方案1】:
removeComponent: function(point) {
    var removed = this.components && (this.components.length > 3);
    if (removed) {
        //remove last point
        this.components.pop();

        //remove our point
        OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this, 
                                                                arguments);
        //append copy of first point
        var firstPoint = this.components[0];
        OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, 
                                                            [firstPoint]);
    //bm extension: possibility to delete geometry from multigeometries
    } else if (this.components && this.parent && this.parent.parent && this.parent.parent.CLASS_NAME === "OpenLayers.Geometry.MultiPolygon") {        
        //polygon with hole
        if (this.parent.components.length > 1) {              
            for (var i = 0; i < this.parent.components.length && this.parent.components.length > 1; i++) {
                if (this.parent.components[i].id === this.id) {
                    OpenLayers.Util.removeItem(this.parent.components, this.parent.components[i]);
                    this.parent.clearBounds();
                    return true;
                }
            }
        }
        //seperate polygon
        for (var i = 0; i < this.parent.parent.components.length && this.parent.parent.components.length > 1; i++) {
            if (this.parent.parent.components[i].id === this.parent.id) {
                OpenLayers.Util.removeItem(this.parent.parent.components, this.parent.parent.components[i]);
                this.parent.parent.clearBounds();
                return true;
            }
        }
    }
    return removed;
},

【讨论】:

  • 我想我不明白你的问题。多多边形与它无关,它只是删除超过3个点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多