Foros del Web » Programando para Internet » PHP »

Agrupación de resultados por id en fichero JSON (GeoJSON)

Estas en el tema de Agrupación de resultados por id en fichero JSON (GeoJSON) en el foro de PHP en Foros del Web. 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. ...
  #1 (permalink)  
Antiguo 10/12/2020, 06:46
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 13 años, 6 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...

Etiquetas: json, postgres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:37.