先看看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 )
算法
代码 declare @urplace = geometry::STPointFromText(‘POINT(nnnn mmmm)’,4326); select name,lng,lat,location.STDistance(@urplace) as distance from geotable where location.STDistance(@urplace)<1000 |
这个方法计算精度高(STDistance返回精确的距离),但是作为where条件,也因此导致效率低,一般推荐在查询的数据量比较少的情况下(几百)使用
方法2:使用STBuffer
STBuffer(geography 数据类型)
返回一个地理对象,该对象表示所有与 geography 实例的距离小于或等于指定值的点的并集。
语法
.STBuffer ( distance )
算法
代码 declare @urplace = geometry::STPointFromText(‘POINT(nnnn mmmm)’,4326); declare @bufArea = @urplace.STBuffer(1000) select name,lng,lat,location.STDistance(@urplace) as distance from geotable where location.Filter(@bufArea) = 1 |
此方法先是对原来地理对象建立缓冲区,然后通过Filter()与缓冲区有交集的数据集,再进行精确的STDistance 计算,Filter会使用到你为该表建立spatial索引,因此会极大地提高性能
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
解决并行SQL性能问题:进程间负载
Oracle采用的大部分算法都是为达成均衡的数据分配而设计的,这些算法包括“HASH”,“ROUND ROBIN”和“RANDOM”分布机制。
-
使用DBMS_CRYPTO包来对Oracle密码进行加密
合理的密匙管理是非常复杂的,而且难于完成。所以有时一个合理执行的“低级”模糊处理可能比那些不合理执行的“强大”算法还要来得安全。
-
SQL Server 2008中九种数据挖掘算法分析(下)
关联算法规则是要发现数据库中变量和个体之间关系程度,也就是要发现大量数据中项集之间有趣的关联或相关联系。
-
SQL Server 2008中九种数据挖掘算法分析(上)
决策树,又称判定树,是一种类似二叉树或多叉树的树结构。决策树是用样本的属性作为结点,用属性的取值作为分支,也就是类似流程图的过程。