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

yvecai yvecai at gmail.com
Ven 21 Fév 16:28:02 UTC 2014


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
>> dev-fr at openstreetmap.org
>> https://lists.openstreetmap.org/listinfo/dev-fr
>>
>
>
> _______________________________________________
> dev-fr mailing list
> dev-fr at openstreetmap.org
> https://lists.openstreetmap.org/listinfo/dev-fr
>

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


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