使用SQL Server 2008 spatial搜索距离内的地理对象

日期: 2010-05-11 作者:stickman 来源:TechTarget中国 英文

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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

stickman
stickman

相关推荐