estoy trabajando con datos cartograficos con lo q la salida de mi Json es GeoJson. Defini un grid en el q cargo el resultado de una consulta en PHP, pero claro estoy haciendo una salida a un fichero y quiero hacerlo del modo q no tenga q escribir un fichero e ir a leerlo del disco, ya q los datos vienen de un form y la consulta se modifica a cada rato. Para enviar los datos del form estoy usando AJAX para q no se me recargue la pagina cuando envio la consulta.
Primeramente pongo como defino el grid:
- Código: Seleccionar todo
//Aquí definimos el gridpanel que recogera la información del vecLayer
//se crea el feature store, que se unirá al vecLayer
store = new GeoExt.data.FeatureStore({
layer: vecLayer,
fields: [
{name: 'a_code', type:'string'},
{name: 'shooting_time', type: 'string'},
{name: 'total_discarded_weight', type: 'double'},
],
proxy: new GeoExt.data.ProtocolProxy({
protocol: new OpenLayers.Protocol.HTTP({
url: "data/especie.json",
format: new OpenLayers.Format.GeoJSON(),
})
})
});
sigue el grid:
- Código: Seleccionar todo
gridPanel = new Ext.grid.GridPanel({
title: "Información de Capturas",
region: "south",
border: true,
collapsible: true,
collapsed:true,
collapseMode: "mini",
store: store,
stateful: true,
width:320,
height:400,
boxMinHeight: 450,
autoScroll: true,
split:true,
columns: [{
header: "COD",
width: 35,
sortable: true,
dataIndex: "a_code"
},{
header: "Fecha Lance",
width: 160,
sortable: true,
dataIndex: "shooting_time"
},{
header: "Total Descartes",
width: 100,
sortable: true,
dataIndex: "total_discarded_weight"
}],
stripeRows: true,
sm: new GeoExt.grid.FeatureSelectionModel()
});
La pagina PHP desde donde genero el GeoJson seria la siguiente:
- Código: Seleccionar todo
<?php
/*conexion a la base de datos */
$conexion = pg_connect("host=*** port=*** dbname=*** user=postgres password=***");
if (!$conexion){
echo "<center>La conexión con la base de datos no se ha realizado.</center>";
exit;
}
$date1 = "'".$_POST['date1']."'";
$date2 = "'".$_POST['date2']."'";
$especies_procesar = $_POST['especies'];
$especies_procesar = str_replace("#",",",$especies_procesar);
$query = "select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from \"haul\" natural inner join catch where a_code in (".ltrim($especies_procesar,',').") and shooting_time between ".$date1." and (timestamp ".$date2." + interval '1 days')";
echo $query;
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
?>
<?php
$geojson = array(
'type' => 'FeatureCollection',
'features' => array()
);
$i = 0;
while ($line = pg_fetch_assoc($result)) {
$feature = array(
'geometry' => json_decode($line['geojson'], true),
'properties' => $data[]=$line,
'id' => $i++
);
array_push($geojson['features'], $feature);
}
$especie = json_encode($geojson);
$archivo = fopen(".../data/especie.json", "w");
fwrite($archivo, $especie);
fclose($archivo);
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
pg_free_result($result);
// cerramos la Base de dtos.
pg_close($conexion);
?>
y el codigo AJAX donde envio los datos del formulario para hacer la consulta
- Código: Seleccionar todo
<script type="text/javascript">
function enviarDatos(){
var formulario = document.getElementById("formulario");
var datos = new FormData(formulario);
//xhr(datos);
probadate1=document.getElementById('date1');
proba_date1=probadate1.value;
probadate2=document.getElementById('date2');
proba_date2=probadate2.value;
probachooser=document.getElementById('especies');
// completar la seguiente linea para obtener los values seleccionados en "selector"
var txt='';
var i;
var count = 0;
for (i=0; i<probachooser.options.length; i++) {
if (probachooser.options[i].selected) {
if (count==0)
txt+= "'"+probachooser.options[i].value+"'";
else
txt+= "#'"+probachooser.options[i].value+"'";
}
count++;
}
//hace la comparacion de las dos fechas
compareDates('datechooser','date1','date2');
url_proba='date1='+proba_date1+'&date2='+proba_date2+'&especies='+txt;
xhr(url_proba);
}
var xmlhttp;
function xhr(datos){ //funcion para crear las peticiones de XMLHttpResquest
// Generalmente sacada de páginas que usan un método para IE6 o anteriores,
// IE 7, FF, Opera, Google Chrome, u otros.
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = procesarRespuesta; //Ojo sin parentesis
xmlhttp.open("POST", "consulta2.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", 3);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(datos);
//hace la comparacion de las dos fechas
//compareDates('datechooser','date1','date2');
}
function procesarRespuesta(){
if(xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
//document.getElement.innerHTML = xmlhttp.responseText;
//alert(xmlhttp.responseText);
//recarga el grid al hacer la peticion. de salida esta a false para que no lo muestre.
store.load();
}
}
}
</script>
El asunto seria pasar los datos al grid sin hacer el fichero.
he probado a hacer un echo json_enconde($geojson); y en la url del grid poner la pagina consulta2.php y metod POST, el echo del POST me devuelve la consulta q hago en el form:
select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from "haul" natural inner join catch where a_code in ('14') and shooting_time between '20110905' and (timestamp '20110914' + interval '1 days')
pero el GET me da error, no reconoce los date q le envio por POST:
Notice: Undefined index: date1 in /var/www/html/faros/Geo/consulta2.php on line 8
Notice: Undefined index: date2 in /var/www/html/faros/Geo/consulta2.php on line 9
Notice: Undefined index: especies in /var/www/html/faros/Geo/consulta2.php on line 10
select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from "haul" natural inner join catch where a_code in () and shooting_time between '' and (timestamp '' + interval '1 days')
Warning: pg_query(): Query failed: ERROR: syntax error at or near ")" at character 162 in /var/www/html/faros/Geo/consulta2.php on line 16
Query failed: ERROR: syntax error at or near ")" at character 162
Agradezco la ayuda.

