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

Répondre à