根据几何列选择重复项

时间:2015-04-01 04:12:22

标签: sql sql-server geometry spatial spatial-query

我遇到了一个棘手的问题。我需要根据几何图形选择SQL空间表中的所有重复项(有些已经复制并粘贴,但没有意识到它们一遍又一遍地粘贴相同的几何体)。

我需要选择除几何图形相同的最低ID之外的所有重复项。

5 个答案:

答案 0 :(得分:2)

您可以自己加入表格并查看STEquals功能。

SELECT tbl1.OBJECTID, tbl2.OBJECTID
FROM your_table tbl1
JOIN yout_table tbl2 ON tbl1.your_geometry_field.STEquals(tbl2.your_geometry_field) = 1
ORDER BY tbl1.OBJECTID

一个缺点是你得到重复的对,如下所示:

101 110
101 210
110 101
110 210
210 101
210 110

答案 1 :(得分:0)

对于您的问题的第一部分:在名为“TableName”的表上,其中一个空间点列名为“CenterPoint” 以下按位置对中心点进行分组,如果计数大于1,则存在重复:

@@

答案 2 :(得分:0)

我最近使用了这些方法

SELECT DISTINCT(T1.Id)
FROM table T1, table T2
WHERE T1.Shape.STEquals(T2.Shape) > 0
AND T1.Id <> T2.Id
ORDER BY Id

这样,您可以使用空间关系来查找重复项。

另一种方法是使用几何文本使用典型的SQL GROUP BY

SELECT Id, Shape.STAsText(), COUNT(*) Duplicates
FROM table
GROUP BY Id, Shape.STAsText()
HAVING COUNT(*) > 1

答案 3 :(得分:0)

请尝试以下代码段

SELECT tbl1.id, tbl2.id
FROM HEXA_GRID_SP tbl1,
HEXA_GRID_SP tbl2 
where SDO_EQUAL(tbl1.geometry,tbl2.geometry) = 'TRUE';

答案 4 :(得分:-1)

这将为您提供所有重复项。

WITH C AS(
    SELECT  ROW_NUMBER() OVER (PARTITION BY CAST(your_geometry_field AS VARBINARY(MAX)) 
                               ORDER BY CAST(your_geometry_field AS VARBINARY(MAX)) AS Rn
    FROM your_table
)
SELECT * FROM C WHERE Rn != 1