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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 27 March 2019 12:04

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Bonjour,

Version PG : 2.6
Version Postgis : 2.4.4

Je dispose d'une couche départementale des bâtiments BDPARCELLAIRE® que je groupe à la parcelle via un

Code:

st_multi(st_collectionextract(st_collect(geom),3))

Je ne veux pas utiliser un st_union() parce que je veux conserver ma géométrie de base, et st_union() fusionne les bâtiments contiguës, ce que je ne veux pas.

Le problème est que la couche résultante (après avoir lancé le st_collect()) est bourrée d'erreurs lorsque je lance la commande suivante :

Code:

SELECT *, st_isvaliddetail(geom) FROM bati_collect WHERE st_isvalid(geom)=FALSE;

(f,"Duplicate Rings",0101000000A4703D0A70682D41C3F5282C55945941)
(f,Self-intersection,01010000001F85EBD12DC52D4185EB51C80B9F5941)
(f,Self-intersection,0101000000D7A370BD494F2E410AD7A340849E5941)

etc..... (presque 100000 erreurs en tout!!!)

Le problème est que, lorsque je souhaite exporter cette couche bati_collect en ligne de commande, que ce soit ogr2ogr ou pgsql2shp, les bâtiments qui présentent un trou (évidés) sont comblés (j'obtiens le même résultat lorsque je lance un v.clean(GRASS) de ma couche bati_collect).
Si je ne lance pas le st_collect(), ces trous ne sont pas comblés après export, c'est pour cela que je soupçonne cette fonction.

Si je lance un st_makevalid(st_collect(geom)), mes bâtiments contiguës sont fusionnés, ce que je ne veux pas, je le répète.

Existe-t-il une autre fonction que st_collect() pour regrouper mes bâtiments à la parcelle sans les fusionner ou une fonction complémentaire qui permettrait de corriger ces erreurs comme il faut (=comme je veux) ?

Je précise que je souhaite au final une couche avec une ligne par groupe de bâtiments (regroupés à la parcelle) => dans QGIS, lorsque je sélectionne un bâtiment A, je veux que tous les bâtiments qui appartiennent à la même parcelle que A soient également sélectionnés et qu'à chaque groupe de bâtiments ne corresponde qu'une seule ligne dans la table attributaire.

En vous remerciant par avance pour votre aide.

Bien cordialement,

Lucie D.

Dernière modification par Lucie D. (Wed 27 March 2019 12:04)

Hors ligne

 

#2 Wed 27 March 2019 12:36

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Salut,

Les seules erreurs sont celles ci ?

Duplicate Ring :
   Sans doute des bâtiments en double.
   Il faudrait filtrer au préalable les bâtiments pour éliminer les doublons.

Self-Intersection ->
   Ce genre d'erreur doit arriver sur des regroupement de bâtiments contigus.
   Si la couche bâtiment d'origine n'est pas topologique, ce que je pense,
   Alors après votre regroupement, vous allez vous retrouvez avec des multi-polygones
   dont les différents polygones composant risque de se (micro)intersecter entre eux,
   ce qui n'est pas considéré comme valide.

Par contre c'est étonnant que makevalid supprime les anneaux intérieurs.

Hors ligne

 

#3 Wed 27 March 2019 14:09

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Bonjour et merci pour votre réponse.

Oui ce sont les seules erreurs.

Je n'ai aucun bâtiment en double (ni au niveau des identifiants, ni au niveau des géométries, car j'ai fait tout un travail de suppression des doublons en amont avec parfois des choix à faire lorsque par exemple j'avais des doublons de géométries avec un type "construction légère" et un autre type "bâtiment en dur" => j'ai privilégié les bâtiments en dur)!

Le st_makevalid() ne me supprime pas les anneaux mais par contre il fusionne les bâtiments contiguës.

En revanche , ogr2ogr, pgsql2shp et l'outil de correction des erreurs géométriques de grass "v.clean" (break) comblent ces anneaux...

Dernière modification par Lucie D. (Wed 27 March 2019 14:10)

Hors ligne

 

#4 Wed 27 March 2019 14:52

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Je n'ai aucun bâtiment en double (ni au niveau des identifiants, ni au niveau des géométries, car j'ai fait tout un travail de suppression des doublons en amont avec parfois des choix à faire lorsque par exemple j'avais des doublons de géométries avec un type "construction légère" et un autre type "bâtiment en dur" => j'ai privilégié les bâtiments en dur)!


J'ai du mal à voir d'autres cas de figure, sauf celui ou la donnée originale posséderait elle même un anneau en double.
Vous devriez vérifier en regardant un cas particulier.

Le st_makevalid() ne me supprime pas les anneaux mais par contre il fusionne les bâtiments contiguës.

En revanche , ogr2ogr, pgsql2shp et l'outil de correction des erreurs géométriques de grass "v.clean" (break) comblent ces anneaux...


Autant pour moi, désolé. Donc v.clean marche, mais comble les anneaux c'est çà ?

Hors ligne

 

#5 Wed 27 March 2019 15:17

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

C'est bien cela.

Ce qui est étrange, c'est que j'ai fait le travail sur une parcelle isolée et voici le résultat en pièces jointes:

Extraction des bâtiments d'une parcelle test depuis ma couche du bâtiment postgresql après st_collect (postgresql.png)

Voir rendu après export en ligne de commandes via pgsql2shp de cet extrait (st_collect_pgsql2shp.png)

Alors que si je fais exactement le même travail sur l'ensemble de ma couche cette fois-ci, l'anneau du bâtiment triangulaire est comblé (voir st_collect_pgsql2shp_all.png).

Donc, a priori (je n'ai fait le test que sur une seule parcelle où les bâtiments me posaient problème) : l'export de l'ensemble des bâtiments de ma couche comble les anneaux, mais quand j'exporte seulement un extrait de ma couche, l'anneau n'est pas comblé...étrange...

J'ai simplement créé une nouvelle couche dans PotsgreSQL :

Code:

SELECT *
FROM bati_collect
WHERE idtup LIKE 'xxxxx'

où xxxxx correspond à une parcelle où mes bâtiments ont des anneaux

et l'ai exportée via pgsql2shp.

Très étrange...

Hors ligne

 

#6 Wed 27 March 2019 15:17

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Alors il faut que j'arrive à joindre mes images....

Dernière modification par Lucie D. (Wed 27 March 2019 15:19)

Hors ligne

 

#7 Wed 27 March 2019 15:20

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

postgresql.png

Hors ligne

 

#8 Wed 27 March 2019 15:46

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Désolée je ne parviens pas à insérer des images (georezo me renvoie une erreur) ce n'est pourtant pas la première fois que je souhaite intégrer une pièce jointe...j'espère que vous avez compris le principe...

Dernière modification par Lucie D. (Wed 27 March 2019 15:46)

Hors ligne

 

#9 Mon 01 April 2019 09:46

Lucie D.
Participant actif
Date d'inscription: 21 Oct 2013
Messages: 137

Re: PostgreSQL 9.6 - Erreurs de géométries après un st_collect

Bonjour,

Je vais reformuler ma question pour que ce soit plus simple : :-P

Comment fonctionne exactement le st_collect() et doit-on le coupler avec une autre fonction pour qu'il ne génère pas d'erreurs de géométries?

Existe-t-il une autre façon de faire sur PostGIS pour regrouper des objets sans les fusionner?

Merci beaucoup! :-)

Lucie D.

Hors ligne

 

Pied de page des forums

Powered by FluxBB