SQL 服务器空间数据

SQL Server Spatial Data

提前感谢您的任何见解。我刚开始使用 SQL 服务器中的空间函数。如果有人能指出解决我遇到的问题的基本正确方法,我将不胜感激。

我正在与一个客户合作,该客户监控可从水道进入的气井。在某一天,一艘船沿着河流从 A 点行驶到 B 点。我将 "route" 作为可以绘制在地图上的一系列 Lat/Long 值。我认为这将用作 SQL 服务器中的 LineString。

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

该功能需要执行以下操作:给定船在给定日期所走路线的 Lat/Long(LineString 及其所有点),找到 2000 英尺以内的所有水井那条线。工人们将下船到井下进行维修。每天他们将在河流的不同部分工作。

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

衷心感谢所有愿意花时间提供帮助的人。

最诚挚的问候...

首先,您需要 table 口井:

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 或类似的东西将其转换为地理实例。

至于 table 上的索引,请在 Location 列上创建空间索引。尝试一下分辨率,但我猜根据您的用例,前三个分辨率会很低,而最后一个会很高。不过,请尝试一下。