<div dir="ltr"><pre>console.log(g_send);</pre><div>Firebug me da este resultado:<br><br><span class="">{"type":"Feature","properties":{"id":0,"cir":"I","sec":"","tipo":"","manz":"","parc":"","nomenclatu":""},"geometry":{"type":"MultiPolygon","coordinates":[[[[-6500498.2250645,-4119511.3479142],[-6500485.3860324,-4119499.4046285],[-6500477.9214789,-4119503.2861964],[-6500484.1917039,-4119513.4379892],[-6500498.2250645,-4119511.3479142]]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}<br><br></span></div><div><span class="">En otro hilo seguramente voy a molestarlos sobre como manipular el resultado para guardarlo en mi tabla postgis.<br><br></span></div><div><span class="">Gracias<br></span></div><div><span class="">Javier<br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 9 de septiembre de 2015, 16:13, Javier Diaz <span dir="ltr"><<a href="mailto:javidiaz1977@gmail.com" target="_blank">javidiaz1977@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Finalmente la función gurdarCambios quedó así:<br><br><pre><span class="">function guardarCambios() {
var gridMask = new Ext.LoadMask(gridPanel2.getEl(</span>),{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);
<br>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</pre><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2015-09-08 12:04 GMT-03:00 Javier Diaz <span dir="ltr"><<a href="mailto:javidiaz1977@gmail.com" target="_blank">javidiaz1977@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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<span><font color="#888888"><br></font></span></div><span><font color="#888888"><div>Javier Diaz.<br></div></font></span></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>