SQL Server空间数据

时间:2015-02-19 20:58:53

标签: sql-server spatial

提前感谢任何见解。我是SQL Server中使用空间函数的新手。如果有人能指出我解决问题的基本正确方法,我将不胜感激。

我正与一位监控可从水道进入的气井的客户合作。在某一天,一条船沿着河流从A点行进到B点。我将“路线”作为一系列可以在地图上绘制的Lat / Long值。我认为这将在SQL Server中用作LineString。

我还有一个已知井的清单,以及它们的纬度/长仓位。我想将这些记录存储在数据库中,并使用某种空间索引索引Lat / Long。我不是100%确定如何正确索引表,但它将包含列Lat / Long / WellName / Owner等。

该功能需要执行以下操作:给定船在某一天(LineString及其所有点)的路线的纬度/经度,找到距该线2000英尺范围内的所有井。工人们将从船上下来并前往井中对他们进行维护。他们每天都会在河的另一个区域工作。

同样,我正在寻找关于Wells表(tblWells)需要的定向建议,并且还创建一个存储过程,接受线点的Lat / Long作为nvarchar(MAX)输入参数。目前,它只需要返回线上任意点2000英尺范围内的所有井。

真诚地感谢任何花时间提供帮助的人。

最诚挚的问候......

1 个答案:

答案 0 :(得分:2)

首先,您需要一张井表:

create table dbo.Wells (
   WellId int identity not null,
   Name varchar(50) not null,
   Owner varchar(50) not null,
   Location geography not null
)

然后在给定路径的特定距离内搜索井的程序:

create procedure dbo.FindWells
( 
  @Path geography,
  @Distance float
) as
begin

   declare @buffer geography = @Path.STBuffer(@Distance);

   select WellId
   from dbo.Wells
   where @buffer.STContains(Location);
)

如果你真的想把你的路径作为varchar传递,那就去吧;只需使用geography::STLineFromText或类似内容将其转换为地理位置实例。

对于表上的索引,请在“位置”列上创建空间索引。使用分辨率,但我猜测,鉴于您的用例,前三个分辨率将低,最后一个高。不过,请玩弄它。