线性函数参考

ST_LineInterpolatePoint

ST_LineInterpolatePoint — 返回在一个LINESTRING对象上面在指定位置上插入(获取)的一个点的几何对象。

语法

st_lineinterpolatepoint ::=

参数

a_linestring

geometry类型。必须为LINESTRING类型。

a_fraction

float类型。参数范围是0到1内的float8类型,表示被插入的点在整个LINESTRING的位置。

返回值

返回值为geometry类型。

有关计算距离点最近的线位置的信息,请参见ST_LineLocatePoint。

示例

select ST_AsText(ST_LineInterpolatePoint('LINESTRING(0 0, 1 1)', 0));
ST_ASTEXT(text)      |
---------------------
POINT(0 0)           |
总数目:1

select ST_AsText(ST_LineInterpolatePoint('LINESTRING(0 0 10, 1 1 5)', 0.5));
ST_ASTEXT(text)      |
---------------------
POINT Z (0.5 0.5 7.5)|
总数目:1
select ST_AsText(ST_LineInterpolatePoint('MULTILINESTRING((0 0, 10 0), (5 -5, 5 5))', 0.5));
ERROR, line_interpolate_point: 1st arg isn't a line


ST_LineInterpolatePoints

ST_LineInterpolatePoints — 返回沿直线插值的一个或多个点。

语法

st_lineinterpolatepoints ::=

参数

a_linestring

geometry类型。必须为LINESTRING类型。

a_fraction

float类型。参数范围是0到1内的float8类型,表示点之间的间距占整个字符串长度的一小部分。

repeat

boolean类型。如果参数为false,则最多会构造一个点(该函数将等效于ST_LineInterpolatePoint。)默认值为true。

返回值

返回值为geometry类型。

如果结果为零或一个点,它将作为一个点返回。如果它有两个或更多点,它将作为多点返回。

示例

select ST_AsText(ST_LineInterpolatePoints('LINESTRING(0 0, 1 1)', 0.7));
ST_ASTEXT(text)      |
---------------------
POINT(0.7 0.7)       |
总数目:1

select ST_AsText(ST_LineInterpolatePoints('LINESTRING(0 0, 1 1)', 0.3));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(0.3 0.3,0.|
6 0.6,0.9 0.9)       |
总数目:1

select ST_AsText(ST_LineInterpolatePoints('LINESTRING(0 0, 1 1)', 0.3, false));
ST_ASTEXT(text)      |
---------------------
POINT(0.3 0.3)       |
总数目:1

ST_LineLocatePoint

ST_LineLocatePoint — 根据输入的点和LINESTRING,返回这个点在LINESTRING上的位置(如果点不在这个LINESTRING上,就返回最近的)。

语法

st_linelocatepoint ::=

参数

a_linestring

geometry类型。必须为LINESTRING类型。

a_point

geometry类型。

返回值

返回值为float8类型。

示例

SELECT ST_LineLocatePoint(ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)'), ST_GeomFromText('POINT(4 3)'));
ST_LINELOCATEPOINT(double precision)      |
------------------------------------------
0.4                                       |
总数目:1

ST_LineSubstring

ST_LineSubstring — 从一个LINESTRING中返回一个从输入的LINESTRING提取指定起点和终点的片段。

语法

st_linesubstring ::=

参数

a_linestring

geometry类型。必须为LINESTRING类型。

startfraction

float类型。值范围在0到1。

endfraction

float类型。值范围在0到1。

返回值

返回值为geometry类型。

该函数只适用于LINESTRING类型对象,如果想对连续的MULTILINESTRING类型对象使用,需要与函数ST_LineMerge一起使用。如果参数的起始点和终点一样,那么返回值和ST_LineInterpolatePoint返回值一样。

示例

SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(25 50, 100 125, 150 190)'), 0.333, 0.666));
ST_ASTEXT(text)      |
---------------------
LINESTRING(69.2846934|
853974 94.2846934853|
974,100 125,111.7003|
56260683 140.2104631|
38888)               |
总数目:1

ST_LocateAlong

