
10/12/2020, 06:46
|
| | Fecha de Ingreso: mayo-2011 Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 13 años, 11 meses Puntos: 0 | |
Agrupación de resultados por id en fichero JSON (GeoJSON) Estoy experimentando con los Clusters a partir de un fichero GeoJSON generado a partir de una consulta postgresql. Hago la consulta y escribo el fichero. Según como lo hago, cada una de los observaciones que están en la bbdd, en el Cluster genera un punto, pero hay observaciones que comparten id_observation, pq tienen más de una imagen, por ejemplo. Mi duda es como generar el GeoJSON para que salgan agrupadas las observaciones en función del id_observation, y una observación que tenga 2 imagenes, por ejemplo, no salga como dos puntos, si no como uno solo. La query y el fichero lo genero de este modo:
Código:
$query = "Select a_code, name, id_observation, long_4326, lat_4326, obs_date, id_observation_font,
id_image_observation, main_co, author, image, ST_AsGeoJSON(geom, 7) AS geojson FROM observations WHERE id_observation_font != 3 ORDER BY id_observation";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
$geojson = array(
'type' => 'FeatureCollection',
'features' => array()
);
$i = 0;
while ($line = pg_fetch_assoc($result)) {
$feature = array(
'type' => 'Feature',
'id' => $i++,
'properties' => $data[]=$line,
'geometry' => json_decode($line['geojson'], true),
);
array_push($geojson['features'], $feature);
}
$localiza = json_encode($geojson, JSON_UNESCAPED_UNICODE);
$conta = "../data/observations.json";
El JSON (GeoJSON) que obtengo sale de este modo:
Código:
{
"type":"Feature",
"id":22,
"properties":{
"a_code":"151",
"name":"one Name",
"id_observation":"51",
"long_4326":"-x.xxx",
"lat_4326":"xx.xxx",
"obs_date":"2015-03-17",
"id_observation_font":"1",
"id_image_observation":"30",
"main_co":"f",
"author":"John",
"image":"data/IMG1.JPG",
"geojson":"{\"type\":\"Point\",\"coordinates\":[-x.x,xx.xx]}"},
"geometry":{
"type":"Point",
"coordinates":[-x.x,xx.xx]}
},
{
"type":"Feature",
"id":23,
"properties":{
"a_code":"151",
"name":"one Name",
"id_observation":"51",
"long_4326":"-x.xxx",
"lat_4326":"xx.xxx",
"obs_date":"2015-03-17",
"id_observation_font":"1",
"id_image_observation":"29",
"main_co":"f",
"author":"John",
"image":"data/IMG2.JPG",
"geojson":"{\"type\":\"Point\",\"coordinates\":[-x.x,xx.xx]}"},
"geometry":{
"type":"Point",
"coordinates":[-x.x,xx.xx]}
},
{
"type":"Feature",
"id":24,
"properties":{
"a_code":"715",
"name":"other name",
"id_observation":"52",
"long_4326":"-x.xxx",
"lat_4326":"xx.xxx",
"obs_date":"2015-06-01",
"id_observation_font":"1",
"id_image_observation":"31",
"main_co":"t",
"author":"Phill",
"image":"data/IMG32.JPG",
"geojson":"{\"type\":\"Point\",\"coordinates\":[-x.x,xx.xx]}"},
"geometry":{
"type":"Point","coordinates":[-x.x,xx.xx]}
}
Como veis, la observación 51 tiene varias imágenes, pero no lo obtengo agrupado. No se si con un FOREACH... |