给定分离因子,按时间顺序返回记录

时间:2011-12-13 15:56:19

标签: sql-server-2008 tsql geospatial spatial-query

我在 SQLServer 2008 中有一个庞大的表,它包含技术人员每分钟报告的位置。我需要报告此表,但为了控制报告中显示的记录数量,需要考虑时间和距离分离因素。

因此,查询可能看起来像

"Return all records with no less than 5 minutes and/or 300 feet between them".

时间部分已经完成,但我在距离因素方面遇到了困难。我有每个点的纬度和经度,如果我需要包含 SQLServer 2008空间UDT 以解决问题,我没有问题。

我考虑过的事情:

  1. 通过时间因子生成记录,并通过计算相邻点之间的距离来应用客户端中的分离约束,并丢弃落在因子内的那些。 (最简单,但必须是消耗更多资源的人)。

  2. 将每位技术人员的最后一条记录保留在缓存中,预先计算记录与其前任之间的距离,并解决客户端中的约束。 (应该消耗比1更少的资源),因为距离是预先计算的,但是并且由于表是BIG 它会增加数据集的大小,不确定空间是否值得节省处理)

  3. 使用 SQLServer 2008 中的空间函数,但老实说,我一直在阅读,但找不到任何可以帮助我解决此类要求的内容。任何GIS专家??

  4. 我想选择最好的选项(可能没有在上面列出?),IMO应该是最有效使用SQLserver功能的选项。

3 个答案:

答案 0 :(得分:1)

Raciel所问的是,如何通过距离因子“简化”一系列点数。假设你有一个按dateTime排序的100个空间点的列表,并且前一个点之间的距离恰好是150英尺,他需要得到距离为300英尺的点列表,结果集应该是一个列表约50分...... 我只想用光标做这件事。

答案 1 :(得分:0)

公式为:

3949.99 * arcos(sin(LAT1) * sin(LAT2) + cos(LAT1) * cos(LAT2) * cos(LONG1 - LONG2))

地球半径为3949.99英里。其余的都是自我解释的。这个公式是Great Circle距离计算公式。

答案 2 :(得分:0)

在SQL 2008之前,最常见的解决方案是使用UDF计算球体上两点之间的大圆距离。 The Haversine formula可能是最常用的方法。

当然,地球实际上并不是一个完美的球体,但对于大多数用途来说,这被认为是“足够好”。

在SQL 2008中,正如您所预期的那样,通过引入地理和几何数据类型,可以简化此类计算并使其更加准确。以下是如何使用它们来简化距离计算的简要示例。

DECLARE @locations TABLE(locname VARCHAR(100), coord geography)
DECLARE @loc1 geography
DECLARE @loc2 geography


INSERT INTO @locations 
VALUES('HOME', geography::Point(-81.810194, 41.478156, 4326))   --Note: Lat, Long, SRID
                                                                --The 4326 is the SRID (spatial reference id) used by SQL as 
                                                                --a reference to the WGS 84 Standard. This is the same reference
                                                                --used by the GPS system
INSERT INTO @locations 
VALUES('WORK', geography::Point(-81.687771, 41.498227, 4326))

SELECT * FROM @locations

SELECT @loc1 = coord FROM @locations WHERE locname = 'HOME'
SELECT @loc2 = coord FROM @locations WHERE locname = 'WORK'

SELECT @loc1.STDistance(@loc2) * 3.2808399  --STDistance is in meters so we multiply to convert to feet 

SRID是提高准确性的关键。它引用的WGS 84规范包括标准化坐标系和参考椭球。换句话说,它解释了地球的非球形性质,给出了比纯球形大圆计算更好的结果。

如果GIS准确性对您的工作很重要,这是在SQL 2008中实现它的最简单方法。