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

Répondre à