我一定是遗漏了一些非常基本的东西,但我有 2 张桌子。两者都是基本的,只是一个主键(作为唯一标识符)和一个几何列。我正在尝试查找其中一个表中的点是否存在于另一个表中的多边形中。
所以这没有任何问题(从 PolygonTable 返回一行):
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT (-117.6743333 33.8343333)', 0);
select * from PolygonTable where Polygon.STIntersects(@g)= 1
这也有效
declare @h geometry
select @h = Point from PointTable where PointGUID=N'3B77C26E-ACAC-4328-ED94-08D5EDE20723'
SELECT @h.ToString(); // outputs POINT (-117.6743333 33.8343333) above
但出于某种原因,以下内容不起作用
declare @h geometry
select @h = Point from PointTable where PointGUID=N'3B77C26E-ACAC-4328-ED94-08D5EDE20723'
select * from PolygonTable where Polygon.STIntersects(@h)= 1
该查询根本不返回任何行。基本上在顶级查询中是一样的,我错过了什么?
这是基本表格设置的要点: https ://gist.github.com/vishnu4/9bd70658b49c2cfa00ca81ff1d25bc84 您可以使用我上面的查询来测试我的结果。
您遇到的问题是因为您的 GEOMETRY 点不在同一个 SPACE REFERECEN ID 中。对于第一种情况,您处于 SRID = 0,对于第二种情况,您处于 SRID = 4326。这使得 Intersection 返回一个空列表。
检查此文档:
https://learn.microsoft.com/en-us/sql/t-sql/spatial-geometry/stintersects-geometry-data-type?view=sql-server-2017