Hi Andrew, This (long) thread may give you some hints on how to order and then merge lines together: "Closing polylines", 11 May 2012.
Nicolas On 19 October 2012 00:27, Andrew Ukrainec <aukrai...@accipiterradar.com> wrote: > I've been trying to append a new LINESTRING to an existing > LINESTRING in a table, and this seems to be an impossible > task. I've searched the net for solutions, and tried all > possible obvious approaches: > > ST_LineMerge(ST_Collect(geom1,geom2)) > ST_LineMerge(ST_Union(geom1,geom2)) > ... > > I wrote a function to use the aggregate version of the call > > ST_LineMerge(ST_Collect(geom)) > > I keep getting a MULTILINESTRING() at the output rather > than a single LINESTRING(). > > If I run this example adapted from an example on > the OSGeo site: > > SELECT ST_AsText(ST_LineMerge(ST_Collect(the_geom))) > FROM (SELECT 'LINESTRING(0 0, 0 1)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(1 0, 1 1)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(0 0, 1 0)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(1 1, 0 1)'::geometry the_geom) as a; > > I get a single LINESTRING that I hoped for, > > LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0) > > but the answer is completely counter intuitive to me. > I expected the individual LINESTRINGs to be simply appended > in order. If I adjust the data in the first LINESTRING so > that '0 1' point is now '1 0': > > SELECT ST_AsText(ST_LineMerge(ST_Collect(the_geom))) > FROM (SELECT 'LINESTRING(0 0, 1 0)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(1 0, 1 1)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(0 0,1 0)'::geometry the_geom > UNION ALL > SELECT 'LINESTRING(1 1, 0 1)'::geometry the_geom) as a; > > then again the operation fails and I get MULTILINESTRING() > at the output. > > MULTILINESTRING((1 0,1 1,0 1),(1 0,0 0,1 0)) > > The PostGIS documentation only contains the mysterious > statement in the Example section: > > "--If can't be merged - original MULTILINESTRING is returned" > > I can accept that LINEMERGE() does not work the way I imagined > it would, but then there is no explanation of how it does work > in the documentation. In the case that one wants to glue > two LINESTRING() together into a single LINESTRING() preserving > the order of the points, can anyone suggest how this can > be done efficiently? > > Thanks in advance. > > _______________________________________________ > postgis-users mailing list > postgis-users@postgis.refractions.net > http://postgis.refractions.net/mailman/listinfo/postgis-users _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users