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

Rencontres QGIS 2025

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

#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 !  big_smile

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: 1160

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: 3199
Site web

Re: [POSTGIS] Lissage de polygone


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


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 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.

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

Hors 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 ?

Hors 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

wink

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

Hors 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 smile

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

 

Pied de page des forums

Powered by FluxBB