我正在使用sql-server来计算人的步行速度。我有一张表:
Name time(in min) latitude longitude
Billy 1 x1 y1
Billy 2 x2 y2
...
Jim 1 k1 m1
Jim 2 k2 m2
...
Kate 1 l1 n1
Kate 2 l2 n2
我想选择一些小时的平均速度在5-7米/小时之间的人。这是我使用Haversin'law计算从A点到B点的距离的代码。
SELECT Name,
3956 * 2 * ASIN(SQRT( POWER(SIN((orig_lat1 - abs(dest_lat2)) * pi()/180 / 2), 2)+ COS(orig_longitude * pi()/180 ) * COS(abs(dest_lat2) * pi()/180) * POWER(SIN((orig_longitude - dest_longitude) * pi()/180 / 2), 2) ))
AS distance
From Table1
Where distance>5 and distance<7
orig_lat1,dest_lat2等是原始点和目的地的纬度和经度。但是,我不知道如何动态跟踪速度,表每分钟更新一次。
感谢。
我的想法是开始以某种方式宣布纬度和经度(原始和目的地)。说:
DECLARE @orig_lat1 blabla
DECLARE @orig_long blabla
目标是至少在一小时内检查平均速度。因此,如果在任何时间人们的速度是5-7英里/小时。然后打印人名。
答案 0 :(得分:0)
假设我理解你真正需要做的是将表1连接到自己,寻找已经走过符合你标准的距离的人。
我打算假设你正在寻找以这种速度旅行一段时间的人。我决定把它变成一个变量,这样你就可以玩你想要抽样的时间。
declare @duration int
set @duration = 1
SELECT a.Name
,a.lat
,a.long
,b.lat
,b.long
,3956 * 2 * ASIN(SQRT( POWER(SIN((a.lat - abs(b.lat)) * pi()/180 / 2), 2)
+ COS(a.long * pi()/180 ) * COS(abs(b.long) * pi()/180)
* POWER(SIN((a.long - b.long) * pi()/180 / 2), 2) ))
AS distance
From Table1 a
inner join Table1 b
on a.personID = b.personID
and a.time = b.time + @duration
Where 3956 * 2 * ASIN(SQRT( POWER(SIN((a.lat - abs(b.lat))
* pi()/180 / 2), 2)+ COS(a.long * pi()/180 ) * COS(abs(b.long)
* pi()/180) * POWER(SIN((a.long - b.long) * pi()/180 / 2), 2) ))
between 5 and 7
答案 1 :(得分:0)
您需要等到第61分钟的参赛作品被添加。然后使用:
SELECT NAME FROM
(SELECT Name,
3956 * 2 * ASIN(SQRT( POWER(SIN((orig_lat1 - abs(dest_lat2)) * pi()/180 / 2), 2)+ COS(orig_longitude * pi()/180 ) * COS(abs(dest_lat2) * pi()/180) * POWER(SIN((orig_longitude - dest_longitude) * pi()/180 / 2), 2) ))
AS distance
From Table1 Where time=1) F
LEFT OUTER JOIN
(SELECT Name,
3956 * 2 * ASIN(SQRT( POWER(SIN((orig_lat1 - abs(dest_lat2)) * pi()/180 / 2), 2)+ COS(orig_longitude * pi()/180 ) * COS(abs(dest_lat2) * pi()/180) * POWER(SIN((orig_longitude - dest_longitude) * pi()/180 / 2), 2) ))
AS distance
From Table1 where time=61) S
ON F.Name=S.Name
WHERE (F.Distance + S.Distance) BETWEEN 5 AND 7
这假设名称都是唯一的,并且表格中的时间以分钟为单位记录,但您希望最终单位为小时。