PostgreSQL列中点和线字符串对象的混合。如何从线字符串中提取点和第一个点?
所以我在PostgreSQL数据库中有一个列,它包含点对象和线字符串对象。现在我的最终目标是从这些物体中提取纬度和经度。对于点对象,我可以通过查询:PostgreSQL列中点和线字符串对象的混合。如何从线字符串中提取点和第一个点?,sql,postgresql,postgis,Sql,Postgresql,Postgis,所以我在PostgreSQL数据库中有一个列,它包含点对象和线字符串对象。现在我的最终目标是从这些物体中提取纬度和经度。对于点对象,我可以通过查询: 选择ST_X(记录。主位置)作为纬度, ST_Y(记录。主位置)作为经度 根据记录 现在,如果只是数据库中的点对象,这将得到所有纬度和经度。 但是,也有行字符串。我想从中提取第一个点,然后检索每个点的纬度和经度。为了实现从点和线串获取横向/纵向,我尝试了: 选择ST_X(ST_PointN(records.primary_location,1))
选择ST_X(记录。主位置)作为纬度,
ST_Y(记录。主位置)作为经度
根据记录
现在,如果只是数据库中的点对象,这将得到所有纬度和经度。
但是,也有行字符串。我想从中提取第一个点,然后检索每个点的纬度和经度。为了实现从点和线串获取横向/纵向,我尝试了:
选择ST_X(ST_PointN(records.primary_location,1))作为纬度,
ST_Y(ST_PointN(records.primary_location,1))作为经度
根据记录
其中,我假设ST_PointN()
将从LINESTRING中提取第一个点,并仅从point对象中保留一个点。然而,这是行不通的
有人知道我如何在一列中同时从这两种类型的对象中检索lat/long坐标吗?另外,我更希望在一个查询中出现这种情况。您是否尝试过根据查询结果将这些条件嵌入到表达式中 数据样本
CREATE TABLE t (geom GEOMETRY);
INSERT INTO t VALUES ('POINT(1 1)'),
('LINESTRING (8 1, 1 3, 4 4)'),
('POINT(8 2)'),
('LINESTRING (4 2, 2 4, 5 5)');
质疑
如果您确定列中除了point和linestring之外没有其他几何图形类型,则可以使其更加简单
SELECT
CASE
WHEN ST_GeometryType(geom) = 'ST_LineString'
THEN ST_AsText(ST_PointN(geom,1))
ELSE ST_AsText(geom)
END
FROM t;
st_astext
------------
POINT(1 1)
POINT(8 1)
POINT(8 2)
POINT(4 2)
(4 Zeilen)
SELECT
CASE
WHEN ST_GeometryType(geom) = 'ST_LineString'
THEN ST_AsText(ST_PointN(geom,1))
ELSE ST_AsText(geom)
END
FROM t;
st_astext
------------
POINT(1 1)
POINT(8 1)
POINT(8 2)
POINT(4 2)
(4 Zeilen)