I have a postgis table of simple linestrings, each one is a straight line with just two points. I want to select every linestring, but extended from both sides by 1 meter. So i have lines, that are longer by 2 meters. How can this be done?
Asked
Active
Viewed 5,517 times
2 Answers
12
I seems very similar to post "postgis, extrapolate a line". If I avoid repetition of cited post, I think you just need to extrapolate beyond your extreme points. In a query you get something like this should work:
SELECT ST_MakeLine(ST_TRANSLATE(a, sin(az1) * len, cos(az1) *
len),ST_TRANSLATE(b,sin(az2) * len, cos(az2) * len))
FROM (
SELECT a, b, ST_Azimuth(a,b) AS az1, ST_Azimuth(b, a) AS az2, ST_Distance(a,b) + 1 AS len
FROM (
SELECT ST_StartPoint(the_geom) AS a, ST_EndPoint(the_geom) AS b
FROM ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4)) AS the_geom
) AS sub
) AS sub2
JonasPedersen
- 880
- 1
- 8
- 19
David
- 343
- 2
- 5
0
Be careful: this method swaps points a and b in the end.
Use
SELECT ST_MakeLine(ST_TRANSLATE(a, sin(az2) * len, cos(az2) *
len),ST_TRANSLATE(b,sin(az1) * len, cos(az1) * len))
FROM (
SELECT a, b, ST_Azimuth(a,b) AS az1, ST_Azimuth(b, a) AS az2, 1 AS len
FROM (
SELECT ST_StartPoint(the_geom) AS a, ST_EndPoint(the_geom) AS b
FROM ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4)) AS the_geom
) AS sub
) AS sub2
to have a and b not swapped.
Djedouas
- 131
- 3
ST_Translateexpressions. – dr_jts Aug 06 '22 at 18:59ST_Translateexpressions works as well. In my proposed version I removed theST_Distancefrom thelenand switchedaz1andaz2, that's why it works, or have I missed something? – Djedouas Aug 08 '22 at 07:40