My first crack at the issue was to use a 3 time self join on 
table2.st_startpoint and table1.st_endpoint with a 3rd table to check that no 
other 3rd line shared the endpoint. This ensured proper directionality, but 
there was no function as st_linemerge(table1.geom, table2.geom). Maybe I missed 
something. That query also would only have merged 2 coincident lines at a time.


> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On 
> Behalf Of Kevin Neufeld
> Sent: Wednesday, October 07, 2009 8:40 AM
> To: [email protected]; PostGIS Users Discussion
> Subject: Re: [postgis-users] Merge lines
> 
> 
> Correct.  It looks like the below query will return 
> coincident lines along contiguous sections of 3 or more (it also 
> assumes your network is properly directionalized).
> 
> This is a problem of transitive closure.  I once solved this 
> iteratively by first finding all the degree-2 nodes in my 
> network, then one node at at time, merging the two lines that 
> share the node.
> 
> A modern approach might be to solve this using PostgreSQL's 
> new recursive SQL syntax. Cheers, Kevin
> 
> Martin Fafard wrote:
> > Stanley
> > 
> > Thank you
> > But your query merge two contiguous lines but not 3 or more 
> contiguous
> > lines...
> > 
> > Martin
> > 
> > Sufficool, Stanley a écrit :
> >> Does this look correct?
> >>
> >> select st_linemerge(st_collect(cs1.the_geom))
> >> from (
> >>    select the_geom, st_startpoint(cs_s.the_geom) as linepoint
> >>    from mylinetable cs_s
> >>    UNION ALL 
> >>    select the_geom, st_endpoint(cs_e.the_geom) as linepoint
> >>    from mylinetable cs_e
> >>
> >> ) as cs1
> >> group by linepoint
> >> having count(*) = 2
> >>
> _______________________________________________
> 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