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

 

先看看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 ) 

 

算法

ExpandedBlockStart.gif 代码
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 )

 

算法

ExpandedBlockStart.gif 代码
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索引,因此会极大地提高性能


转载于:https://www.cnblogs.com/stickman/archive/2010/05/12/1733081.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值