<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>