Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql PostGIS计算从一个点到多个点的距离_Sql_Postgresql_Postgis - Fatal编程技术网

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

Sql PostGIS计算从一个点到多个点的距离,sql,postgresql,postgis,Sql,Postgresql,Postgis,在PostgreSQL 12.1 64位和PostGIS 3.0中,我有两个小的点表。我想确定从一个表中的一个点到另一个表中的多个点的距离。这两个表都具有相同的SRID:26910 具有多个点的工作台的WKT,ebd_sampl,具有以下坐标: ID geom 'S6485705' 'POINT(473697.203011859 5107286.1114417)' 'S16187642' 'POINT(473388.313557094 5107381.77541894)'

在PostgreSQL 12.1 64位和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
'点(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
我想要一个表,如(距离值在这里组成):


我应该使用什么SQL来返回第一个表中每个点到第二个表中一个选定点的相应距离?

尝试在
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)

我还在学习使用SQL。你的回答很有道理,我应该先想到这一点。我使用的查询来自一个来源,该来源回答了一个与我正在研究的问题类似的问题,我认为我只需要在上面的问题中进行修改。谢谢你的帮助。
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)