2011-05-17 20 views
2

嘿,所以我想弄清楚存储运动路径的最佳方法,然后再查询它们可能会被查询的方式。SQL Server中的运动路径和时空查询

让我试着多解释一下。假设我有很多车在地图上移动,我想确定他们是否以及何时在车队中。如果我只存储路径,那么我可以看到他们沿着同一条路走过,但如果他们同时在那里,则不会。我可以存储开始和结束时间,但不会考虑两辆车的速度变化。我想不出任何明显的方式来存储和实现这一点,所以我想我会把问题放在那里,以防在尝试实施解决方案之前我缺少某些东西。所以有谁知道我不知道的事情?

感谢, 安德鲁

回答

0

好要看是什么类型的,你有运动的信息。 如果你有一些表像设置:

车(编号,类型,容量,...)

MovementPoint(VehicleId,经纬度,日期时间,AverageSpeed)

这将允许你查询如果两辆车去同一个点正负5分钟就好这样:

Select * from Vehicle v INNER JOIN MovementPoint mp on mp.VehicleId = v.Id 
WHERE v.Id = @FirstCarID 
AND EXISTS 
    (
    SELECT 1 FROM Vehicle v2 INNER JOIN MovementPoint mp2 on mp2.VehicleId = v2.Id 
    WHERE v2.Id = @SecondCarId 
    AND mp2.Latitude = mp.Latitude AND mp2.Longitude = mp.Longitude 
    AND mp2.DateTime BETWEEN DATEADD(minute,-5,mp.DateTime) AND DATEADD(minute,5,mp.DateTime) 
    ) 

您也可以查询在多个车辆与特定的时间窗口之间的共同多个点。

此外,你可以使查询检查纬度和经度值是在一定的半径范围内。

+0

嗨,谢谢你的回应。这很像我目前正在做的事情。我只是想通过将空间数据类型与某种时间维度结合使用来发现是否有更智能的方法。据我所知,目前尚不支持,但希望有人可能已经想出了一种解决方法,可能使用第二个几何体,其中有时间和距离作为坐标轴。最终的目标是将路径作为处理单位而不是单个点。由于车辆可能在相反方向行驶,因此使用开始和结束时间是不够的。 – andokai 2011-05-19 15:39:43