2

我正在使用 SQL Server 2012。

我的表中有此类型geometry的列:

POINT (34.8780917279395 32.1872894246816)

在另一个表中,我还有一列类型geometry

0xE6100000010CB3314B4F6570414073F29019F9174040

如何比较这些列,以确定它是否是同一点?

4

3 回答 3

1

对于第二个表,您需要将点从 WKB 转换为 geom 格式。尝试在下面获取几何图形并与第一点进行比较。

DECLARE @g geometry;   
SET @g = geometry::STGeomFromWKB(0xE6100000010CB3314B4F6570414073F29019F9174040, 0);  
SELECT @g.STAsText();  
于 2016-08-22T10:26:57.577 回答
1

这可能不是您将在文档中阅读的内容。当我需要比较几何时,我通常会添加第二个几何列,其中包含几何的 MD5 哈希。该比较比传统的几何比较快。sql语句也变得更加清晰。

然而,保持 MD5-hash 更新存在额外的复杂性,而且这种方法也可能存在一些缺陷。

于 2017-03-11T19:59:11.703 回答
0

只有当SRID相等时,才能比较几何。看看下面的例子(有意扩展):

WITH Geometries AS
(
    SELECT
        --Convert to geometry)
        CAST(0xE6100000010CB3314B4F6570414073F29019F9174040 AS geometry) GB,
        --Get SRID          
        CAST(0xE6100000010CB3314B4F6570414073F29019F9174040 AS geometry).STSrid STSrid
)
SELECT
    STSrid,--SRID, make sure point 'belongs' to correct SRID
    GB.STDistance(geometry::STPointFromText('POINT(34.8780917279395 32.1872894246816)', STSrid)) Distance
FROM Geometries

如果点是精确副本,您也可以比较几何/二进制表示。STDistance 更灵活。

于 2016-08-22T10:25:17.073 回答