针对这个问题,可以使用 geography::STBuffer 函数重构和缓冲区域(polygon)边界。这可以确保缓冲区域与 STIntersects 的计算一起运作高效且不会返回错误结果。下面是一些示例代码,以利于更清晰的理解:
-- 创建一个要素列(FeaturesTable),并添加一个空间列(SpatialGeogoryColumn)
CREATE TABLE FeaturesTable
(
FeatureID int PRIMARY KEY NOT NULL,
SpatialGeogoryColumn geography
);
--添加一些地球表面多边形或regions
INSERT INTO FeaturesTable(FeatureID, SpatialGeogoryColumn)
VALUES(1, geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));
-- 重新缓冲缓冲区域
DECLARE @BufferedGeom geography;
SET @BufferedGeom = (SELECT SpatialGeogoryColumn.STBuffer(0.01) FROM FeaturesTable WHERE FeatureID = 1);
-- 使用 STIntersects 来测试多边形和缓冲区域是否相交
SELECT SpatialGeogoryColumn.STIntersects(@BufferedGeom)
FROM FeaturesTable
WHERE FeatureID = 1;
可以看到,这里使用 STBuffer 函数对区域多边形进行了缓冲,从而确保 STIntersects 函数在计算时有效。