避免 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被查询了两次(如ab),所以它将return记录1和2之间的一条边,以及第二行在记录 2 和 1 之间。对于同一记录(一个点),它也会 return 奇怪的结果。

您需要在 id 上添加过滤子句:

...
WHERE a.id < b.id AND st_dwithin(a.geom_26916, b.geom_26916, 5);