Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 23 June 2016 13:59

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

 

Pied de page des forums

Powered by FluxBB