gis - PostGIS:在半径内查找重复标签
问题描述
我在 PostGIS 中有具有价值和几何形状的数据。如果让我们说 <10 m 内有相同的值,我想从我的表中检测或删除该值。这是一个小例子:
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 具有相同的值并且距离<10m,所以会有:
id |val| source | geom
-----+------------+------
3 | 1 | aaa | xxx
4 | 2 | ccc | xxx
你知道如何在 PostGIS 中查询吗?
解决方案
首先,我会考虑什么是真正的要求?例如,考虑距离为 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
并从每组中选择任意点。请注意,这并不能保证没有接近点(具有相似坐标的点可以捕捉到不同的网格单元),但它确实减少了大多数重复,并且计算成本非常低。
推荐阅读
- javascript - 如何从节点列表中添加类单个项目?
- javascript - 如何在angularJS中刷新cookie
- html - 添加具有相同属性的新记录后,从 HTML 中的表中删除一行
- javascript - Array.reduce 奇怪的行为
- css - chrome在css转换后留下额外的空间
- c++ - c++,如何在代码中获取解决方案目录
- android - 用于 Android GPS 导航的 Bing Maps API
- javascript - 用许多表达式替换的正则表达式高级方法
- javascript - 如果类存在,则 SetInterval 播放声音
- excel - 通过excel公式计算月份的周数