From: Regina Obe Date: Wed, 29 Oct 2008 13:13:28 +0000 (+0000) Subject: Move over ST_Line_Substring X-Git-Tag: 1.4.0b1~563 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a62d6815a25c6bc781c7313587f58fff6c8de53f;p=postgis Move over ST_Line_Substring git-svn-id: http://svn.osgeo.org/postgis/trunk@3202 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/doc/reference.xml b/doc/reference.xml index a727e522a..e83268b13 100644 --- a/doc/reference.xml +++ b/doc/reference.xml @@ -543,64 +543,6 @@ Linear Referencing - - ST_Line_Substring(linestring geometry, startfraction float8, endfraction float8) - - - Return a linestring being a substring of the input one - starting and ending at the given fractions of total 2d length. - Second and third arguments are float8 values between 0 and - 1. This only works with LINESTRINGs. - To use with contiguous MULTILINESTRINGs use in conjunction with ST_LineMerge. - - If 'start' and 'end' have the same value this is equivalent - to line_interpolate_point(). - - See line_locate_point() for - computing the line location nearest to a Point. - - - Since release 1.1.1 this function also interpolates M and - Z values (when present), while prior releases set them to - unspecified values. - - - Availability: 1.1.0 - ---Return the approximate 1/3 mid-range part of a linestring -SELECT ST_Line_SubString(ST_LineFromText('LINESTRING(748130.463 2919491.079, - 747979.395 2919630.415, - 747895.989829177 2919705.518)'), 0.333, 0.666); - ---The below example simulates a while loop in ---SQL using PostgreSQL generate_series() to cut all ---linestrings in a table to 100 unit segments --- of which no segment is longer than 100 units --- units are measured in the SRID units of measurement --- It also assumes all geometries are LINESTRING or contiguous MULTILINESTRING ---and no geometry is longer than 100 units*10000 ---for better performance you can reduce the 10000 ---to match max number of segments you expect - -SELECT field1, field2, ST_Line_Substring(the_geom, 100.00*n/length, - CASE - WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length - ELSE 1 - END) As the_geom -FROM - (SELECT sometable.field1, sometable.field2, - ST_LineMerge(sometable.the_geom) AS the_geom, - ST_Length(sometable.the_geom) As length - FROM sometable - ) AS t -CROSS JOIN generate_series(0,10000) AS n -WHERE n*100.00/length < 1; - - - - ST_line_locate_point(LineString geometry, Point geometry) diff --git a/doc/reference_new.xml b/doc/reference_new.xml index 42ebcf850..bd43a3db2 100644 --- a/doc/reference_new.xml +++ b/doc/reference_new.xml @@ -9097,7 +9097,7 @@ GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7 Z values (when present), while prior releases set them to 0.0. - Availability: 0.8.2, support Z and M 1.1.1 + Availability: 0.8.2, Z and M supported added in 1.1.1 @@ -9137,6 +9137,103 @@ SELECT ST_AsEWKT(ST_Line_Interpolate_Point(the_line, 0.5)) , + + + + ST_Line_Substring + + Return a linestring being a substring of the input one + starting and ending at the given fractions of total 2d length. + Second and third arguments are float8 values between 0 and + 1. + + + + + + geometry ST_Line_Substring + geometry a_linestring + float startfraction + float endfraction + + + + + + Description + + Return a linestring being a substring of the input one + starting and ending at the given fractions of total 2d length. + Second and third arguments are float8 values between 0 and + 1. This only works with LINESTRINGs. + To use with contiguous MULTILINESTRINGs use in conjunction with ST_LineMerge. + + If 'start' and 'end' have the same value this is equivalent + to . + + See for + computing the line location nearest to a Point. + + + Since release 1.1.1 this function also interpolates M and + Z values (when present), while prior releases set them to + unspecified values. + + + Availability: 1.1.0 , Z and M supported added in 1.1.1 + + + + + + + This function supports 3d and will not drop the z-index. + + + + Examples + +--Return the approximate 1/3 mid-range part of a linestring +SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(748130 2919491, + 747979 2919630,747895 2919705)'), 0.333, 0.666)); + + st_astext +------------------------------------------------------------------------------------------------ + LINESTRING(748052.127524758 2919562.68393416,747979 2919630,747974.189261348 2919634.29530237) + +--The below example simulates a while loop in +--SQL using PostgreSQL generate_series() to cut all +--linestrings in a table to 100 unit segments +-- of which no segment is longer than 100 units +-- units are measured in the SRID units of measurement +-- It also assumes all geometries are LINESTRING or contiguous MULTILINESTRING +--and no geometry is longer than 100 units*10000 +--for better performance you can reduce the 10000 +--to match max number of segments you expect + +SELECT field1, field2, ST_Line_Substring(the_geom, 100.00*n/length, + CASE + WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length + ELSE 1 + END) As the_geom +FROM + (SELECT sometable.field1, sometable.field2, + ST_LineMerge(sometable.the_geom) AS the_geom, + ST_Length(sometable.the_geom) As length + FROM sometable + ) AS t +CROSS JOIN generate_series(0,10000) AS n +WHERE n*100.00/length < 1; + + + + + + See Also + + , , + +