运动路径& SQL Server中的时空查询

时间:2011-05-17 23:40:02

标签: sql-server spatial temporal

嘿,所以我试图找出存储移动路径的最佳方法,然后再查询它们的查询方式。

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

谢谢, 安德鲁

1 个答案:

答案 0 :(得分:0)

这取决于您拥有的运动信息类型。 如果你有一些表设置如下:

车辆(Id,类型,容量,......)

MovementPoint(VehicleId,Latitude,Longitude,DateTime,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)
    )

您还可以查询具有特定时间窗的多辆车之间的多个共同点。

此外,您可以查询检查纬度和经度值是否在彼此的某个半径范围内。