OpenLayers 2.13.1:从多几何特征中删除一个几何

OpenLayers 2.13.1: deleting a geometry from a multigeometry feature

本文关键字:特征 删除 一个 何特征 OpenLayers      更新时间:2023-09-26

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

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

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;
},