<div dir="ltr"><div><div><div><div>Buen dia Lista.<br><br>Necesito guardar un geojson (capa vector de OpenLayers) a PostGIS, via Ajax y PHP<br><br>Estoy trabajando con OpenLayers y GeoExt. <br><br>La carga en el visor desde la Base de Datos se realiza sin problemas.<br>El resultado de la query
(en formato geojson) se carga en un Grid y en una capa (vecLayer). Hasta aquí todo
 bien. <br><br>El problema es cuando agrego una nueva geometria. Dibujo el poligono, cargo los datos 
en el grid y guardo. Los datos del grid se guardan correctamente 
(nuevamente via ajax y php a la BD), pero no consigo agregar los datos 
de la nueva geometria a los enviados desde el grid.<br><br>Acá las partes mas importantes del js.<br><br>//La capa donde voy a cargar el resultado de la consulta, editar y modificar geometrias.<br>var vecLayer = new OpenLayers.Layer.Vector("Vectors");<br><br>map.addLayers([layerMapnik, myBaseLayer, ghyb, vecLayerCirc, vecLayerSecc, vecLayerManz, vecLayer]);<br><br>//El Store para el Grid.<br><br>var mapstore = new GeoExt.data.FeatureStore({<br>        method: 'POST',<br>        baseParams:{envio: "ListarGrid"},<br>        layer: vecLayer, //ACA defino la capa donde voy a visualizar el GeoJSON <br>        strategies: [new OpenLayers.Strategy.Fixed()],        <br>        proxy: new GeoExt.data.ProtocolProxy({<br>            protocol: new OpenLayers.Protocol.HTTP({                    <br>                    url: './php/aca_mi_archivo.php',<br>                    format: new OpenLayers.Format.GeoJSON()<br>                })            <br>            }),<br>        fields: [<br>            {name: primaryKey, type: 'int'},<br>            {name: 'cir', type: 'string'},<br>            ......                <br>            ],<br>        autoLoad: true<br>    });<br><br>var gridPanel2 = new Ext.grid.EditorGridPanel({<br>        title: "Feature Grid",<br>        region: "south",<br>    method: 'POST',<br>    store: mapstore, <br>        width: 900,<br>    height: 250,        <br>    split   :   true,  <br>    collapsed: true, <br>    collapseMode: "mini",<br>    cm: new Ext.grid.ColumnModel({<br>                defaults: {<br>                    sortable: true,<br>                    editor: {xtype: "textfield"} <br>                },<br>                columns: [<br>                        {header: "id", width: 50, dataIndex: "id", hidden : true},<br>                        {header: "cir", width: 50, dataIndex: "cir"},<br>            .........<br><br>var drawControl = new OpenLayers.Control.DrawFeature(vecLayer,<br>            OpenLayers.Handler.Polygon,<br>            {handlerOptions: {multi: true}}<br>        );<br><br>var modifyControl = new OpenLayers.Control.ModifyFeature(vecLayer , {<br>        displayClass: "olControlModifyFeature", title: "Modify Feature"});<br><br>//Agrego los el control para modificar la geometria<br>mapPanel.map.addControl(modifyControl);<br>modifyControl.activate();<br><br></div>En el Botón "save" tengo asignada la función guardarCambios()<br><br> function guardarCambios() {<br>            var gridMask = new Ext.LoadMask(gridPanel2.getEl(),{msg:'Guardando los cambios...'});<br>            gridMask.show();<br>            var records = mapstore.getModifiedRecords();<br>            if(!records.length) {<br>                return;<br>            }<br>            var data = [];                <br><br>            Ext.each(records, function(r, i) {<br>                var o = r.getChanges();                <br><br>                if(r.data.newRecord) { o.newRecord = true; }   <br>                    o[primaryKey] = r.get(primaryKey);<br>                    data.push(o);<br>                    delete r.data.newRecordId;<br>                }, this);<br><br>                // EL CONTENIDO DE LA VARIABLE "O" SE ENVIARA MEDIANTE AJAX          <br>                <br>                var o = {<br>                         url: './php/guardar2.php'<br>                        ,method:'POST'<br>                        ,scope:this<br>                        ,timeout: 100000<br>                        ,params: {<br>                                data: Ext.encode(data)                                <br>                        }<br>                        ,callback: function (options, success, response) {<br>                                gridMask.hide();<br>                                var json = Ext.util.JSON.decode(response.responseText);<br>                                if (json.success) {<br>                                        mapstore.commitChanges();<br>                                }else{  <br>                                        Ext.MessageBox.show({<br>                                                title: 'Error',<br>                                                msg: json.mensaje,<br>                                                buttons: Ext.MessageBox.OK,<br>                                                icon: Ext.MessageBox.ERROR<br>                                        });<br>                                }<br>                        }<br>            };<br>            Ext.Ajax.request(o);<br>        }<br>                    //FIN FUNCION gurdarCambios<br><br><br></div>Espero haber sido claro, perdón por la extensión del mail.<br><br></div><div>Espero puedan orientarme para resolver el salvado a la BD.<br><br></div><div>Saludos<br></div><div>Javier Diaz.<br></div></div></div>