【发布时间】:2021-05-14 07:27:05
【问题描述】:
问题
我有一个包含多个linestringzm 的系统,其中数据的结构如下:[x, y, speed:int, time:int]。数据的结构是这样的,以便能够在x、y 和z 维度上使用ST_SimplifyVW,但我仍然希望能够基于m 维度查询线串,例如获取时间间隔之间的所有线串。
这是否可以通过 PostGIS 实现,或者我是否为我的用例错误地构建了数据?
示例
-
z= 速度,例如公里/小时 -
m= Unix 纪元时间
CREATE TABLE t (id int NOT NULL, geom geometry(LineStringZM,4326), CONSTRAINT t_pkey PRIMARY KEY (id));
INSERT INTO t VALUES (1, 'SRID=4326;LINESTRING ZM(30 10 5 1620980688, 30 15 10 1618388688, 30 20 15 1615710288, 30 25 20 1620980688)'::geometry);
INSERT INTO t VALUES (2, 'SRID=4326;LINESTRING ZM(50 10 5 1620980688, 50 15 10 1618388688, 50 20 15 1615710288, 50 25 20 1620980688)'::geometry);
INSERT INTO t VALUES (3, 'SRID=4326;LINESTRING ZM(20 10 5 1620980688, 20 15 10 1618388688, 20 20 15 1615710288, 20 25 20 1620980688)'::geometry);
-
用例 A:基于
x、y和z简化几何图形这可以通过例如
ST_SimplifyVW简化后保持m维度。 -
用例 B:根据
m维度查询几何我有一组
linestringzm,我想根据我的时间维度 (m) 进行查询。如果所有m在例如1618388000和1618388700之间,则结果要么是完整的几何,要么是满足谓词的几何部分。查询数据最有效的方法是什么?
【问题讨论】:
-
您能否出示
CREATE TABLE声明和INSERT以便我们知道您的意思? -
您的意思是您要编写一个查询来检查您的线串的每个点是否具有与给定范围匹配的维度
m? -
@SOK: 这是你要找的
WITH j AS ( SELECT id,geom, (ST_M((ST_DumpPoints(geom)).geom)) AS mdim FROM t ) SELECT DISTINCT id,geom FROM j WHERE mdim BETWEEN 1430 AND 1530吗? -
@JimJones:我添加了一个示例,希望可以更清楚地说明我想要实现的目标:)
-
我还假设线串没有 id,对吗?
标签: postgresql postgis