#1 Mon 28 April 2008 12:43
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
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.
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 !
En ligne
#3 Mon 28 April 2008 15:51
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
Hors ligne
#4 Mon 28 April 2008 16:35
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 !
En ligne
#5 Tue 06 May 2008 07:35
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
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
En ligne
#6 Mon 07 July 2008 18:44
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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
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: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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: 1554
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
En ligne