2011-02-27 54 views
0

我正在使用SQL 2008 Geography数据类型来处理映射某些区域的项目。我需要检查一下,确保较小的区域完全位于较大区域的范围内。使用Geometry数据类型,我可以简单地使用.STWithin()SQL Server 2008在地理数据列上近似.STWithin()

我只想让多边形的geometry数据类型以及geography,但我不知道,如果使用的是被定位于geography coordinants会按预期如果作为一个简单的geometry型多边形。

有什么办法在地理数据类型上做类似.STWithin()的事情?

+0

我不完全理解你的问题?这两个多边形都是地理类型吗?您是否尝试将几何转换为地理类型或其他? – TheSteve0 2011-02-28 00:39:11

+0

我有地理数据,但我需要做一些等同于.STWithin()的东西。问题是STWithin()仅适用于几何数据。 – 2011-03-02 18:47:53

回答

1

那么,这不是一个像使用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 
+0

谢谢,我会试一试。 – 2011-03-05 05:13:53