more problem description: the described behavior applies only to vector features coming from a WFS. If I draw the features onto the map previously things work out nicely, but not on rendered WFS features. ???
Cheers Sebastian Sebastian Schmitz schrieb: > Hi list, > I use OpenLayers 2.6 and have trouble with the ModifyFeature Control. > If I select a point for modifying, it does not get selected in the nice > blue select style, but stays in the layers style. > Debugging told me the modified feature is in fact displayed selected at > some point (ModifyFeature.selectFeature(object): before > this.resetVertices();) but then overridden by the layers default style > (in the Vector drawFeature method as the feature lacks a style). The > feature does neither have a style nor a renderIntent attached to it. > > Using the SelectFaeture Control on it's own without the ModifyFeature on > the map, however, features do get selected nicely. > What is worse: The modified feature disappears, when I select another > feature. > Glad for any hint. > > Cheers > Sebastian > > This is my code (the selectControl is used for : > > <html xmlns="http://www.w3.org/1999/xhtml"> > <head> > <title>SelectFeature Control on Layer.Vector</title> > <link rel="stylesheet" href="../theme/default/style.css" > type="text/css" /> > <link rel="stylesheet" href="style.css" type="text/css" /> > <style type="text/css"> > #controlToggle li { > list-style: none; > } > </style> > <script src="../lib/OpenLayers.js"></script> > <script type="text/javascript"><!-- > var map, drawControls, vectors; > OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2'; > function init(){ > map = new OpenLayers.Map('map', {controls: []}); > var wmsLayer = new OpenLayers.Layer.WMS( > "OpenLayers WMS", > "http://labs.metacarta.com/wms/vmap0", > {layers: 'basic'} > ); > > vectors = new OpenLayers.Layer.WFS( > "Cities", > "http://localhost:8080/geoserver/wfs", > {typename: 'topp:tasmania_cities'}, > { > typename: "tasmania_cities", > featureNS: "http://www.openplans.org/topp", > featurePrefix: "topp", > extractAttributes: false, > commitReport: function(str) { > OpenLayers.Console.log(str); > } > } > ); > > //new OpenLayers.Layer.Vector("Vector Layer"); > map.addLayers([wmsLayer, vectors]); > map.addControl(new OpenLayers.Control.LayerSwitcher()); > > drawControls = { > point: new OpenLayers.Control.DrawFeature( > vectors, OpenLayers.Handler.Point, > { > featureAdded : function(feature) { > feature.layer.eraseFeatures([feature]); > // cast to multipoint > feature.geometry = new > OpenLayers.Geometry.MultiPoint(feature.geometry); > feature.state = OpenLayers.State.INSERT; > feature.layer.drawFeature(feature); > } > } > ), > line: new OpenLayers.Control.DrawFeature( > vectors, OpenLayers.Handler.Path > ), > polygon: new OpenLayers.Control.DrawFeature( > vectors, OpenLayers.Handler.Polygon > ), > /*select: new OpenLayers.Control.SelectFeature( > vectors, > { > clickout: false, toggle: false, > multiple: false, hover: false, > toggleKey: "ctrlKey", // ctrl key removes from > selection > multipleKey: "shiftKey", // shift key adds to > selection > onSelect: function(feature){ > > feature.state = OpenLayers.State.DELETE > }, > onUnselect: function(feature){ > feature.state = null > } > } > ),*/ > selecthover: new OpenLayers.Control.SelectFeature( > vectors, > { > multiple: false, hover: true, > toggleKey: "ctrlKey", // ctrl key removes from > selection > multipleKey: "shiftKey" // shift key adds to > selection > } > ), > save: new OpenLayers.Control.Button( > { > trigger: > OpenLayers.Function.bind(vectors.commit, > vectors), > displayClass: "olControlSaveFeature" > } > ) > , > modify: new OpenLayers.Control.ModifyFeature( > vectors > , > { > displayClass: "olControlModifyFeature", > onModificationStart: function(feature) { > OpenLayers.Console.log("start modifying > MODIFY", > feature.id); > }, > onModification: function(feature) { > OpenLayers.Console.log("modified MODIFY", > feature.id); > feature.state = OpenLayers.State.UPDATE; > }, > onModificationEnd: function(feature) { > OpenLayers.Console.log("end modifying MODIFY", > feature.id); > feature.state = OpenLayers.State.UPDATE; > > } > } > ) > }; > > for(var key in drawControls) { > map.addControl(drawControls[key]); > } > > var panel = new OpenLayers.Control.Panel( > {displayClass: 'olControlEditingToolbar'} > ); > > panel.addControls( > [ > drawControls['save'],drawControls['modify'] > ] > ); > map.addControl(panel); > > map.addControl(new OpenLayers.Control.MouseDefaults()); > map.addControl(new OpenLayers.Control.MousePosition()); > > map.addControl(new OpenLayers.Control.PanZoom()); > > > map.zoomToExtent(new > OpenLayers.Bounds(140.64,-44.42,151.89,-38.80)); > } > > function toggleControl(element) { > for(key in drawControls) { > var control = drawControls[key]; > if(element.value == key && element.checked) { > control.activate(); > } else { > control.deactivate(); > } > } > } > > function update() { > var clickout = document.getElementById("clickout").checked; > drawControls.select.clickout = clickout; > var hover = document.getElementById("hover").checked; > drawControls.select.hover = hover; > drawControls.select.box = > document.getElementById("box").checked; > if(drawControls.select.active) { > drawControls.select.deactivate(); > drawControls.select.activate(); > } > } > --></script> > > </head> > <body onload="init()"> > <h1 id="title">OpenLayers Select Feature Example</h1> > <p id="shortdesc"> > Select a feature on hover or click with the Control.SelectFeature > on a > vector layer. > </p> > <div id="map" class="smallmap"></div> > <ul id="controlToggle"> > <li> > > <input type="radio" name="type" value="none" id="noneToggle" > onclick="toggleControl(this);" checked="checked" /> > <label for="noneToggle">navigate</label> > </li> > <li> > <input type="radio" name="type" value="point" id="pointToggle" > onclick="toggleControl(this);" /> > <label for="pointToggle">draw point</label> > </li> > <li> > > <input type="radio" name="type" value="line" id="lineToggle" > onclick="toggleControl(this);" /> > <label for="lineToggle">draw line</label> > </li> > <li> > <input type="radio" name="type" value="polygon" > id="polygonToggle" > onclick="toggleControl(this);" /> > <label for="polygonToggle">draw polygon</label> > </li> > <li> > > <input type="radio" name="type" value="selecthover" id="hover" > onclick="toggleControl(this);" /> > <label for="selecthoverToggle">Select features on hover</label> > </li> > <li> > <input type="radio" name="type" value="select" > id="selectToggle" > onclick="toggleControl(this);" /> > <label for="selectToggle">select feature</label> > <ul> > <li> > > <input id="box" type="checkbox" checked="checked" > name="box" onchange="update()" /> > <label for="box">select features in a box</label> > </li> > <li> > <input id="clickout" type="checkbox" > name="clickout" onchange="update()" /> > <label for="clickout">click out to unselect > features</label> > </li> > </ul> > > </li> > </ul> > <p>Use the shift key to select multiple features. Use the ctrl key to > toggle selection on features one at a time. Note: the "clickout" > option has no > effect when "hover" is selected.</p> > </body> > </html> > > > > > > _______________________________________________ > Users mailing list > [email protected] > http://openlayers.org/mailman/listinfo/users _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
