【问题标题】:combine duplicate pairs of polygons合并重复的多边形对
【发布时间】:2022-01-19 02:45:18
【问题描述】:

我的代码遇到了问题。此代码查找相距小于 100 m 的唯一多边形对。如何合并重复对?

这是我的代码:

select s1.id, s2.id, 
    ST_distance(
      ST_Transform(s1.geom,3857),
      ST_Transform(s2.geom,3857)),
   s1.geom 
from shops as s1, shops as s2
where ST_distance(
       ST_Transform(s1.geom,3857),
       ST_Transform(s2.geom,3857))<100 
 and s1.id<>s2.id

【问题讨论】:

  • 你应该直接在问题中包含代码,不要链接到它的图像。
  • 另外,如果您使用投影 3857,我认为 ST_Distance() 不会返回米单位。您应该使用投影 4326。
  • 请将查询和数据发布为文本,而不是图像。
  • 附带说明,永远不要计算 3857 中的距离,因为这种投影会严重扭曲它们。使用合适的局部投影来保留距离或使用地理或使用 ST_DistanceSphere。在 where 子句中,请查看 st_dwithin,因为它使用了空间索引
  • @SteveBennett 3857 的单位是米,所以结果将以米为单位......尽管由于失真,它是一个毫无意义的距离。 4326 上的 st_distance 会返回一个以度为单位的距离,这更没有意义。

标签: sql postgresql postgis spatial


【解决方案1】:

您使用的WHERE 条件将选择每对shops.ids 两次(一次在s1 中使用较高的ID,另一次在s2 中使用较高的ID)。因此,改为添加更严格的条件:

WHERE ...
AND s1.id < s2.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 2017-10-16
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多