<div dir="ltr">Finalmente la función gurdarCambios quedó así:<br><br><pre>function guardarCambios() {
            var gridMask = new Ext.LoadMask(gridPanel2.getEl(),{msg:'Guardando los cambios...'});
            gridMask.show();
            var records = mapstore.getModifiedRecords();
            if(!records.length) {
                return;
            }
            var dataToSend = [];
            
            Ext.each(records, function(r, i) {
                var o = r.getChanges();         
                console.log(r.data.feature);
                
                
                if(r.data.newRecord) {
                    o.newRecord = true;
                }  
                
                    o[primaryKey] = r.get(primaryKey);
                    g = new OpenLayers.Format.GeoJSON();
                    g_send = g.write(r.data.feature);

                    dataToSend.push(o);
                    dataToSend.push(g_send);    
                    console.log(g_send);
                    <br>delete r.data.newRecordId;
                }, this);

                // EL CONTENIDO DE LA VARIABLE "O" SE ENVIARA MEDIANTE AJAX
                //console.log(records);
                                
                //var g = new OpenLayers.Format.GeoJSON();
                //console.log(g);
                //var geoJSONText = g.write(vecLayer.features);
                //console.log(geoJSONText);
                
                dataToSend = Ext.encode(dataToSend); // step 4
                
                var o = {
                         url: './php/guardar2.php'
                        ,method:'POST'
                        ,scope:this
                        ,timeout: 100000
                        ,params: {data: dataToSend                                
                                //data: Ext.encode(data)
                                //geom: Ext.encode(data.feature.geometry)
                        }
                        ,callback: function (options, success, response) {
                                gridMask.hide();
                                var json = Ext.util.JSON.decode(response.responseText);
                                if (json.success) {
                                        mapstore.commitChanges();
                                }else{  
                                        Ext.MessageBox.show({
                                                title: 'Error',
                                                msg: json.mensaje,
                                                buttons: Ext.MessageBox.OK,
                                                icon: Ext.MessageBox.ERROR
                                        });
                                }
                        }
            };
            Ext.Ajax.request(o);
        }
                    //FIN FUNCION gurdarCambios</pre><br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-09-08 12:04 GMT-03:00 Javier Diaz <span dir="ltr"><<a href="mailto:javidiaz1977@gmail.com" target="_blank">javidiaz1977@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div>Javier Diaz.<br></div></font></span></div></div>
</blockquote></div><br></div>