[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