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

Reply via email to