Hi Birgit! In the end I made it programaticaly, using a gvsig class: GeometryUtilities.closeLine().
If there was a siple solution aplying only one or two operations, it would be reasonable using postgis. But in my case the geometry was in memory as a multilinestring, and wanted to store it as a multipolygon, and this solution is more elegant and easy, always in my case. Anyway I'll keep your code for further needs, and thank you for your attention. Regards, Javier 2011/3/30 Birgit Laggner <[email protected]> > Hi Javier, > > you could add the missing end point (and then try again with ST_BuildArea() > etc.). Here a more or less suiting example of the PostGIS manual for > ST_AddPoint(): > > UPDATE sometable > SET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom)) > FROM sometable > WHERE ST_IsClosed(the_geom) = false; > > > With a MultiLineString, this might be a bit more complicated because you > have to find out first, is your multilinestring resulting in a polygon or a > multipolygon? If all linestrings form one polygon, you have to select the > start point of the first linestring as end point of the last linestring. If > the result is a multipolygon, you have to find out which of the rings is not > closed, first. As I see from your first e-mail, you are expecting the > geometry to become a multipolygon, so (assuming every linestring is > representing a polygon within the multipolygon, otherwise it might be a > solution to union the linestrings first) maybe the sql code could look like > this: > > UPDATE sometable a > SET the_geom = sel.geom FROM > (SELECT b1.gid, ST_Collect(b1.geom) AS geom --put together all linestrings to > one multilinestring again > FROM > (SELECT b.gid, ST_AddPoint(b.geom, ST_StartPoint(b.geom)) --add an end point > on the position of the start point for each non-closed linestring > FROM > (SELECT gid, (st_dump(the_geom)).geom AS geom --separate the linestrings and > select the not closed ones > FROM sometable > WHERE ST_IsClosed(the_geom)=false) b > WHERE ST_IsClosed(b.geom) = false > UNION ALL > SELECT b.gid, b.geom > FROM > (SELECT gid, (st_dump(the_geom)).geom AS geom --separate the linestrings and > select the closed ones > FROM sometable > WHERE ST_IsClosed(the_geom)=false) b > WHERE ST_IsClosed(b.geom) = true) b1 > GROUP BY b1.gid) sel > WHERE ST_IsClosed(a.the_geom)=false AND a.gid=sel.gid; > > I did not test the code, but I hope you get the idea... > > Regards, > > Birgit. > > > > On 28.03.2011 18:47, Javier Perez wrote: > > Hi, > > I tried *ST_BuildArea*(geometry A); and *ST_BdMPolyFromText*(text WKT, > integer srid); > > but the output is empty. I think it's becouse this functions may need the > MULTILINESTRING to be closed and it's not. > > Any suggestion? > > 2011/3/25 Javier Perez <[email protected]> > >> Hi Marc-Andre! >> >> I think this usefull. >> >> Thanks a lot! >> >> Regards >> >> 2011/3/25 Morin, Marc-André <[email protected]> >> >>> *Hi,* >>> ** >>> *This is the recipe I found in the past to get it done:* >>> ** >>> >>> http://postgis.refractions.net/pipermail/postgis-users/2008-May/019901.html >>> >>> It worked well for me. >>> >>> Regards, >>> >>> Marc-André >>> >>> >>> ------------------------------ >>> *De :* [email protected] [mailto: >>> [email protected]] *De la part de* Javier >>> Perez >>> *Envoyé :* March 25, 2011 7:35 AM >>> *À :* [email protected] >>> *Objet :* [postgis-users] MULTILINESTRING to MULTIPOLYGON >>> >>> Hi!, >>> >>> In my app I get a MULTILINESTRING and want to insert it as >>> MULTIPOLYGON. I think there's an easy way but I did't found, can anyone >>> bring some light? >>> >>> >>> Thanks in advance >>> >>> >>> _______________________________________________ >>> postgis-users mailing list >>> >>> [email protected] >>> http://postgis.refractions.net/mailman/listinfo/postgis-users >>> >>> >> > > _______________________________________________ > postgis-users mailing > [email protected]http://postgis.refractions.net/mailman/listinfo/postgis-users > > > _______________________________________________ > postgis-users mailing list > [email protected] > http://postgis.refractions.net/mailman/listinfo/postgis-users > >
_______________________________________________ postgis-users mailing list [email protected] http://postgis.refractions.net/mailman/listinfo/postgis-users
