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

Javier Diaz javidiaz1977 at gmail.com
Tue Sep 8 08:04:22 PDT 2015


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/20150908/54249888/attachment-0001.html>


More information about the Spanish mailing list