MySQL如何计算同一张表中同一用户相邻两行之间的地理距离,-查字典问答网
分类选择

来自陈娜的问题

  MySQL如何计算同一张表中同一用户相邻两行之间的地理距离,已知经纬度……数据格式如下,要求出同一个用户的记录中相邻两行的地理距离,注意是计算同一个用户的相邻两行涉及到的距离,感

  MySQL如何计算同一张表中同一用户相邻两行之间的地理距离,已知经纬度……

  数据格式如下,要求出同一个用户的记录中相邻两行的地理距离,注意是计算同一个用户的相邻两行涉及到的距离,感激不尽!

  user_idlatitude(纬度)longitude(经度)

  023.5423646546-114.5423646546

  024.4654562364-114.0975782943

  023.2364465456-113.2364652943

  134.4792402476-118.4578236465

  134.8798675432-117.2364678438

  最好在MysQL中实现,如果效率太低的话,在Matlab实现亦可,

3回答
2020-10-13 07:27
我要回答
请先登录
花秀銮

  实现的话,貌似主要是两个环节

  1先得到用户的两个相邻点的经纬度.

  先把表处理成带唯一标识字段的(uid),便于下一步取出经纬度.表T(uid,user_id,latitude,longitude)

  生成一个视图,取得两个相邻点经纬度.

  createviewvtas

  selectA.user_id,A.latitudelatitudeA,A.longitudelongitudeA

  ,B.latitudelatitudeB,B.longitudelongitudeB

  fromTAinnerjoinTB

  ONA.user_ id=B.user_idANDA.uid

2020-10-13 07:31:22
陈娜

  非常感谢您的回答!

  您的意思是说,我一定要加一个自增的字段uid是吗?如果加的话怎么加啊,直接alter表可以不?还有就是有没有可能在不改变表结构的情况下实现呢?谢谢!

2020-10-13 07:34:34
花秀銮

  1加自增字段是为了生成每两行记录形成的经纬度,可以创建另一个表来做(如果加字段影响原系统的设计)。

  2不改变表结构的话,可以使用动态生成行序号的方法,但必须在一个查询中完成包括计算距离的实现(因为mysql视图暂不支持在视图中使用变量和子查询),可以试试。以下是类似参考

  xx表示那个计算列

  selectA.*,B.*,xx

  from

  (

  select

  (@rownum:=@rownum+1)ASrownum

  ,a

  ,b

  fromtb,(select@rownum:=0)t

  )AINNERJOIN

  (

  select

  (@rownum2:=@rownum2+1)ASrownum

  ,a

  ,b

  fromtb,(select@rownum2:=0)t

  )B

  ONA.a=B.aANDA.rownum

2020-10-13 07:37:28

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •