#1 Tue 29 July 2014 15:39
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
[POSTGIS] Lissage de polygone
Bonjour à tous !
1er message sur ce forum qui a réussi à me dépatouiller de plusieurs blocages !
Etant débutant en PostGIS, je bloque sur une opération qui me semble pourtant réalisable sans trop de difficultés. Voici mon problème :
Je dispose d'un polygone (n'ayant pas beaucoup de sommet, moins de 20 d'une manière générale). Ce que j'essaye de faire est de "lisser" ce polygone.
Un dessin étant plus parlant, vous trouverez mon objectif en PJ (désolé pour le rendu, j'ai fait ça rapidement sous Paint).
Ainsi, mon polygone A est stocké en base, et je souhaiterai obtenir un polygone (ou une autre géométrie) correspondant au dessin B (en rouge sur l'image). L'idéal serait par la suite de pouvoir paramétrer une marge de fidélité par rapport au polygone de départ, mais ce n'est pas indispensable dans un premier temps
J'ai fouillé dans la doc de PostGIS, sur plusieurs forum, mais je n'ai pas trouvé de manière simple de parvenir à ce résultat.
Si quelqu'un a des pistes, ou encore mieux une fonction qui ferait ça directement, ça m'enlèverait une sacré épine du polygone !
Merci d'avance.
[img]http://img11.hostingpics.net/pics/882803ObjFct.jpg[/img]
Dernière modification par mugenito (Tue 29 July 2014 15:40)
Hors ligne
#2 Tue 29 July 2014 15:49
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [POSTGIS] Lissage de polygone
Salut,
ST_Simplify ne convient pas ?
http://postgis.net/docs/manual-2.1/ST_Simplify.html
Hors ligne
#3 Tue 29 July 2014 15:55
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: [POSTGIS] Lissage de polygone
Salut,
ST_Simplify ne convient pas ?
http://postgis.net/docs/manual-2.1/ST_Simplify.html
Je n'ai pas réussi à obtenir quelque chose de correct avec ST_Simplify, j'ai plutôt l'impression qu'il enlève des points à mon polygone de base. L'idée que j'ai est de vraiment "casser" les angles de mon polygone.
J'ai lu des choses sur des 'Spline Interpolation', des interpolations de Bezeirs, de Hermite, etc, mais je n'arrive pas vraiment à les mettre en oeuvre...
Dernière modification par mugenito (Tue 29 July 2014 17:47)
Hors ligne
#4 Wed 30 July 2014 08:36
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: [POSTGIS] Lissage de polygone
Bonjour,
Non testé :
http://www.postgis.org/docs/ST_LineToCurve.html
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Wed 30 July 2014 09:33
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: [POSTGIS] Lissage de polygone
Bonjour,
Non testé :
http://www.postgis.org/docs/ST_LineToCurve.html
J'ai fait le test, mais le résultat n'est pas ce que j'attends :
[img]http://img4.hostingpics.net/pics/404484Sanstitre.jpg[/img]
Hors ligne
#6 Wed 30 July 2014 11:44
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] Lissage de polygone
Bonjour,
Pas facile je pense comme probleme, surtout si les polygones peuvent etre trés découpés.
S'ils sont assez simples, un trick avec des buffers pourrait le faire :
Fabriquer des buffers négatifs (pour arrondir les angles optus) et positifs (pour les angles aigus):
(La table testpg contient un polygone dessiné sur ton polygone exemple plus un autre dessiné a la main):
Code:
select st_buffer(st_buffer(st_buffer(geom, 10), -20), 10) from testpg2;
La taille du buffer est empirique mais devrait pouvoir etre choisie en fonction de la taille moyenne du pg, peut etre.
Plus les angles sont marqués, plus les arrondis seront forts.
En vert: les pg originaux, en rouge, les nouveaux pg
[img]http://img4.hostingpics.net/pics/483046ScreenShot20140730at114318.png[/img]
Deuxième image avec une taille de buffer de 15 au lieu de 10.
[img]http://img4.hostingpics.net/pics/789197ScreenShot20140730at114331.png[/img]
Nicolas
En ligne
#7 Wed 30 July 2014 11:56
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: [POSTGIS] Lissage de polygone
Bonjour,
Pas facile je pense comme probleme, surtout si les polygones peuvent etre trés découpés.
S'ils sont assez simples, un trick avec des buffers pourrait le faire wink :
Fabriquer des buffers négatifs (pour arrondir les angles optus) et positifs (pour les angles aigus):
(La table testpg contient un polygone dessiné sur ton polygone exemple plus un autre dessiné a la main):
Code:
select st_buffer(st_buffer(st_buffer(geom, 10), -20), 10)
from testpg2;
La taille du buffer est empirique mais devrait pouvoir etre choisie en fonction de la taille moyenne du pg, peut etre.
Plus les angles sont marqués, plus les arrondis seront forts.
Bonjour,
J'avais fait le test avec seulement deux buffers :
Code:
ST_Buffer (ST_Buffer (geom, 50), -50)
Mais le résultat n'était pas probant. Peut-être qu'avec 3 buffers, j'arriverais à quelque chose de mieux. Je vais faire quelques tests.
Hors ligne
#8 Wed 30 July 2014 11:57
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] Lissage de polygone
Oui, il en faut 3: deux, les angles arrondis redeviennent aigus avec le buffer négatif.
La couche de polygone est dispo qqpart ?
En ligne
#9 Wed 30 July 2014 12:18
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: [POSTGIS] Lissage de polygone
Ça a l'air de pouvoir faire le job ! Et moi qui était en train de me lancer dans une interpolation de Bezier...
La couche de polygone est dispo qqpart ?
En fait, ce sont des polygones saisis par l'utilisateur sur une application, donc toutes les formes et toutes les tailles peuvent être imaginables (en général l'aire est à l'échelle d'un pays ou d'une région). Ton deuxième polygone (le plus grand) est quasiment un cas typique rencontré dans mon contexte.
Hors ligne
#10 Wed 30 July 2014 12:31
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] Lissage de polygone
Il peut y avoir un contrôle de validité de cette opération de smoothing: si le polygone résultant devient un multiPG, ca veut surement dire que le buffer négatif a généré des sous-parties. Retenter les buffers avec une distance plus petite.
Nico
En ligne
#11 Wed 30 July 2014 14:05
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: [POSTGIS] Lissage de polygone
Merci pour cette information
Par ailleurs, selon la distance du Buffer, ma requête me retourne parfois un polygone 'EMPTY'. Je dois donc également effectuer un contrôle sur ce cas particulier, et adapter la distance jusqu'à avoir un polygone correct.
Hors ligne