Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/12/2020, 06:46
emeotero
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 13 años
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...