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
[email protected]
https://lists.openstreetmap.org/listinfo/dev-fr
_______________________________________________
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