【问题标题】:PostGIS: Finding duplicate label within a radiusPostGIS:在半径内查找重复标签
【发布时间】:2020-04-01 11:12:18
【问题描述】:

我在 PostGIS 中有具有价值和几何形状的数据。如果让我们说

create table points (id serial primary key, val integer, label2);

select addGeometryColumn('points', 'geom', 1, 'point', 2);

insert into points (id, val, label2, geom) values
  (1, 1, aaa, st_geomFromText('POINT(1 1)', 1)),
  (2, 1, bbb, st_geomFromText('POINT(1 2)', 1)),
  (3, 1, aaa, st_geomFromText('POINT(10 100)', 1)),
  (4, 2, ccc, st_geomFromText('POINT(10 101)', 1));

因为data(id) 1和2的值相同,距离

  id |val| source | geom 
-----+------------+------
   3 | 1 |  aaa   | xxx
   4 | 2 |  ccc   | xxx

你知道如何在 PostGIS 中查询吗?

【问题讨论】:

  • 我不确定。我还是不明白,还找不到答案
  • @Anonymous 您使用的是哪个参考系统?你是说 10 米还是 10 英里?
  • 对不起,我的意思是 10 米(或者可以稍后替换为所需的距离或半径)
  • @Anonymous,您使用的是哪个参考系统? WGS84?如果多个点在同一半径内,去除多余点的标准是什么?

标签: gis postgis


【解决方案1】:

首先,我会考虑真正的要求是什么?例如。考虑距离为 8 米的线上的点:A、B、C 和相等的值。您希望将其简化为 A 和 C,还是 B?两者都消除了10米内的重复,但结果不同。那么 A、B、C、D 呢?您希望结果是 A、C 还是 B、D 还是 A、D 还是 B、C?定义特定标准并非易事,有时很难在 SQL 中实现。

或者也许你不在乎,只是想降低点密度?然后更简单,只需计算具有适当网格大小的snapped = ST_SnapToGrid,并按snapped, value 的相等值分组,并从每组中选择任意点。请注意,这并不能保证没有接近点(具有相似坐标的点可以捕捉到不同的网格单元),但它确实减少了大多数重复,并且计算成本非常低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2012-05-04
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多