[postgis-users] Make a shorter line from a given line

Daniel Grum daniel.grum at unibw.de
Wed Sep 9 13:05:12 PDT 2009


Paragon Corporation schrieb:
> What about
> http://www.postgis.org/documentation/manual-1.4.1SVN/ST_Line_Substring.html
>
> That would give you a percent of the string.
>
> If you need exact lengths, you could derive the percent by simple math
>
> of 1000/ST_length(the_geom)  (would be the fraction you need to give to
> startfrac to get the range of the string you want.
>
> Leo 
>
> -----Original Message-----
> From: postgis-users-bounces at postgis.refractions.net
> [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Daniel
> Grum
> Sent: Wednesday, September 09, 2009 3:20 PM
> To: pcreso at pcreso.com
> Cc: PostGIS Users Discussion
> Subject: Re: [postgis-users] Make a shorter line from a given line
>
> pcreso at pcreso.com schrieb:
>   
>> It sounds like you could use the linear referencing capability, along the
>>     
> lines of (untested, just off the top of my head)...
>   
>> select
>> makeline(st_line_interpolate_point(geom,1-((st_length(geom)-100)/st_le
>> ngth(geom))),endpoint(geom))
>>
>>
>> ie, make you new line the percentage along the original line required by
>>     
> your offset for the start point, and the endpoint remains the same.
>   
>> HTH,
>>
>>   Brent Wood
>>
>>
>> --- On Thu, 9/10/09, Daniel Grum <daniel.grum at unibw.de> wrote:
>>
>>   
>>     
>>> From: Daniel Grum <daniel.grum at unibw.de>
>>> Subject: Re: [postgis-users] Make a shorter line from a given line
>>> To: nicklas.aven at jordogskog.no
>>> Cc: "PostGIS Users Discussion" 
>>> <postgis-users at postgis.refractions.net>
>>> Date: Thursday, September 10, 2009, 5:50 AM 
>>> nicklas.aven at jordogskog.no
>>> schrieb:
>>>     
>>>       
>>>> look at st_scale
>>>> http://www.postgis.org/documentation/manual-1.4.1SVN/ST_Scale.html
>>>>   or maybe st_transscale
>>>> http://www.postgis.org/documentation/manual-1.4.1SVN/ST_TransScale.h
>>>> tml
>>>> /Nicklas
>>>>    
>>>> 2009-09-08 Daniel Grum wrote:
>>>>
>>>> Hy,
>>>>       
>>>>         
>>>>> I want to make a new line from a given line
>>>>>         
>>>>>           
>>> -->both geometry types are
>>>     
>>>       
>>>>> MULTININESTRING
>>>>>
>>>>> Every step the new line should be "x meters"
>>>>>         
>>>>>           
>>> shorter than the original.
>>>     
>>>       
>>>>> I get the length of the line, f.e. 5000 meters
>>>>>         
>>>>>           
>>> (length(the_geom)) and
>>>     
>>>       
>>>>> after the step the new Line should be only 4000
>>>>>         
>>>>>           
>>> meters.
>>>     
>>>       
>>>>> I have a idea but it isn't ready:
>>>>>
>>>>> UPDATE table
>>>>> SET the_geom = (SELECT
>>>>>         
>>>>>           
>>> MakeLine(StartPoint(line.the_geom),
>>>     
>>>       
>>>>> EndPoint(line_merge(line.the_geom)))
>>>>> FROM public.table line
>>>>> ORDER BY line.gid);
>>>>>
>>>>> But in if I do so I have no chance to say that the
>>>>>         
>>>>>           
>>> new line has to be
>>>     
>>>       
>>>>> 100meters shorter than the original line.
>>>>>
>>>>> Are there any ideas how I can solve this problem?
>>>>>
>>>>> Thanks,
>>>>> --Daniel
>>>>> _______________________________________________
>>>>> postgis-users mailing list
>>>>> postgis-users at postgis.refractions.net
>>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>>>
>>>>>
>>>>>         
>>>>>           
>>> That is not what I'm searching for.
>>>
>>> Becaus the line lies somewhere in the 2D space and the end point of 
>>> the line anytime will be the same in my case...only the starting 
>>> point should be changed.
>>> And it should be changed automaticly, step by step, and the new 
>>> starting point hvave to be on the old line/route-->like a route in a 
>>> map and every time step the route will be shorter, because the unit 
>>> has solved x meters.
>>>
>>> Do you know what I mean?
>>>
>>> Scale and TransScale isn't the right finction I think.
>>> --daniel
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at postgis.refractions.net
>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>
>>>     
>>>       
>>   
>>     
> A very good idea.
> I try to understand it..what do you want to solve with:
>
> 1-((st_length(geom)-100)/st_length(geom))
>
> should this be a percantage part of the original line...I don't understand
> it than.
>
> I think we are on a good way...
>
> --daniel
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>   
I have found the problem--> the_geom has the geometry type 
MULTILINESTRING this is a problem in using the functions 
ST_Line_SubString() or st_line_interpolate_point(). So if I want to use 
this functions I have to change the geo type to LINESTRING ...I solved 
this by inserting the function ST_LineMerge() !
So Thanks for the tipps.

--daniel



More information about the postgis-users mailing list