[OSM-dev-fr] Probléme Postgis pgsnapshot

yvecai yvecai at gmail.com
Jeu 20 Fév 20:35:54 UTC 2014


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 ????

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/dev-fr/attachments/20140220/eb04663b/attachment.html>


Plus d'informations sur la liste de diffusion dev-fr