[Spanish] OpenLayers - salvar nuevo feature en Base de Datos

Javier Diaz javidiaz1977 at gmail.com
Wed Sep 9 12:13:48 PDT 2015


Finalmente la función gurdarCambios quedó así:

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

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



2015-09-08 12:04 GMT-03:00 Javier Diaz <javidiaz1977 en gmail.com>:

> Buen dia Lista.
>
> Necesito guardar un geojson (capa vector de OpenLayers) a PostGIS, via
> Ajax y PHP
>
> Estoy trabajando con OpenLayers y GeoExt.
>
> La carga en el visor desde la Base de Datos se realiza sin problemas.
> El resultado de la query (en formato geojson) se carga en un Grid y en una
> capa (vecLayer). Hasta aquí todo bien.
>
> 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.
>
> Acá las partes mas importantes del js.
>
> //La capa donde voy a cargar el resultado de la consulta, editar y
> modificar geometrias.
> var vecLayer = new OpenLayers.Layer.Vector("Vectors");
>
> map.addLayers([layerMapnik, myBaseLayer, ghyb, vecLayerCirc, vecLayerSecc,
> vecLayerManz, vecLayer]);
>
> //El Store para el Grid.
>
> var mapstore = new GeoExt.data.FeatureStore({
>         method: 'POST',
>         baseParams:{envio: "ListarGrid"},
>         layer: vecLayer, //ACA defino la capa donde voy a visualizar el
> GeoJSON
>         strategies: [new OpenLayers.Strategy.Fixed()],
>         proxy: new GeoExt.data.ProtocolProxy({
>             protocol: new OpenLayers.Protocol.HTTP({
>                     url: './php/aca_mi_archivo.php',
>                     format: new OpenLayers.Format.GeoJSON()
>                 })
>             }),
>         fields: [
>             {name: primaryKey, type: 'int'},
>             {name: 'cir', type: 'string'},
>             ......
>             ],
>         autoLoad: true
>     });
>
> var gridPanel2 = new Ext.grid.EditorGridPanel({
>         title: "Feature Grid",
>         region: "south",
>     method: 'POST',
>     store: mapstore,
>         width: 900,
>     height: 250,
>     split   :   true,
>     collapsed: true,
>     collapseMode: "mini",
>     cm: new Ext.grid.ColumnModel({
>                 defaults: {
>                     sortable: true,
>                     editor: {xtype: "textfield"}
>                 },
>                 columns: [
>                         {header: "id", width: 50, dataIndex: "id", hidden
> : true},
>                         {header: "cir", width: 50, dataIndex: "cir"},
>             .........
>
> var drawControl = new OpenLayers.Control.DrawFeature(vecLayer,
>             OpenLayers.Handler.Polygon,
>             {handlerOptions: {multi: true}}
>         );
>
> var modifyControl = new OpenLayers.Control.ModifyFeature(vecLayer , {
>         displayClass: "olControlModifyFeature", title: "Modify Feature"});
>
> //Agrego los el control para modificar la geometria
> mapPanel.map.addControl(modifyControl);
> modifyControl.activate();
>
> En el Botón "save" tengo asignada la función guardarCambios()
>
>  function guardarCambios() {
>             var gridMask = new
> Ext.LoadMask(gridPanel2.getEl(),{msg:'Guardando los cambios...'});
>             gridMask.show();
>             var records = mapstore.getModifiedRecords();
>             if(!records.length) {
>                 return;
>             }
>             var data = [];
>
>             Ext.each(records, function(r, i) {
>                 var o = r.getChanges();
>
>                 if(r.data.newRecord) { o.newRecord = true; }
>                     o[primaryKey] = r.get(primaryKey);
>                     data.push(o);
>                     delete r.data.newRecordId;
>                 }, this);
>
>                 // EL CONTENIDO DE LA VARIABLE "O" SE ENVIARA MEDIANTE
> AJAX
>
>                 var o = {
>                          url: './php/guardar2.php'
>                         ,method:'POST'
>                         ,scope:this
>                         ,timeout: 100000
>                         ,params: {
>                                 data:
> Ext.encode(data)
>                         }
>                         ,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
>
>
> Espero haber sido claro, perdón por la extensión del mail.
>
> Espero puedan orientarme para resolver el salvado a la BD.
>
> Saludos
> Javier Diaz.
>
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.osgeo.org/pipermail/spanish/attachments/20150909/cb5fcf3c/attachment.html>


More information about the Spanish mailing list