#1 Thu 23 June 2016 13:59
géométrie contenue dans geometrycollection
Bonjour,
Je souhaite savoir si une géométrie est contenue dans une collection de géométries, ceci afin de faire des jointures entre la table d'origine et celle agrégée
Pour cela, j'ai pensé que les geometrycollection étant similaires à des tableaux, il était possible d'utiliser les opérateurs d'inclusion tels que
Code:
where b.coll_geom @> a.geom
Mais en fait non
Je n'ai eu d'autre choix que de faire un st_dump de ma geometrycollection puis de comparer les géométries entre la table geometrycollection dumpée et la table d'origine.
N'y a-t-il pas une fonction ou une manip' rapide permettant de savoir si une géométrie est contenue dans une geometrycollection ?
Merci !
geodata au cerema et petits billets en géomatique
Hors ligne
#2 Tue 28 June 2016 10:32
Re: géométrie contenue dans geometrycollection
Bonjour,
Je vous donne un retour au sujet de ma manip' :
En fait, le souci que j'avais est qu'on ne peut pas comparer une entité à un tableau contenant des entités.
En gros, geom1 ne peut être comparé à array[geom1, geom2,..., geomN]
Voici le code SQL qui permet, dans mon cas, de récupérer les identifiants de groupes/composants auxquels appartiennent chacune des lignes de ma couche. Il a fallu que j'utilise st_accum après avoir dumpé mes géométries
Code:
with r as ( select id, geom geom from roads ), t as ( select st_accum(geom) geom, groupe from ( select (st_dump(geom)).geom geom, groupe from ( select geom, row_number() over() as groupe from( select unnest(st_clusterintersecting(geom)) geom from roads) a ) b ) c group by groupe) select r.id, t.groupe from r, t where array[r.geom] <@ t.geom
geodata au cerema et petits billets en géomatique
Hors ligne