STWithin不为地理工作

时间:2012-01-13 01:43:15

标签: sql-server-2008 geography

问题:

执行@somegeog.STWithin(@othergeog)时,我得到了execption:

Msg 6506, Level 16, State 10, Line 5
Could not find method 'STWithin' for type 'Microsoft.SqlServer.Types.SqlGeography' in assembly 'Microsoft.SqlServer.Types'

背景

我第一次使用SQL Server(2008 R2)地理数据。我有一个表中的点列表,我想检索给定区域中的点。我打算编写一个接受该区域的纬度和经度边界的存储过程。

我可以通过从存储的地理点中提取纬度和经度来轻松编写此过程,但我希望让内置功能完成工作。在谷歌搜索了一段时间之后,我发现了STWithin method,但即使使用微软的例子,我也会收到错误声称该方法不存在。

来自链接的MS示例:

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::Parse('POLYGON ((-120.533 46.566, -118.283 46.1, -122.3 47.45, -120.533 46.566))');
SET @h = geography::Parse('CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (-122.200928 47.454094, -122.810669 47.00648, -122.942505 46.687131, -121.14624 45.786679, -119.119263 46.183634), (-119.119263 46.183634, -119.273071 47.107523), CIRCULARSTRING (-119.273071 47.107523, -120.640869 47.569114, -122.200928 47.454094)))');
SELECT @g.STWithin(@h);

有人可以解释一下我做错了吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为您正在查看的示例适用于SQL Server 2012.请尝试此处的示例:http://technet.microsoft.com/en-us/library/bb933991.aspx

答案 1 :(得分:1)

您可以在SQL Server 2008中使用STIntersects()地理数据类型。如果您设置了空间索引,这比使用.Lat和.Long要快得多。