提前感谢任何见解。我是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英尺范围内的所有井。
真诚地感谢任何花时间提供帮助的人。
最诚挚的问候......
答案 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
或类似内容将其转换为地理位置实例。
对于表上的索引,请在“位置”列上创建空间索引。使用分辨率,但我猜测,鉴于您的用例,前三个分辨率将低,最后一个高。不过,请玩弄它。