Bof, j'ai toujours pas compris pourquoi celà ne fonctionne pas, vu que la géometrie des relations des sous-requête est déjà calculée.

Mais j'ai cela qui fonctionne quand même:

        UPDATE relations
        SET geom=(
            SELECT st_convexHull(st_collect((the_geom)))
            FROM
            (
                SELECT ways.linestring as the_geom from ways
                    WHERE ways.id in (
                            SELECT member_id FROM relation_members
   WHERE relation_id = relations.id
                            )
                    OR ways.id in (
                            SELECT member_id FROM relation_members
   WHERE relation_id in
                            (SELECT member_id FROM relation_members
   WHERE relation_id = relations.id)
                        )
            ) as foo
            )
        WHERE tags->'site' = 'piste'; --all relations at import

Par contre, Frédéric, si tu peut me traduire cela avec jointures, je suis à peu près certain d'apprendre quelque chose. Parce qu'effectivement, j'ai la sensation que ces sous-requêtes à 3 niveaux, c'est n'importe quoi !

Yves, pas franchement SQL de formation

On 02/20/2014 10:04 PM, Frédéric Rodrigo wrote:
Je ne suis pas sûr sans tester. Mais tu cherches a avoir un résultat de requête récursive sans écrire un requête récursive.

Selon ta méthode pour avoir l'aide d'une relation tu as besoin de l'aire des sous relations, mais il fait d'abord les avoir calculé.

Essaye aussi d'écrire tes requêtes avec des jointures plutôt des sous, sous requêtes imbriquées.

Frédéric.


Le 20/02/2014 21:35, yvecai a écrit :
Salut,

Il y a quelque chose qui m'échappe. J'ai un peu modifié le schéma
pgsnapshot livré avec Osmosis pour gérer des géométries au niveau des
relations (ST_linemerge pour les type=routes, st_convexhull pour les
type=sites).
Maintenant, j'ai une fonction pour mettre à jour ces géométries, du genre:

         UPDATE relations
         SET geom=(
             SELECT st_convexHull(st_collect(the_geom))
             FROM
             (
                 SELECT relations.geom as the_geom from relations
                     WHERE relations.id in (
                             SELECT member_id FROM relation_members
    WHERE relation_id = relations.id
                             )
                 UNION
                 SELECT ways.linestring as the_geom from ways
                     WHERE ways.id in (
                             SELECT member_id FROM relation_members
    WHERE relation_id = relations.id
                             )
             ) as foo
             )
         WHERE tags->'site' = 'piste'; --all relations at import


Qui permet de faire un polygone sur l'emprise d'une relation 'site'
prenant en compte les géométrie de ses membres (ways + relations routes).
Après avoir fait tourné,voici mon polygone:

    select st_area(geom)*1000 from relations where id=2764548;
    --~ ?column?
    --~ -------------------
      --~ 0.351100713594952
    --~ (1 row)


Mais c'est la surface des ways, pas celle des ways + des routes:
Surface des ways :

    SELECT ST_Area(ST_ConvexHull(st_collect(ways.linestring)))*1000 FROM
    ways
    WHERE ways.id in (
             SELECT member_id FROM relation_members WHERE relation_id =
    2764548
             );
    --~ ?column?
    --~ -------------------
      --~ 0.351100713594952
    --~ (1 row)


Surfaces des way + des routes :

    SELECT st_area(st_convexHull(st_collect(the_geom)))*1000
    FROM
    (
         SELECT ways.linestring as the_geom from ways
             WHERE ways.id in (
                     SELECT member_id FROM relation_members WHERE
    relation_id = 2764548
                     )
         UNION
         SELECT relations.geom as the_geom from relations
             WHERE relations.id in (
                     SELECT member_id FROM relation_members WHERE
    relation_id = 2764548
                     )
    ) as foo;

      --~ ?column?
    --~ ------------------
      --~ 4.32829936752993

Je ne comprend pas pourquoi mon UPDATE ne prend pas en compte la
géométrie des relations ????



_______________________________________________
dev-fr mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/dev-fr



_______________________________________________
dev-fr mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/dev-fr


_______________________________________________
dev-fr mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/dev-fr

Répondre à