Пути перемещения и пространственно-временные запросы в SQL Server - PullRequest
2 голосов
/ 18 мая 2011

Эй, я пытаюсь найти наилучший способ хранения траекторий движения, а затем узнать, как их можно запрашивать.

Позвольте мне попытаться объяснить немного больше.Скажем, у меня есть много машин, движущихся по карте, и я хочу определить, когда и когда они в колонне.Если я храню только пути, то вижу, что они шли по одной и той же дороге, но не в том случае, если они были там в одно и то же время.Я могу сохранить время начала и окончания, но это не будет учитывать изменения скорости двух автомобилей.Я не могу придумать никакого очевидного способа сохранить и достичь этого, поэтому я решил поставить вопрос на случай, если что-то упущу, прежде чем пытаться реализовать решение.Так кто-нибудь знает что-нибудь, чего я не знаю?

Спасибо, Эндрю

1 Ответ

0 голосов
/ 18 мая 2011

Ну, это зависит от того, какой тип информации о движении у вас есть.Если у вас есть настроенные таблицы, например:

Автомобиль (идентификатор, тип, емкость, ...)

MovementPoint (идентификатор автомобиля, широта, долгота, дата-время, средняя скорость)

Это позволит вам запрашивать, если две машины едут в одну и ту же точку плюс или минус 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)
    )

Вы также можете запросить несколько общих точек для нескольких транспортных средств с определенными временными окнами.

Также вы можете сделать так, чтобы запрос проверял значения широты и долготы в пределах определенного радиуса друг от друга.

...