那么,这不是一个像使用STWithin一样干净的方法,但可以使用“STDifference”来完成。我准备了一个小例子:
基本上有一个大矩形作为容器。还有两个矩形,“内部”和“外部”,其中第一个完全包含在“容器”中,第二个仅部分包含。
这个想法只是为了检查孩子和父母之间的STD差异是否有任何点(这个技巧是在调用方向上)。
declare @container geography;
declare @inside geography;
declare @outside geography;
select @container = geography::STGeomFromText('POLYGON((-10 10, -10 0, 0 0, 0 10, -10 10))', 4326); -- large rectangle (container)
select @inside = geography::STGeomFromText('POLYGON((-9 9, -9 1, -1 1, -1 9, -9 9))', 4326); -- smaller rectangle (fully contained)
select @outside = geography::STGeomFromText('POLYGON((-9 9, -9 1, 2 1, 2 9, -9 9))', 4326); -- smaller rectangle (partially contained)
select @inside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns 0
select @outside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns > 0
我不完全理解你的问题?这两个多边形都是地理类型吗?您是否尝试将几何转换为地理类型或其他? – TheSteve0 2011-02-28 00:39:11
我有地理数据,但我需要做一些等同于.STWithin()的东西。问题是STWithin()仅适用于几何数据。 – 2011-03-02 18:47:53