ST_LocateAlong — 返回几何对象的M值与给定的M值一样的几何对象,目前不支持多边形类的几何对象。

语法

st_locatealong ::=

参数

ageom_with_measure

geometry类型。

a_measure

float类型。

offset

float类型。如果已经提供了偏移单位,根据提供的偏移单位,在输入的LINESTRING上向左或向右偏移。偏移值为正,则向左偏移,偏移值为负,则向右偏移。

返回值

返回值为geometry类型。

注解

该函数只适用于带M坐标的几何对象。

示例

select ST_AsText(ST_LocateAlong('POINTM(1 2 3)', 3));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT M (1 2 3) |
总数目:1

select ST_AsText(ST_LocateBetween('POINTM(1 2 3)', 2, 3));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT M (1 2 3) |
总数目:1

ST_LocateBetween

ST_LocateBetween — 根据指定的测量值范围,返回一个在输入几何对象的M坐标能匹配的的geometry collection 对象,不支持Polygon对象。

语法

st_locatebetween ::=

参数

geomA

geometry类型。

measure_start

float类型。

measure_end

float类型。

offset

float类型。如果已经提供了偏移单位,根据提供的偏移单位,在输入的LINESTRING上向左或向右偏移。偏移值为正,则向左偏移,偏移值为负,则向右偏移。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(the_geom)
FROM (SELECT ST_LocateBetween(ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo;
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION M |
(LINESTRING M (1 2 3|
,3 4 2,9 4 3),POINT |
M (1 2 3))           |
总数目:1


SELECT ST_AsText(the_geom)
FROM (SELECT ST_LocateBetween(ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))'),1.5, 3, 0.1) As the_geom) As foo;
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((0.92|
9289321881345 2.0707|
1067811865,2.9292893|
2188135 4.0707106781|
1865,2.9444429766980|
4 4.08314696123025,2|
.96173165676349 4.09|
238795325113,2.98049|
096779839 4.09807852|
804032,3 4.1,9 4.1)) |
总数目:1

ST_LocateBetweenElevations

ST_LocateBetweenElevations — 返回高度值在指定范围内的几何对象(collection)。目前只支持 3D, 4D LINESTRINGS 和 MULTILINESTRINGS。

语法

st_locatebetweenelevations ::=

参数

geom_line

geometry类型。

elevation_start

float类型。

elevation_end

float类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_LocateBetweenElevations(
ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6)'),2,4)) As ewelev;
EWELEV(text)      |
------------------
MULTILINESTRING((1|
 2 3,2 3 4))      |
总数目:1


SELECT ST_AsEWKT((ST_Dump(the_geom)).geom)
FROM
(SELECT ST_LocateBetweenElevations(
ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 9)'),6,9) As the_geom) As foo;
ST_ASEWKT(text)      |
---------------------
POINT(1 2 6)         |
---------------------
LINESTRING(6.1 7.1 6,|
7 8 9)               |
总数目:2

ST_InterpolatePoint

ST_InterpolatePoint — 根据提供的点,返回输入几何对象离提供的点最近的点的M值。

语法

st_interpolatepoint ::=

参数

geom_line

geometry类型。

geom_point

geometry类型。

返回值

返回值为float类型。

示例

SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)');
ST_INTERPOLATEPOINT(double precision)      |
-------------------------------------------
10                                         |
总数目:1

ST_AddMeasure

ST_AddMeasure — 返回在起点和终点之间线性插值测量元素的衍生几何体。

语法

st_addmeasure ::=

参数

geom_line

geometry类型。

measure_start

float类型。

measure_end

float类型。

返回值

返回值为geometry类型。

返回在起点和终点之间线性插值测量元素的衍生几何体。如果几何图形没有测量尺寸,则会添加一个。如果几何图形具有测量尺寸,则会用新值覆盖。仅支持线条和多重线条。

示例

SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev;
EWELEV(text)      |
------------------
LINESTRING M (1 0 |
1,2 0 2,4 0 4)    |
总数目:1


SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;
EWELEV(text)      |
------------------
LINESTRING ZM (1 0|
 4 10,2 0 4 20,4 |
0 4 40)           |
总数目:1