ThinkGeo.com    |     Documentation    |     Premium Support

How to edit a feature without clicking on it

 I've followed the How-do-I for adding and editing shapes and it's got me most of the way to where I need to be. My application only has one editable feature at a time, and when the user want to edit the shape I'm trying to avoid the need for them to click on the feature they want to edit.


Said another way, the How-do-I saves the shapes and when the user wants to edit them re-enters edit mode with no shapes selected. The user must then click the shape they want to edit before editing can begin. I'm trying to enter edit mode and directly display the feature edit tools on the map over the only feature I will have. Thanks! 


 


Edit: I guess I'd like to ask something else related here. I can't figure out how to move the adding of the feature from javascript to the controller. In the How-do-I a JSON representation of the feature is send back to a callback and added via Map.getEditOverlay().addFeatures(JSONSTUFF). I've tried adding to the EditOverlay and redrawing the layer in the controller but the feature doesn't show up. I've also tried beginning a transaction with the FeatureSource open an then adding the feature with no luck. It's obvious I'm a little lost as to what's happening under the hood at this point, any direction would surely help!



 


Hi Cory,
Please try the JS code below to make the shape of the map enter “Edit mode” without user click:
 
    function enableEdit() {
        var editLayer = Map1.getLayersByName('EditOverlay')[0];
        var modifyControls = Map1.getControlsByClass("OpenLayers.Control.ModifyFeature");
        var modify;
        if (modifyControls && modifyControls.length > 0) {
            modify = modifyControls[0];
        } else {
            Map1.getMapParser().initDrawControls();
            modify = Map1.getControlsByClass("OpenLayers.Control.ModifyFeature")[0];
        }
 
       if (editLayer.features.length > 0) {
            modify.createVertices = true;
            modify.selectFeature(editLayer.features[0]);
            modify.activate();
        } else {
            modify.deactivate();
        }
    }
 
Sorry that I’m not sure whether I understood the 2nd question clearly, but we should redraw the layer on client side in Ajax Callback function, rather than in the controller. Please have a try and any question please let me know.
 
Thanks,
Johnny

 That function works great, thank you. I was having a hard time finding the function calls I needed to use from the OpenLayers API but this is a big help. Don't worry about the second part to the question, you seemed to have anwsered it by instructing me to do the update on the client side; I wasn't sure if it was possible server side. Thank again.



Hi Cory, 
  
 Glad to hear that your problem’s been solved, if you have any other questions please let us know. 
  
 Regards, 
 Edgar