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