临时支持函数

ST_IsValidTrajectory

ST_IsValidTrajectory — 如果几何体是有效轨迹,则返回true。

语法

st_isvalidtrajectory ::=

参数

geom_line

geometry类型。

返回值

返回值为boolean类型。

判断几何体是否编码了有效的轨迹。有效的轨迹编码为LINESTRING,M值从每个顶点到下一个顶点不断增长。

有效的轨迹被期望作为一些时空查询的输入,比如ST_ClosestPointOfApproach。

示例

SELECT ST_IsValidTrajectory('LINESTRINGM(0 0 1,1 1 0)'::geometry);
ST_ISVALIDTRAJECTORY(boolean)      |
-----------------------------------
false                              |
总数目:1

SELECT ST_IsValidTrajectory('LINESTRINGM(0 0 0,1 1 1,1 1 2,1 0 1)'::geometry);
ST_ISVALIDTRAJECTORY(boolean)      |
-----------------------------------
false                              |
总数目:1

ST_ClosestPointOfApproach

ST_ClosestPointOfApproach — 返回沿两条直线插值的点最接近的度量值。

语法

st_closestpointofapproach ::=

参数

track1 track2

geometry类型。

返回值

返回值为float8类型。

返回沿给定直线插值的点位于最小距离处的最小度量值。输入必须是ST_IsValidTrajetroy检查的有效轨迹。如果轨迹在M范围内不重叠,则返回Null。

有关给定测量的实际点,请参见ST_LocateAlong。

示例

select ST_ClosestPointOfApproach( 'LINESTRINGZM(0 0 0 0, 10 10 10 10)', 'LINESTRINGZM(0 0 0 1, 10 10 10 10)');
ST_CLOSESTPOINTOFAPPROACH(double precision)      |
-------------------------------------------------
10                                               |
总数目:1

ST_DistanceCPA

ST_DistanceCPA — 返回两条轨迹中最近的接近点之间的距离。

语法

st_distancecpa ::=

参数

track1 track2

geometry类型。

返回值

返回值为float8类型。

返回两个移动对象之间的最小距离。输入必须是ST_IsValidTrajetroy检查的有效轨迹。如果轨迹在M范围内不重叠,则返回Null。

示例

SELECT ST_DistanceCPA('LINESTRINGM(0 0 0, 1 0 1)'::geometry ,'LINESTRINGM(0 0 0, 1 0 1)'::geometry);
ST_DISTANCECPA(double precision)      |
--------------------------------------
0E0                                   |
总数目:1
SELECT ST_DistanceCPA('LINESTRINGM(0 0, 1 1)'::geometry ,'LINESTRINGM(0 0,1 0)'::geometry);
ERROR, can not mix dimensionality in a geometry "LINESTRINGM(0 0, 1 1)" <-- parse error at position 26 within geometry

ST_CPAWithin

ST_CPAWithin — 如果轨迹的最近接近点在指定距离内,则返回true。

语法

st_cpawithin ::=

参数

track1 track2

geometry类型。

maxdist

float8类型。

返回值

返回值为boolean类型。

示例

输入必须是ST_IsValidTrajetroy检查的有效轨迹。如果轨迹在M范围内不重叠,则返回False。

drop table t_d;
create table t_d(a float);
insert into t_d values(0.0), (1);

SELECT 'cpaw1', a, ST_CPAWithin(
       'LINESTRINGM(0 0 0, 1 0 1)'::geometry
      ,'LINESTRINGM(0 0 0, 1 0 1)'::geometry, a)
      FROM t_d ORDER BY a;
?COLUMN?(varchar)      |A(float)      |ST_CPAWITHIN(boolean)      |
----------------------------------------------------------------
cpaw1                  |0             |true                       |
----------------------------------------------------------------
cpaw1                  |1             |true                       |
总数目:2
drop table t_d;