避免 PostGIS 中的边缘重复
Avoid edge duplicates in PostGIS
我想在距离小于 5m 的节点之间创建边。以下 PostGIS 代码有效。
create table edges as
select a.id from_gid,
b.id to_gid,
st_shortestline(a.geom_26916, b.geom_26916),
st_distance(a.geom_26916, b.geom_26916) as distance
from flowers as a,
(select * from flowers) as b
where st_dwithin(a.geom_26916, b.geom_26916, 5);
然而,它给了我重复的边。如何修改代码以获得独特的边缘?谢谢!
相同的table被查询了两次(如a
和b
),所以它将return记录1和2之间的一条边,以及第二行在记录 2 和 1 之间。对于同一记录(一个点),它也会 return 奇怪的结果。
您需要在 id 上添加过滤子句:
...
WHERE a.id < b.id AND st_dwithin(a.geom_26916, b.geom_26916, 5);
我想在距离小于 5m 的节点之间创建边。以下 PostGIS 代码有效。
create table edges as
select a.id from_gid,
b.id to_gid,
st_shortestline(a.geom_26916, b.geom_26916),
st_distance(a.geom_26916, b.geom_26916) as distance
from flowers as a,
(select * from flowers) as b
where st_dwithin(a.geom_26916, b.geom_26916, 5);
然而,它给了我重复的边。如何修改代码以获得独特的边缘?谢谢!
相同的table被查询了两次(如a
和b
),所以它将return记录1和2之间的一条边,以及第二行在记录 2 和 1 之间。对于同一记录(一个点),它也会 return 奇怪的结果。
您需要在 id 上添加过滤子句:
...
WHERE a.id < b.id AND st_dwithin(a.geom_26916, b.geom_26916, 5);