首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算人的步行速度

计算人的步行速度
EN

Stack Overflow用户
提问于 2015-02-04 18:10:14
回答 2查看 504关注 0票数 0

我正在使用sql-server计算人类的行走速度.我有一张桌子,像:

代码语言:javascript
复制
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定律计算A点到B点的距离的代码。

代码语言:javascript
复制
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等是原始点和目的地的纬度和经度。然而,我不知道如何动态跟踪速度,表格每分钟更新一次。

谢谢。

我的想法是开始以某种方式声明纬度和经度(包括原点和目的地)。可以这样说:

代码语言:javascript
复制
DECLARE @orig_lat1 blabla
DECLARE @orig_long blabla

目标是在至少一个小时内检查平均速度。因此,如果在任何一个小时内,人们的速度是5-7英里/小时。然后打印人民的名字。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 18:45:05

假设我理解这个问题,你真正需要做的是把表1重新加入到它自己,寻找那些已经走过了符合你标准的距离的人。

我要做一个假设,你在寻找那些以这个速度旅行了一定时间的人。我决定让它成为一个变量,这样你就可以使用你想要的时间。

代码语言:javascript
复制
 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
票数 0
EN

Stack Overflow用户

发布于 2015-02-04 18:52:21

您需要等到第61分钟的条目被添加之后。然后使用:

代码语言:javascript
复制
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

这假设名称都是唯一的,表中的时间以分钟为单位记录,但您希望最后的单位是小时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28328384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档