使用 ST_Dwithin 的 PostGIS 查询并输出到 Table 并在单独的列中添加距离

PostGIS query using ST_Dwithin and output to a Table and add distances in a separate column

我正在为如何将实际距离添加到我使用查询创建的 table 而苦恼。这是我拥有的:

CREATE TABLE cdot.rail_risk AS
SELECT DISTINCT ON (t2.gid) t2.gid, t2.status, t2.railroad, t2.geom
FROM cdot.streams t1
    LEFT JOIN cdot.rail_lines_100k t2 ON ST_DWithin(t1.geom, t2.geom, 100)
WHERE t2.status = 'IN SERVICE'

ORDER BY t2.gid, ST_Distance(t1.geom, t2.geom);

我想做的是添加一个数字列 'dist'(四舍五入为 0 位)并填充距离。我尝试了几种不同的替代方案,其中 none 行得通。这是一次失败的尝试:

CREATE TABLE cdot.rail_risk AS
SELECT DISTINCT ON (t2.gid) t2.gid, t2.status, t2.railroad, t2.geom
FROM cdot.streams t1
    LEFT JOIN cdot.rail_lines_100k t2 ON ST_DWithin(t1.geom, t2.geom, 100)
WHERE t2.status = 'IN SERVICE'
ADD COLUMN dist numeric
UPDATE rail_risk SET dist= ROUND((ST_Distance (t1.geom, t2.geom)):: numeric,0)
ORDER BY dist;

我是 postgis 的新手,正在努力学习这一点,我们将不胜感激。

我不知道你写了什么,但离正确的 sql 查询还很远。 'Add column' 是 'alter table' 的选项,select 中的更新不会那样工作...如果您需要编写 sql 查询,请至少阅读 [=21= 的基础知识].

您需要另一列,只需将其添加到 select 子句中...

CREATE TABLE cdot.rail_risk AS
SELECT DISTINCT ON (t2.gid) t2.gid, t2.status, t2.railroad, t2.geom, ROUND((ST_Distance (t1.geom, t2.geom)):: numeric,0) as dist
FROM cdot.streams t1
    LEFT JOIN cdot.rail_lines_100k t2 ON ST_DWithin(t1.geom, t2.geom, 100)
WHERE t2.status = 'IN SERVICE'
ORDER BY (dist);