758 lines
25 KiB
XML
758 lines
25 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<sect1 id="Linear_Referencing">
|
|
<title>Linear Referencing</title>
|
|
|
|
<refentry id="ST_LineInterpolatePoint">
|
|
<refnamediv>
|
|
<refname>ST_LineInterpolatePoint</refname>
|
|
|
|
<refpurpose>Returns a point interpolated along a line at a fractional location.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LineInterpolatePoint</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>a_linestring</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>a_fraction</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns a point interpolated along a line at a fractional location.
|
|
First argument must be a LINESTRING.
|
|
Second argument is a float between 0 and 1
|
|
representing the fraction of line length
|
|
where the point is to be located.
|
|
The Z and M values are interpolated if present.
|
|
</para>
|
|
|
|
<para>See <xref linkend="ST_LineLocatePoint" /> for
|
|
computing the line location nearest to a Point.</para>
|
|
|
|
<note>
|
|
<para>This function computes points in 2D and then interpolates
|
|
values for Z and M,
|
|
while <xref linkend="ST_3DLineInterpolatePoint" /> computes points in 3D
|
|
and only interpolates the M value.</para>
|
|
</note>
|
|
|
|
<note>
|
|
<para>Since release 1.1.1 this function also interpolates M and
|
|
Z values (when present), while prior releases set them to
|
|
0.0.</para>
|
|
</note>
|
|
<para>Availability: 0.8.2, Z and M supported added in 1.1.1</para>
|
|
<para>Changed: 2.1.0. Up to 2.0.x this was called ST_Line_Interpolate_Point.</para>
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
<informalfigure>
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="images/st_line_interpolate_point01.png" />
|
|
</imageobject>
|
|
<caption><para>A LineString with the interpolated point at 20% position (0.20) </para></caption>
|
|
</mediaobject>
|
|
</informalfigure>
|
|
<programlisting>-- The point 20% along a line
|
|
|
|
SELECT ST_AsEWKT( ST_LineInterpolatePoint(
|
|
'LINESTRING(25 50, 100 125, 150 190)',
|
|
0.2 ));
|
|
----------------
|
|
POINT(51.5974135047432 76.5974135047432)
|
|
</programlisting>
|
|
|
|
<para>The mid-point of a 3D line:</para>
|
|
<programlisting>
|
|
SELECT ST_AsEWKT( ST_LineInterpolatePoint('
|
|
LINESTRING(1 2 3, 4 5 6, 6 7 8)',
|
|
0.5 ));
|
|
--------------------
|
|
POINT(3.5 4.5 5.5)
|
|
</programlisting>
|
|
|
|
<para>The closest point on a line to a point:</para>
|
|
<programlisting>
|
|
SELECT ST_AsText( ST_LineInterpolatePoint( line.geom,
|
|
ST_LineLocatePoint( line.geom, 'POINT(4 3)')))
|
|
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As geom) AS line;
|
|
------------
|
|
POINT(3 4)
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<!-- Optionally add a "See Also" section -->
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para>
|
|
<xref linkend="ST_LineInterpolatePoints" />,
|
|
<xref linkend="ST_3DLineInterpolatePoint" />,
|
|
<xref linkend="ST_LineLocatePoint" />
|
|
</para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_3DLineInterpolatePoint">
|
|
<refnamediv>
|
|
<refname>ST_3DLineInterpolatePoint</refname>
|
|
|
|
<refpurpose>Returns a point interpolated along a 3D line at a fractional location.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_3DLineInterpolatePoint</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>a_linestring</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>a_fraction</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns a point interpolated along a 3D line at a fractional location.
|
|
First argument must be a LINESTRING. Second argument is a float between 0 and 1
|
|
representing the point location as a fraction of line length.
|
|
The M value is interpolated if present.
|
|
</para>
|
|
|
|
<note>
|
|
<para><xref linkend="ST_LineInterpolatePoint" /> computes points in 2D
|
|
and then interpolates the values for Z and M,
|
|
while this function computes points in 3D
|
|
and only interpolates the M value.</para>
|
|
</note>
|
|
|
|
<para>Availability: 3.0.0</para>
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<para>Return point 20% along 3D line</para>
|
|
<programlisting>
|
|
SELECT ST_AsText(
|
|
ST_3DLineInterpolatePoint('LINESTRING(25 50 70, 100 125 90, 150 190 200)',
|
|
0.20));
|
|
|
|
st_asetext
|
|
----------------
|
|
POINT Z (59.0675892910822 84.0675892910822 79.0846904776219)
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<!-- Optionally add a "See Also" section -->
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para>
|
|
<xref linkend="ST_LineInterpolatePoint" />,
|
|
<xref linkend="ST_LineInterpolatePoints" />,
|
|
<xref linkend="ST_LineLocatePoint" />
|
|
</para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LineInterpolatePoints">
|
|
<refnamediv>
|
|
<refname>ST_LineInterpolatePoints</refname>
|
|
|
|
<refpurpose>
|
|
Returns points interpolated along a line at a fractional interval.
|
|
</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LineInterpolatePoints</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>a_linestring</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>a_fraction</parameter></paramdef>
|
|
<paramdef><type>boolean </type> <parameter>repeat</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns one or more points interpolated along a line at a fractional interval.
|
|
The first argument
|
|
must be a LINESTRING. The second argument is a float8 between 0 and 1
|
|
representing the spacing between the points as a fraction of
|
|
line length. If the third argument is false, at most one point
|
|
will be constructed (which is equivalent to <xref linkend="ST_LineInterpolatePoint" />.)
|
|
</para>
|
|
|
|
<para>
|
|
If the result has zero or one points, it is returned as a POINT.
|
|
If it has two or more points, it is returned as a MULTIPOINT.
|
|
</para>
|
|
|
|
|
|
<para>Availability: 2.5.0</para>
|
|
<para>&Z_support;</para>
|
|
<para>&M_support;</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
<informalfigure>
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="images/st_line_interpolate_points01.png" />
|
|
</imageobject>
|
|
<caption><para>A LineString with points interpolated every 20% </para></caption>
|
|
</mediaobject>
|
|
</informalfigure>
|
|
<programlisting>--Return points each 20% along a 2D line
|
|
SELECT ST_AsText(ST_LineInterpolatePoints('LINESTRING(25 50, 100 125, 150 190)', 0.20))
|
|
----------------
|
|
MULTIPOINT((51.5974135047432 76.5974135047432),(78.1948270094864 103.194827009486),(104.132163186446 130.37181214238),(127.066081593223 160.18590607119),(150 190))
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para>
|
|
<xref linkend="ST_LineInterpolatePoint" />,
|
|
<xref linkend="ST_LineLocatePoint" />
|
|
</para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LineLocatePoint">
|
|
<refnamediv>
|
|
<refname>ST_LineLocatePoint</refname>
|
|
|
|
<refpurpose>Returns the fractional location of
|
|
the closest point on a line to a point.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>float8 <function>ST_LineLocatePoint</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>a_linestring</parameter></paramdef>
|
|
<paramdef><type>geometry </type> <parameter>a_point</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns a float between 0 and 1 representing the location of
|
|
the closest point on a LineString to the given Point, as a fraction
|
|
of <link linkend="ST_Length2D">2d line</link> length.</para>
|
|
|
|
<para>You can use the returned location to extract a Point (<xref linkend="ST_LineInterpolatePoint" />) or
|
|
a substring (<xref linkend="ST_LineSubstring" />).</para>
|
|
|
|
<para>This is useful for approximating numbers of addresses</para>
|
|
|
|
<para>Availability: 1.1.0</para>
|
|
<para>Changed: 2.1.0. Up to 2.0.x this was called ST_Line_Locate_Point.</para>
|
|
</refsection>
|
|
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>
|
|
--Rough approximation of finding the street number of a point along the street
|
|
--Note the whole foo thing is just to generate dummy data that looks
|
|
--like house centroids and street
|
|
--We use ST_DWithin to exclude
|
|
--houses too far away from the street to be considered on the street
|
|
SELECT ST_AsText(house_loc) As as_text_house_loc,
|
|
startstreet_num +
|
|
CAST( (endstreet_num - startstreet_num)
|
|
* ST_LineLocatePoint(street_line, house_loc) As integer) As street_num
|
|
FROM
|
|
(SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line,
|
|
ST_Point(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,
|
|
20 As endstreet_num
|
|
FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)
|
|
As foo
|
|
WHERE ST_DWithin(street_line, house_loc, 0.2);
|
|
|
|
as_text_house_loc | street_num
|
|
-------------------+------------
|
|
POINT(1.01 2.06) | 10
|
|
POINT(2.02 3.09) | 15
|
|
POINT(3.03 4.12) | 20
|
|
|
|
--find closest point on a line to a point or other geometry
|
|
SELECT ST_AsText(ST_LineInterpolatePoint(foo.the_line, ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)'))))
|
|
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;
|
|
st_astext
|
|
----------------
|
|
POINT(3 4)
|
|
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<!-- Optionally add a "See Also" section -->
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_DWithin" />, <xref linkend="ST_Length2D" />, <xref linkend="ST_LineInterpolatePoint" />, <xref linkend="ST_LineSubstring" /></para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LineSubstring">
|
|
<refnamediv>
|
|
<refname>ST_LineSubstring</refname>
|
|
|
|
<refpurpose>Returns the part of a line between two fractional locations.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LineSubstring</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>a_linestring</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>startfraction</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>endfraction</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Computes the line which is the section of the input line
|
|
starting and ending at the given fractional locations.
|
|
The first argument must be a LINESTRING.
|
|
The second and third arguments are values in the range [0, 1]
|
|
representing the start and end locations
|
|
as fractions of line length.
|
|
The Z and M values are interpolated for added endpoints if present.
|
|
</para>
|
|
|
|
<para>If <varname>startfraction</varname> and <varname>endfraction</varname>
|
|
have the same value this is equivalent
|
|
to <xref linkend="ST_LineInterpolatePoint" />.</para>
|
|
|
|
<note>
|
|
<para>This only works with LINESTRINGs.
|
|
To use on contiguous MULTILINESTRINGs
|
|
first join them with <xref linkend="ST_LineMerge" />.</para>
|
|
</note>
|
|
|
|
<note>
|
|
<para>Since release 1.1.1 this function interpolates M and
|
|
Z values. Prior releases set Z and M to
|
|
unspecified values.</para>
|
|
</note>
|
|
|
|
<para>Availability: 1.1.0, Z and M supported added in 1.1.1</para>
|
|
<para>Changed: 2.1.0. Up to 2.0.x this was called ST_Line_Substring.</para>
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
<informalfigure>
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="images/st_line_substring01.png" />
|
|
</imageobject>
|
|
<caption><para>A LineString seen with 1/3 midrange overlaid (0.333, 0.666) </para></caption>
|
|
</mediaobject>
|
|
</informalfigure>
|
|
<programlisting>
|
|
SELECT ST_AsText(ST_LineSubstring( 'LINESTRING (20 180, 50 20, 90 80, 120 40, 180 150)', 0.333, 0.666));
|
|
------------------------------------------------------------------------------------------------
|
|
LINESTRING (45.17311810399485 45.74337011202746, 50 20, 90 80, 112.97593050157862 49.36542599789519)
|
|
</programlisting>
|
|
|
|
<para>
|
|
If start and end locations are the same, the result is a POINT.
|
|
</para>
|
|
<programlisting>
|
|
SELECT ST_AsText(ST_LineSubstring( 'LINESTRING(25 50, 100 125, 150 190)', 0.333, 0.333));
|
|
------------------------------------------
|
|
POINT(69.2846934853974 94.2846934853974)
|
|
</programlisting>
|
|
|
|
|
|
<para>
|
|
A query to cut a LineString into sections of length 100 or shorter.
|
|
It uses <varname>generate_series()</varname> with a CROSS JOIN LATERAL
|
|
to produce the equivalent of a FOR loop.
|
|
</para>
|
|
<programlisting>
|
|
WITH data(id, geom) AS (VALUES
|
|
( 'A', 'LINESTRING( 0 0, 200 0)'::geometry ),
|
|
( 'B', 'LINESTRING( 0 100, 350 100)'::geometry ),
|
|
( 'C', 'LINESTRING( 0 200, 50 200)'::geometry )
|
|
)
|
|
SELECT id, i,
|
|
ST_AsText( ST_LineSubstring( geom, startfrac, LEAST( endfrac, 1 )) ) AS geom
|
|
FROM (
|
|
SELECT id, geom, ST_Length(geom) len, 100 sublen FROM data
|
|
) AS d
|
|
CROSS JOIN LATERAL (
|
|
SELECT i, (sublen * i) / len AS startfrac,
|
|
(sublen * (i+1)) / len AS endfrac
|
|
FROM generate_series(0, floor( len / sublen )::integer ) AS t(i)
|
|
-- skip last i if line length is exact multiple of sublen
|
|
WHERE (sublen * i) / len <> 1.0
|
|
) AS d2;
|
|
|
|
id | i | geom
|
|
----+---+-----------------------------
|
|
A | 0 | LINESTRING(0 0,100 0)
|
|
A | 1 | LINESTRING(100 0,200 0)
|
|
B | 0 | LINESTRING(0 100,100 100)
|
|
B | 1 | LINESTRING(100 100,200 100)
|
|
B | 2 | LINESTRING(200 100,300 100)
|
|
B | 3 | LINESTRING(300 100,350 100)
|
|
C | 0 | LINESTRING(0 200,50 200)
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<!-- Optionally add a "See Also" section -->
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_Length" />, <xref linkend="ST_LineInterpolatePoint" />, <xref linkend="ST_LineMerge" /></para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LocateAlong">
|
|
<refnamediv>
|
|
<refname>ST_LocateAlong</refname>
|
|
|
|
<refpurpose>Returns the point(s) on a geometry that match a measure value.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LocateAlong</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>geom_with_measure</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>measure</parameter></paramdef>
|
|
<paramdef choice="opt"><type>float8 </type> <parameter>offset = 0</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns the location(s) along a measured geometry
|
|
that have the given measure values.
|
|
The result is a Point or MultiPoint.
|
|
Polygonal inputs are not supported.</para>
|
|
|
|
<para>If <varname>offset</varname> is provided, the result
|
|
is offset to the left or right of the input line by the specified distance.
|
|
A positive offset will be to the left, and a negative one to the right.</para>
|
|
|
|
<note><para>Use this function only for linear geometries with an M component</para></note>
|
|
|
|
<para>The semantic is specified by the <emphasis>ISO/IEC 13249-3 SQL/MM Spatial</emphasis> standard.</para>
|
|
|
|
<para>Availability: 1.1.0 by old name ST_Locate_Along_Measure. </para>
|
|
<para>Changed: 2.0.0 in prior versions this used to be called ST_Locate_Along_Measure.</para>
|
|
|
|
<para>&M_support;</para>
|
|
<para>&sqlmm_compliant; SQL-MM IEC 13249-3: 5.1.13</para>
|
|
</refsection>
|
|
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
<programlisting>
|
|
SELECT ST_AsText(
|
|
ST_LocateAlong(
|
|
'MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))'::geometry,
|
|
3 ));
|
|
|
|
----------------------------------
|
|
MULTIPOINT M ((1 2 3),(9 4 3),(1 2 3))
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_LocateBetween" />, <xref linkend="ST_LocateBetweenElevations" />, <xref linkend="ST_InterpolatePoint" /> </para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LocateBetween">
|
|
<refnamediv>
|
|
<refname>ST_LocateBetween</refname>
|
|
|
|
<refpurpose>Returns the portions of a geometry that match a measure range.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LocateBetween</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>geom</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>measure_start</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>measure_end</parameter></paramdef>
|
|
<paramdef choice="opt"><type>float8 </type> <parameter>offset = 0</parameter></paramdef>
|
|
</funcprototype>
|
|
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Return a geometry (collection) with the portions of the input measured geometry
|
|
that match the specified measure range (inclusively).</para>
|
|
|
|
<para>If the <varname>offset</varname> is provided, the result
|
|
is offset to the left or right of the input line by the specified distance.
|
|
A positive offset will be to the left, and a negative one to the right.</para>
|
|
|
|
<para>Clipping a non-convex POLYGON may produce invalid geometry.</para>
|
|
|
|
<para>The semantic is specified by the <emphasis>ISO/IEC 13249-3 SQL/MM Spatial</emphasis> standard.</para>
|
|
|
|
<para>Availability: 1.1.0 by old name ST_Locate_Between_Measures. </para>
|
|
<para>Changed: 2.0.0 - in prior versions this used to be called ST_Locate_Between_Measures.</para>
|
|
<para>Enhanced: 3.0.0 - added support for POLYGON, TIN, TRIANGLE.</para>
|
|
|
|
<para>&M_support;</para>
|
|
<para>&sqlmm_compliant; SQL-MM IEC 13249-3: 5.1</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>
|
|
SELECT ST_AsText(
|
|
ST_LocateBetween(
|
|
'MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))':: geometry,
|
|
1.5, 3 ));
|
|
------------------------------------------------------------------------
|
|
GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3))
|
|
</programlisting>
|
|
|
|
<informalfigure>
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="images/st_locatebetween01.png" />
|
|
</imageobject>
|
|
<caption><para>A LineString with the section between measures 2 and 8, offset to the left </para></caption>
|
|
</mediaobject>
|
|
</informalfigure>
|
|
|
|
<programlisting>
|
|
SELECT ST_AsText( ST_LocateBetween(
|
|
ST_AddMeasure('LINESTRING (20 180, 50 20, 100 120, 180 20)', 0, 10),
|
|
2, 8,
|
|
20
|
|
));
|
|
------------------------------------------------------------------------
|
|
MULTILINESTRING((54.49835019899045 104.53426957938231,58.70056060327303 82.12248075654186,69.16695286779743 103.05526528559065,82.11145618000168 128.94427190999915,84.24893681714357 132.32493442618113,87.01636951231555 135.21267035596549,90.30307285299679 137.49198684843182,93.97759758337769 139.07172433557758,97.89298381958797 139.8887023914453,101.89263860095893 139.9102465862721,105.81659870902816 139.13549527600819,109.50792827749828 137.5954340631298,112.81899532549731 135.351656550512,115.6173761888606 132.49390095108848,145.31017306064817 95.37790486135405))
|
|
</programlisting>
|
|
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_LocateAlong" />, <xref linkend="ST_LocateBetweenElevations" /></para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
<refentry id="ST_LocateBetweenElevations">
|
|
<refnamediv>
|
|
<refname>ST_LocateBetweenElevations</refname>
|
|
|
|
<refpurpose>Returns the portions of a geometry
|
|
that lie in an elevation (Z) range.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_LocateBetweenElevations</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>geom</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>elevation_start</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>elevation_end</parameter></paramdef>
|
|
</funcprototype>
|
|
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns a geometry (collection) with the portions of a geometry
|
|
that lie in an elevation (Z) range.</para>
|
|
|
|
<para>Clipping a non-convex POLYGON may produce invalid geometry.</para>
|
|
|
|
<para>Availability: 1.4.0</para>
|
|
<para>Enhanced: 3.0.0 - added support for POLYGON, TIN, TRIANGLE.</para>
|
|
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>SELECT ST_AsText(
|
|
ST_LocateBetweenElevations(
|
|
'LINESTRING(1 2 3, 4 5 6)'::geometry,
|
|
2, 4 ));
|
|
|
|
st_astext
|
|
-----------------------------------
|
|
MULTILINESTRING Z ((1 2 3,2 3 4))
|
|
|
|
SELECT ST_AsText(
|
|
ST_LocateBetweenElevations(
|
|
'LINESTRING(1 2 6, 4 5 -1, 7 8 9)',
|
|
6, 9)) As ewelev;
|
|
|
|
ewelev
|
|
-----------------------------------------------------------------------
|
|
GEOMETRYCOLLECTION Z (POINT Z (1 2 6),LINESTRING Z (6.1 7.1 6,7 8 9))
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_Dump" />, <xref linkend="ST_LocateBetween" /></para>
|
|
</refsection>
|
|
</refentry>
|
|
|
|
|
|
<refentry id="ST_InterpolatePoint">
|
|
<refnamediv>
|
|
<refname>ST_InterpolatePoint</refname>
|
|
|
|
<refpurpose>Returns the interpolated measure of a geometry closest to a point.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>float8 <function>ST_InterpolatePoint</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>linear_geom_with_measure</parameter></paramdef>
|
|
<paramdef><type>geometry </type> <parameter>point</parameter></paramdef>
|
|
</funcprototype>
|
|
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Returns an interpolated measure value of a linear measured geometry
|
|
at the location closest to the given point.</para>
|
|
|
|
<note><para>Use this function only for linear geometries with an M component</para></note>
|
|
|
|
<para>Availability: 2.0.0</para>
|
|
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)');
|
|
---------------------
|
|
10
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>See Also</title>
|
|
|
|
<para><xref linkend="ST_AddMeasure" />, <xref linkend="ST_LocateAlong" />, <xref linkend="ST_LocateBetween" /></para>
|
|
</refsection>
|
|
|
|
</refentry>
|
|
|
|
|
|
<refentry id="ST_AddMeasure">
|
|
<refnamediv>
|
|
<refname>ST_AddMeasure</refname>
|
|
|
|
<refpurpose>Interpolates measures along a linear geometry.</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>geometry <function>ST_AddMeasure</function></funcdef>
|
|
<paramdef><type>geometry </type> <parameter>geom_mline</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>measure_start</parameter></paramdef>
|
|
<paramdef><type>float8 </type> <parameter>measure_end</parameter></paramdef>
|
|
</funcprototype>
|
|
|
|
</funcsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsection>
|
|
<title>Description</title>
|
|
|
|
<para>Return a derived geometry with measure values linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported.</para>
|
|
|
|
<para>Availability: 1.5.0</para>
|
|
|
|
<para>&Z_support;</para>
|
|
</refsection>
|
|
|
|
<refsection>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>SELECT ST_AsText(ST_AddMeasure(
|
|
ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev;
|
|
ewelev
|
|
--------------------------------
|
|
LINESTRINGM(1 0 1,2 0 2,4 0 4)
|
|
|
|
SELECT ST_AsText(ST_AddMeasure(
|
|
ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;
|
|
ewelev
|
|
----------------------------------------
|
|
LINESTRING(1 0 4 10,2 0 4 20,4 0 4 40)
|
|
|
|
SELECT ST_AsText(ST_AddMeasure(
|
|
ST_GeomFromEWKT('LINESTRINGM(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;
|
|
ewelev
|
|
----------------------------------------
|
|
LINESTRINGM(1 0 10,2 0 20,4 0 40)
|
|
|
|
SELECT ST_AsText(ST_AddMeasure(
|
|
ST_GeomFromEWKT('MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 4))'),10,70)) As ewelev;
|
|
ewelev
|
|
-----------------------------------------------------------------
|
|
MULTILINESTRINGM((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70))
|
|
</programlisting>
|
|
</refsection>
|
|
|
|
</refentry>
|
|
|
|
</sect1>
|