#1 Wed 28 April 2010 11:41
- nawak
- Participant assidu
- Date d'inscription: 11 Sep 2007
- Messages: 216
postgis-Exteriorring
Bonjour,
Sous postgis je veux créer une table avec les lignes d'une couche polygone. je passe par la fonction exterieurring(). Mais cette fonction renvoie : geom is not a polygon. En fait en creusant je me suis apperçu que la fonction plante sur certain enregistrements. En observant la geometrie de ces enregistrments je constate que j'ai généralement deux polygones séparés. Y a certainement une notion élémentaire sur la geometrie que je ne connais pas. quelqu'un pourrait-il m'aider ?
Merci
Hors ligne
#2 Wed 28 April 2010 11:50
Re: postgis-Exteriorring
Bonjour,
Est ce que ces polygones qui te font planter la requête sont des multipolygone ?
Tu dois pouvoir faire un filtre avec issimple(the_geom) is true, il y a un moyen aussi de récupérer une géométrie simple à partir d'une géométrie multi, mais avec une perte d'information.
Y.
PS : je déplace sur GeoBD.
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 Wed 28 April 2010 12:16
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: postgis-Exteriorring
avec la fonction st_boundary() au lieu de exterieurring(), ca ne le ferait pas ?
Pascal PLUVINET
Hors ligne
#4 Wed 28 April 2010 14:34
- nawak
- Participant assidu
- Date d'inscription: 11 Sep 2007
- Messages: 216
Re: postgis-Exteriorring
ha ba si ! Merci
Hors ligne
#5 Wed 28 April 2010 14:43
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: postgis-Exteriorring
Bonjour,
Sous postgis je veux créer une table avec les lignes d'une couche polygone. je passe par la fonction exterieurring(). Mais cette fonction renvoie : geom is not a polygon. En fait en creusant je me suis apperçu que la fonction plante sur certain enregistrements. En observant la geometrie de ces enregistrments je constate que j'ai généralement deux polygones séparés. Y a certainement une notion élémentaire sur la geometrie que je ne connais pas. quelqu'un pourrait-il m'aider ?
Merci
Bonjour,
ExteriorRing renvoie une geometrie de type linestring. Il faut utiliser le constructeur st_polygon (http://postgis.org/documentation/manual … lygon.html).
Cette fonction ne marche que pour les polygones, pas pour les multipolygones.
Pour ceux-ci, il faut d'abord exploser le multipg en pg, puis appeler st_exteriorring.
Si la table contient a la fois des multipg et des pg, la fonction st_mutli permet de tout passer en multipolygones.
Ensuite, une fonction avec generate_series permettra d'exploser les multipg en pg puis d'extraire les exteriorrings:
select
st_exteriorRing(st_geometryN(geom,
generate_series(0, st_numgeometries(geom)
)
)
)
from (
select geometryfromtext('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)), ((2 2, 3 2, 3 3, 3 2, 2 2)))', -1) as geom) as foo;
st_boundary marche aussi et est effectivement plus simple : ca va renvoyer une multilinestring.
Nico
Hors ligne
#6 Wed 28 April 2010 16:44
- nawak
- Participant assidu
- Date d'inscription: 11 Sep 2007
- Messages: 216
Re: postgis-Exteriorring
Merci pour cette explication précise Nico!
Hors ligne