Pages: 1
- Sujet précédent - [Spatialite] découpage de polygones se chevauchant sur N couches - Sujet suivant
#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: 1554
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 ?
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)
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
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: 1554
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
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: 1554
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)
Hors ligne
Pages: 1
- Sujet précédent - [Spatialite] découpage de polygones se chevauchant sur N couches - Sujet suivant