我正在使用 SQL Server 2012。
我的表中有此类型geometry
的列:
POINT (34.8780917279395 32.1872894246816)
在另一个表中,我还有一列类型geometry
:
0xE6100000010CB3314B4F6570414073F29019F9174040
如何比较这些列,以确定它是否是同一点?
我正在使用 SQL Server 2012。
我的表中有此类型geometry
的列:
POINT (34.8780917279395 32.1872894246816)
在另一个表中,我还有一列类型geometry
:
0xE6100000010CB3314B4F6570414073F29019F9174040
如何比较这些列,以确定它是否是同一点?
对于第二个表,您需要将点从 WKB 转换为 geom 格式。尝试在下面获取几何图形并与第一点进行比较。
DECLARE @g geometry;
SET @g = geometry::STGeomFromWKB(0xE6100000010CB3314B4F6570414073F29019F9174040, 0);
SELECT @g.STAsText();
这可能不是您将在文档中阅读的内容。当我需要比较几何时,我通常会添加第二个几何列,其中包含几何的 MD5 哈希。该比较比传统的几何比较快。sql语句也变得更加清晰。
然而,保持 MD5-hash 更新存在额外的复杂性,而且这种方法也可能存在一些缺陷。
只有当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 更灵活。