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 17 April 2014 11:34

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

[Spatialite] découpage de polygones se chevauchant sur N couches

Bonjour,

J'ai beau me torturer le cerveau, je n'arrive pas à trouver de solution.

Je dispose de quelques dizaines de couches avec des polygones avec un attribut entier "Note". Ces polygones peuvent se chevaucher au sein d'une couche, ainsi qu'entre couches.

Je souhaite produire une couche résultant du découpage de tous les objets de toutes ces couches, et affecter la "Note" maximale des objets superposés à chacun d'entre eux.
Spatialite ne disposant pas d'une fonction de 'clipping', j'ai bien essayé avec intersection mais je perd évidemment tous les objets n'étant pas superposés à un autre.

Y a-t-il une solution à votre avis ?

Hors ligne

 

#2 Thu 17 April 2014 12:35

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

Bonjour,

Oui, il y a surement une solution.

Je ne comprends pas bien ce que vous voulez obtenir au final: quelle la couche de clipping ?
Ou vous voulez intersecter toutes les couches entre elles ?

Si vous voulez obtenir tous les polygones composés par la superposition de toutes les couches, les fonction buildArea et Polygonize peuvent vous aider: il faut alors construire l'ensemble des lignes composants les polygons de toutes les couches et fabriquer tous les polygones possibles avec ces lignes avec l'une des deux méthodes (polygonize, plus probablement dans votre cas)

Ensuite, par reconstruction spatiale, vous pouvez retrouver les polygones originaux et attribuer les notes.

(des dizaines de couches: ca commence a faire une belle combinatoire: il y a bcp d'objets dans les couches ?)

Vous auriez un petit schéma avant-après ? wink

Nicolas

Hors ligne

 

#3 Thu 17 April 2014 13:16

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

C'est vrai que mon explication n'est pas très claire...

Voici un schéma joint.

Je pars donc, pour simplifier, de 2 couches (rouge et verte) avec des objets qui se superposent au sein d'une même couche (rouge) et entre 2 couches.
Je souhaite découper tous les objets entre eux et obtenir le résultat dans une nouvelle couche (bleue)

De plus, les 2 couches de départ ont la même structure avec un attribut de type entier "Note". Je souhaite aussi pour chaque objet de la couche bleue obtenir la "Note" maximale des objets se superposant.

Merci d'avance.

Dernière modification par Lsam (Thu 17 April 2014 13:19)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#4 Thu 17 April 2014 13:47

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

Nicolas Ribot a écrit:

il faut alors construire l'ensemble des lignes composants les polygons de toutes les couches et fabriquer tous les polygones possibles avec ces lignes avec l'une des deux méthodes (polygonize, plus probablement dans votre cas)


Merci Nicolas,

Je n'avais pas pensé à cette solution. Je regarde, merci !

Hors ligne

 

#5 Thu 17 April 2014 13:59

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

Oui dans ce cas, polygonize peut convenir: tout dépend s'il y a des trous dans les polygones initiaux et ce qu'il faut faire de ces trous.

Nicolas

Hors ligne

 

#6 Thu 17 April 2014 15:21

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

Nicolas Ribot a écrit:

Oui dans ce cas, polygonize peut convenir: tout dépend s'il y a des trous dans les polygones initiaux et ce qu'il faut faire de ces trous.


Effectivement j'en plein de trous au départ (on peut le voir sur les tampons "larges" de mon schéma, ils ne recouvrent pas les "petits" tampons".
Polygonize ne les a pas recréés, du fait je pense qu'il n'y a qu'une seule ligne ?

De plus, une fois tout transformé en lignes, je n'arrive pas à découper les lignes qui s'entrecroisent en fragments pour les "polygoniser" correctement. En effet je ne retrouve que mes polygones de départs (sauf mes trous).

Hors ligne

 

#7 Thu 17 April 2014 17:38

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [Spatialite] découpage de polygones se chevauchant sur N couches

Oui pardon: j'ai oublié une étape dans ma description...

st_polygonize reconstruit les polygones élémentaires qu'il peut si le réseau de ligne est connecté ("nodé"), ce qui n'est pas le cas par défaut avec les lignes extraites des polygones.

Avec Postgis, facile, il existe st_node pour cela: extraire les frontières des polygones en lignes simples, les regrouper dans une collection, noder les lignes de la collection et passer ces lignes à st_polygonize:

pg1, pg2 et pg2 sont 3 tables de polygones de test (cf. images jointes):

Code:

with bnd as (
    select (st_dump(st_boundary(geom))).geom as geom from pg1 UNION ALL
    select (st_dump(st_boundary(geom))).geom as geom from pg2 UNION ALL
    select (st_dump(st_boundary(geom))).geom as geom from pg3
), col as (
    select st_collect(geom) as geom from bnd
) select st_polygonize(st_node(geom)) as geom 
    from col;

Ensuite identifier les trous à supprimer: le plus simple est d'avoir une couche de tous les pg des tables et de supprimer tous les polygones de la requete précédentes sils sont contenus dans un trou et n'intersectent pas d'autres polygones.

Avec Spatialite, qui ne possède pas la fonction st_node (enfin, j'ai regardé rapidement), ca doit etre possible de noder les lignes avec la fonction st_union, qui a cette propriété lorsqu'elle travaille sur des lignes.

La difficulté supplémentaire vient du fait que Spatialite ne permet pas, en SQL, "d'exploser" un multiobjet en objets simples (st_dump dans postgis), or ca serait bien pratique dans ce cas. De ce que j'ai lu sur la mailing list, il faut faire ces dump dans l'interface graphique ou en ligne de commande spatialite ( https://groups.google.com/forum/#!msg/s … CRb-mibcJ)

Je connais moins spatialite, mais ca se teste...

Nicolas

Dernière modification par Nicolas Ribot (Thu 17 April 2014 17:48)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB