[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