STWithin 不适用于地理

Posted

技术标签:

【中文标题】STWithin 不适用于地理【英文标题】:STWithin not working for Geography 【发布时间】:2012-01-13 01:43:15 【问题描述】:

问题:

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

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);

谁能解释一下我做错了什么?

提前致谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

非常感谢。我错过了顶部的“2012”!我找到了几何之一,但我不想将地理点转换为几何点只是为了使用 STWithin。看起来我一直在用 .Lat 和 .Long 进行计算【参考方案2】:

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

【讨论】:

以上是关于STWithin 不适用于地理的主要内容,如果未能解决你的问题,请参考以下文章

地理定位不适用于 Firefox

地理位置不适用于华为设备上的 WebChromeClient

Javascript地理定位不适用于更新的android chrome

后台地理定位插件不适用于 Android 版本

地理定位不适用于科尔多瓦

地理围栏示例应用程序不适用于模拟位置