[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