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

GEODATA DAYS 2024

#1 Mon 28 April 2008 12:43

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 945
Site web

Problème fonction ST_dumprings

Bonjour,

Je cherche à décomposer un objet à trous (multipolygon) en plusieurs polygon. J'ai cherché pour ce faire à utiliser la fonction ST_DumpRings qui me permet de garder le lien entre l'objet principal et ses inclusions.
J'avais déjà utilisé la fonction ST_Dump qui fonctionnait sans souci.

Mon problème est que j'ai une erreur "Input is not a polygon"
Je comprend bien qu'il me faut en entrée un polygon mais sauf erreur de compréhension de ma part, la fonction me paraissait avoir un intérêt seulement avec un multipolygon vu que pour moi, un objet à trous me paraissait être un multipolygon.

J'ai manqué quelque chose dans l'usage de la fonction, de la norme OGC? La fonction a des ratés ou bien c'est moi?

Merci pour toute aide.

Thomas G

Hors ligne

 

#2 Mon 28 April 2008 14:15

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9859
Site web

Re: Problème fonction ST_dumprings

Bonjour,

Je ne pense pas qu'un objet à trou soit nécessairement un multipolygone, et je ne comprend pas comment décomposer un polygone à trous en plusieurs polygone. Si le trou se trouve au centre d'un polygone, comment sera t il décomposé (conf. pièce jointe) ?

Y.


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

Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Mon 28 April 2008 15:51

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 945
Site web

Re: Problème fonction ST_dumprings

ST_DumpRings(geometry)
This is a set-returning function (SRF). It returns a set of geometry_dump rows, formed by a geometry (geom) and an array of integers (path). The 'path' field holds the polygon ring index, contains a single element: 0 for the shell, hole number for holes. The 'geom' field contains the corresponding ring as a polygon.


Pour moi, la définition ci-dessus dit renvoie dans une colonne un tableau d'entiers qui contient un numéro (0 pour l'objet principal et n° pour les trous liés) et un géométrie.

Par exemple, on aurait dans la colonne résultat

ligne1     {0}{WKB_objet_principal}
ligne2     {1}{WKB_trou1}
ligne3     {2}{WKB_trou2}

C'est illustré par la PJ pour la fonction dump(geometry) Par exemple, on voit que le multipolygon est devenu deux polygon au niveau des lignes 6-7.

Ensuite je comptais extraire la géométrie pour chaque ligne avec l'astuce identique à celle utilisée pour ST_Dump(geometry) signalé en suivant le lien
http://georezo.net/forum/viewtopic.php?pid=98265
Pour moi ST_dumprings devait faire la même chose que ST_Dump(geometry) mais en ayant l'avantage de détecter directement les inclusions.

Je viens de voir que je me trompais :les trous ne sont pas forcément des multipolygon (merci Yves) en revenant sur la doc de Postgis.fr

Mon problème par rapport à la fonction ST_DumpRings(geometry) reste entier, je dois simplifier des multipolygon en polygon il semblerait.

Je voudrais un retour, cette fonction marche chez quelqu'un.

Thomas G


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

Hors ligne

 

#4 Mon 28 April 2008 16:35

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9859
Site web

Re: Problème fonction ST_dumprings

Bonjour,

Les fonctions ExteriorRing(geometry) et InteriorRingN(geometry,integer) peuvent peut être résoudre ton problème.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Tue 06 May 2008 07:35

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

Re: Problème fonction ST_dumprings

Attention, polygone a trou et multipolygone sont des objets différents
pour l'OGC:
un polygone a trou est constitué d'un exterieur (le premier ring) et
d'eventuels trous (les autres rings du polygone).
ces trous ne peuvent se toucher entre eux que par un point, de meme,
ils ne peuvent toucher l'exterieur que par un point au plus.
ces restrictions font que certains objets ne sont pas representables
avec un polygone a trou, mais seulement avec un multipolygone, qui est
une collection de polygones.
Pas de relations entre les polygones qui composent la collection.

Pour extraire les trous d'un polygone et en faire des polygones
indépendants, utiliser la fonction st_dumprings.
pour extraire les polygones d'une collection, utiliser la fonction st_dump.

ou encore, extraire les geometries d'une collection avec
generate_series (postgis uniquement) et appeler st_dumprings sur
chacune d'elles:

SELECT st_dumprings(geom)
FROM (SELECT ST_GeometryN(the_geom,
               generate_series(1, ST_NumGeometries(the_geom)))
             AS geom
      FROM departements_domcom_wgs84
      ) AS foo;

(tirée de l'excellent tuto Tips for the PostGIS Power User
(http://www.foss4g2007.org/presentations … act_id=117)

Nicolas

Hors ligne

 

#6 Mon 07 July 2008 18:44

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 609

Re: Problème fonction ST_dumprings

Bonjour,

Je n'ai pas bien compris comment créer une nouvelle couche polygone à partir d'une couche qui contient des polygones sptatialment disjoints mais qui au final font un seule ligne. En gros comment sur postgis on utilise la fonction de Mapifo dissocier/désagréger. Est-ce cette fonction ST_dumprings? comment l'utiliser exactement?

Create table newcouche as
select ......?
from aciennecouche;

Merci  d'avance

P.


Pascal PLUVINET

Hors ligne

 

#7 Mon 07 July 2008 20:18

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 945
Site web

Re: Problème fonction ST_dumprings

Bonjour,

La fonction est dump(geometry)
Voir p 26 de l'excellent PDF sur Postgis à l'adresse ci-dessous.
http://www.davidgis.fr/documentation/win32/pdf/doc.pdf

Regarde la discussion ci-dessous
http://georezo.net/forum/viewtopic.php?id=53705

Sinon, c'est bien create table as select... from ...

Pense d'abord à lancer le select ... from puis quand ça te parait bon, rajoute le create table devant ainsi qu'un
SET default_with_oids=true; qui permet d'avoir des OID. (je préfère mais bon savoir si c'est la meilleure pratique...)

Thomas G

Hors ligne

 

#8 Mon 07 July 2008 20:51

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 609

Re: Problème fonction ST_dumprings

Merci pour cette réponse si rapide. je suis en train de parcourir le PDF , très bonne doc pour moi qui débute sur POSTGIS. j'essai demain la fonction dump.


Pascal PLUVINET

Hors ligne

 

#9 Fri 08 August 2008 22:16

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

Re: Problème fonction ST_dumprings

Pense d'abord à lancer le select ... from puis quand ça te parait bon, rajoute le create table devant ainsi qu'un
SET default_with_oids=true; qui permet d'avoir des OID. (je préfère mais bon savoir si c'est la meilleure pratique...)


L'option de creation des tables avec une colonne OID par defaut
(identifiant unique caché, associé a chaque relation) a ete supprimée
avec la version PG 8.1.
Il est tjs possible de le faire a la main, mais ce n'est pas recommandé:
le mecanisme des OID est basé sur des types entiers qui ne peuvent
avoir qu'un certains nombre de valeurs. Au dela de ce nombre, les
compteurs sont remis a 0, avec reutilisation des premieres valeurs, ce
qui casse les tables. (certes, il faut atteindre plus de 4 milliards
de records avant que ca n'arrive...)

La pratique recommandée est de tjs creer une cle primaire sur sa
table, par exemple avec un type serial qui autoincrementera tout seul
la valeur de la clé.

Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB