作业帮 > 数学 > 作业

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

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/29 19:30:53
MySQL如何计算同一张表中同一用户相邻两行之间的地理距离,已知经纬度……
数据格式如下,要求出同一个用户的记录中相邻两行的地理距离,注意是计算同一个用户的相邻两行涉及到的距离,感激不尽!
user_id latitude(纬度) longitude(经度)
0 23.5423646546 -114.5423646546
0 24.4654562364 -114.0975782943
0 23.2364465456 -113.2364652943
1 34.4792402476 -118.4578236465
1 34.8798675432 -117.2364678438
最好在MysQL中实现,如果效率太低的话,在Matlab实现亦可,
实现的话,貌似主要是两个环节
1 先得到用户的两个相邻点的经纬度.
先把表处理成带唯一标识字段的(uid),便于下一步取出经纬度.表T(uid,user_id,latitude,longitude)
生成一个视图,取得两个相邻点经纬度.
create view vt as
select A.user_id,A.latitude latitudeA,A.longitude longitudeA
,B.latitude latitudeB,B.longitude longitudeB
from T A inner join T B
ON A.user_id=B.user_id AND A.uid
再问: 非常感谢您的回答!
您的意思是说,我一定要加一个自增的字段uid是吗?如果加的话怎么加啊,直接alter表可以不?还有就是有没有可能在不改变表结构的情况下实现呢?谢谢!
再答: 1 加自增字段是为了生成每两行记录形成的经纬度,可以创建另一个表来做(如果加字段影响原系统的设计)。
2 不改变表结构的话,可以使用动态生成行序号的方法,但必须在一个查询中完成包括计算距离的实现(因为mysql视图暂不支持在视图中使用变量和子查询),可以试试。以下是类似参考
xx 表示那个计算列

select A.*,B.*, xx
from
(
select
(@rownum := @rownum + 1 ) AS rownum
,a
,b
from tb,(select @rownum:=0) t
) A INNER JOIN
(
select
(@rownum2 := @rownum2 + 1 ) AS rownum
,a
,b
from tb,(select @rownum2:=0) t
) B
ON A.a=B.a AND A.rownum < B.rownum