PostGIS计算从一个点到多个点的距离

时间:2020-02-22 06:14:55

标签: sql postgresql postgis

在PostgreSQL 12.1 64bit和PostGIS 3.0中,我有两个小表。我想确定从一个表中的一个点到另一表中的多个点的距离。这两个表的SRID相同:26910。

具有多个点的表的WKT ebd_sampl具有以下坐标:

ID           geom
'S6485705'  'POINT(473697.203011859 5107286.1114417)'
'S16187642' 'POINT(473388.313557094 5107381.77541894)'
'S21737009' 'POINT(473304.975396136 5107449.75936742)'
'S27967642' 'POINT(472992.535028299 5107506.05876625)'
'S30893534' 'POINT(472638.34972214 5107604.73782347)'
'S35264483  'POINT(473106.919925334 5107464.0012127)'

其他表格中的WKT点grid_sampl是: 'POINT(473144.563851624 5107073.33440939)'

我可以编写一个带有WHERE子句的内部查询,以在第一个内部查询中选择一个点,并在每个表的一个点之间获得一个距离。我认为通过在第一个内部查询中删除WHERE子句,该查询将更通用,并返回一个表,该表包含第一个表中所有点到第二个表中所选点的距离。但是我不知道该怎么写SQL。

我尝试过:

SELECT ST_Distance(
    (SELECT geom FROM p_loc.ebd_sampl),
    (SELECT geom FROM p_loc.grid_sampl WHERE data = '441062')
);

这是结果:

ERROR:  more than one row returned by a subquery used as an expression

我想要一张桌子(距离值在这里组成)

ID          distance
'S6485705'  400
'S16187642' 550
'S21737009' 633
'S27967642' 401
'S30893534' 700
'S35264483' 501

我应该使用哪种SQL,以便返回第一个表中每个点到第二个表中一个选定点的距离?

1 个答案:

答案 0 :(得分:1)

尝试在FROM子句中传递两个表,并在WHERE子句中过滤所需的值,例如

SELECT id,ST_Distance(t.geom,grid_sampl.geom) 
FROM t,grid_sampl
WHERE grid_sampl.data = '441062' ;

示例

CREATE TABLE t (id TEXT, geom GEOMETRY);
INSERT INTO t VALUES
('S6485705',  'SRID=26910;POINT(473697.203011859 5107286.1114417)'),
('S16187642', 'SRID=26910;POINT(473388.313557094 5107381.77541894)'),
('S21737009', 'SRID=26910;POINT(473304.975396136 5107449.75936742)'),
('S27967642', 'SRID=26910;POINT(472992.535028299 5107506.05876625)'),
('S30893534', 'SRID=26910;POINT(472638.34972214 5107604.73782347)'),
('S35264483', 'SRID=26910;POINT(473106.919925334 5107464.0012127)');

CREATE TABLE grid_sampl (data TEXT, geom GEOMETRY);
INSERT INTO grid_sampl VALUES ('441062','SRID=26910;POINT(473144.563851624 5107073.33440939)');

SELECT id,ST_Distance(t.geom,grid_sampl.geom) 
FROM t,grid_sampl
WHERE grid_sampl.data = '441062' ;

    id     |   st_distance    
-----------+------------------
 S6485705  | 592.185871921898
 S16187642 | 393.128191928728
 S21737009 | 409.179193802818
 S27967642 | 458.653608010902
 S30893534 | 733.922566341344
 S35264483 | 392.476262206356
(6 Zeilen)
相关问题