使用sql server 2008 spatial 搜索距离内的地理

系统 1688 0

 

先看看sql server 2008 spatial的函数定义  http://msdn.microsoft.com/zh-cn/library/bb933917(v=SQL.100).aspx

所有的空间计算是以这些函数为基础的

 

搜索距离内的地理对象(几何形状),其实就是电子地图的"显示视野内 酒店/商场..." 功能, 这里可以有两种方式来实现.

   

 方法1: 使用 STDistance

STDistance(geography 数据类型)

返回一个 geography 实例中的点与另一个 geography 实例中的点之间的最短距离。


语法

.STDistance ( other_geography ) 

 

算法

代码
1   declare   @urplace   =  geometry::STPointFromText( ' POINT(nnnn mmmm) ' , 4326 );
2    
3   select
4     name,lng,lat,location.STDistance( @urplace as  distance
5   from
6     geotable
7   where
8     location.STDistance( @urplace ) < 1000
9  

 

这个方法计算精度高( STDistance返回精确的距离 ),但是作为where条件,也因此导致效率低,一般推荐在查询的数据量比较少的情况下(几百)使用

 

方法2:使用STBuffer 

 STBuffer(geography 数据类型)

返回一个地理对象,该对象表示所有与 geography 实例的距离小于或等于指定值的点的并集。


语法


.STBuffer ( distance )

 

算法

代码
1   declare   @urplace   =  geometry::STPointFromText( ' POINT(nnnn mmmm) ' , 4326 );
2   declare   @bufArea   =   @urplace .STBuffer( 1000 )
3  
4   select
5      name,lng,lat,location.STDistance( @urplace as  distance
6   from
7      geotable
8   where
9     location.Filter( @bufArea =   1

 

 

此方法先是对原来地理对象建立缓冲区,然后通过Filter()与缓冲区有交集的数据集,再进行精确的 STDistance 计算, Filter会使用到 你为该表建立spatial索引,因此 会极大地提高性能


使用sql server 2008 spatial 搜索距离内的地理对象


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论