1

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

因此,查询可能看起来像

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

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

我考虑过的事情:

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

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

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

我想选择最好的选择(也许上面没有列出?),IMO 应该是最有效地使用 SQLserver 功能的人。

4

3 回答 3

1

Raciel 所问的是如何通过距离因子“简化”点列表。假设你有一个按日期时间排序的一百个空间点列表,其中一个点与前一个点之间的距离正好是 150 英尺,他只需要获取距离为 300 英尺的点列表,结果集应该是一个列表大约 50 分......我只是想用光标来做这件事。

于 2011-12-15T18:49:04.037 回答
0

公式为:

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

地球的半径是 3949.99 英里。所有的休息都是不言自明的。这个公式是大圆距离计算公式。

于 2011-12-13T19:16:47.307 回答
0

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

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

如您所料,在 SQL 2008 中,通过引入 Geography 和 Geometry 数据类型,此类计算得到了简化并变得更加准确。下面是一个简短的示例,说明如何使用它们来简化距离计算。

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 中实现它的最简单方法。

于 2011-12-13T20:08:42.810 回答