I have a vectorLayer, polygonLayer, which I am calling
destroyFeatures(polygonLayer.features) on. I can confirm that after calling
it, the features go away in the polygonLayer.features variable. However, the
features (polygons drawn by the DrawFeatures controller as per the example
found at:
http://openlayers.org/dev/examples/regular-polygons.html
http://openlayers.org/dev/examples/regular-polygons.html 
) don't actually go away on screen (they are still drawn on the map).

I thought maybe calling redraw() on the vectorLayer would help, but no dice.
Even though I have only one feature in the layers' array, I am seeing
several circles on screen.

>From the API, I got the impression that the features would be both erased
AND removed from the array. Was I wrong? How can I get the features to go
away?

Background:  I only want one polygon on screen at a time, thus when the
event "beforeaddingfeature" is called, I clear all existing features, and
then let the current feature be added like normal. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Code:

<html>
<head>
<h1> Select Blackout Area </h1>
        <script type="text/javascript" 
src="javascripts/jquery-1.3.2.js"></script>
        <script type="text/javascript"
src="javascripts/jquery.timers-1.2.js"></script>
        
  
        <!-- bring in the OpenLayers javascript library
                 (here we bring it from the remote site, but you could
                 easily serve up this javascript yourself) -->
        <script src="http://www.openlayers.org/api/OpenLayers.js";></script>
                <script src="/javascripts/OpenStreetMap.js"></script>
 
        <script type="text/javascript">
               // making this a global variable so that it is accessible for
        // debugging/inspecting in Firebug
        var map, polygonControl, polygonLayer;
        var bounds = new OpenLayers.Bounds(-125, 25, -65, 50);
 
        function init(){
 
  var navControl = new OpenLayers.Control.Navigation();
                                map = new OpenLayers.Map ("map", {
                                controls:[
                                        navControl,
                                        //new OpenLayers.Control.PanZoomBar(),
                                        //new 
OpenLayers.Control.LayerSwitcher(),
                                        new OpenLayers.Control.Attribution()],
                                numZoomLevels: 10,
                                //restrictedExtent: 
bounds.clone().transform(EPSG4326, EPSG900913),

restrictedExtent: bounds.clone().transform(
        new OpenLayers.Projection("EPSG:4326"),
        new OpenLayers.Projection("EPSG:900913")),

maxExtent: bounds.clone().transform(
        new OpenLayers.Projection("EPSG:4326"),
        new OpenLayers.Projection("EPSG:900913")),
                                maxResolution: "auto",
                                units: 'm',
                                projection: new 
OpenLayers.Projection("EPSG:900913"),
                                displayProjection: new 
OpenLayers.Projection("EPSG:4326")
                        } );
 
           //actually draws the map 
            layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {
                        displayOutsideMaxExtent: false,
                        wrapDateLine: true
                        //numZoomLevels: 4
                        });
                    polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer");
                        map.addLayer(layerMapnik);
                        map.addLayer(polygonLayer);
                        map.addControl(new OpenLayers.Control.MousePosition());
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            var polyOptions = {sides: 40};
            polygonControl = new
OpenLayers.Control.DrawFeature(polygonLayer,
                                           
OpenLayers.Handler.RegularPolygon,
                                            {handlerOptions: polyOptions});
           map.setCenter(new OpenLayers.LonLat(0, 0), 3);
           //polygonControl.activate();
            
            map.addControl(polygonControl);
            map.zoomToMaxExtent();
            var feature;
            polygonLayer.events.register("beforefeatureadded", feature,
function(evt){
            //only one circle at a time
            clearCircles();
            });//end attempt at events registration
        }//end init
        
                function setSize(fraction) {
            var radius = fraction * map.getExtent().getHeight();
            polygonControl.handler.setOptions({radius: radius,
                                               angle: 0});

        }//end setSize
        
        function clearCircles(){
        console.log("Clearing existing circles");
        console.log(polygonLayer.features.length);
        polygonLayer.destroyFeatures(polygonLayer.features);
        polygonLayer.redraw();
        }//end clearCircles
    </script>
        
        
        
        </script>
        
        </head>
        
        <body onload="init()">
        <ul id="controls">Map Controls
            
                <input type="radio" name="type"
                       value="none" id="noneToggle"
                       onclick="polygonControl.deactivate()"
                       checked="checked" />
                <label for="noneToggle">navigate</label>
            
            
                <input type="radio" name="type"
                       value="polygon" id="polygonToggle"
                       onclick="polygonControl.activate()" />
                <label for="polygonToggle">draw polygon</label>
            
        </ul>
          <div id="map" class="small_map"></div>
        
        
        </body>
        
        </html>
-- 
View this message in context: 
http://n2.nabble.com/VectorLayer-destroyFeatures-doesn-t-work-properly-tp4860918p4860918.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.
_______________________________________________
Users mailing list
Users@openlayers.org
http://openlayers.org/mailman/listinfo/users

Reply via email to