使用python进行运动轨迹合并:多次骑行跑步轨迹叠加显示

现有各种各样的运动app、运动手表手环以及gps码表等可以用于记录日常骑行或跑步等运动轨迹;但轨迹显示多数只限于显示一天的轨迹,经过搜索只发现一篇文章介绍跑步轨迹叠加方法(查看),根据教程尝试了下还因为perl语言的一些插件没搞定,果断放弃决定自己动手丰衣足食。

先上效果图:

ps:那条长线不是绘制的有问题,的确是单日骑行距离最远的一次,260多公里(开始30多公里由于码表磁铁位置问题只记录了几公里,码表记录233公里)。

济南市附近轨迹,缺个环泰:

卫星地图轨迹:

轨迹绘制方法:

作为一位骑行爱好者,手头刚好有一部捷安特码表。虽然其对应的APP显示的数据一应俱全,但是轨迹显示效果非常一般,如下图所示。作为一名经验丰富的IT从业者,多年的职业训练带来的敏锐直觉告诉我(没错,就是要自吹自擂然后加粗强调一下!):既然它的app能画出轨迹,码表本身必然保存有轨迹的原始数据,而且很有可能是gps的经纬度组成的点的序列。只要能拿到这些轨迹的原始数据,就能根据经纬度画出所有轨迹。

说干就干,首先把码表通过USB连接电脑,尝试一下看能不能访问内部的文件。进展顺利,发现内部有很多如下所示的.fit文件,而且文件名恰好跟自己的运动日期匹配,且文件大小根据对应日期骑行距离的长短大小不一,想必就是轨迹记录源文件了。

尝试用文本编辑器打开上述.fit文件,居然是乱码——很不幸,.fit文件是二进制文件,无法直接使用。经过一系列搜索发现.fit文件可以通过如下命令转换为另一种文本类型的gpx文件。

gpsbabel -i garmin_fit -f 170712051156.fit -o gpx -F 170712051156.gpx

但是目录下一百个文件,逐个文件执行命令并生成对应的gpx文件那得啥时候搞完?

一、gpx文件获取

linux优势立马体现出来,接下来给出获取gpx文件的详细步骤:

1. 进入存放.fit文件的目录,列出目录下的文件;

2. 把所有的fit文件名导入到文件fitfilelist中;

打开fitfilelist查看文件内容,是一百个fit文件名(图中截取部分):

3.使用正则表达式进行替换(正则表达式的使用),上图中的文件内容变成下图所示:

4.通过source fitfilelist执行fitfilelist文件中的一系列gpsbabel命令,等执行完就可以看到目录下多了很多gpx文件

5.创建gpxfile目录并将gpx文件移动到该目录:

查看一下gpx文件的内容,可以看到文件内容主要就是一系列经纬度、高度、时间、速度数据:

至此完成获取gpx文件部分。

二、利用gpx文件画轨迹图

这部分需要一定的python、django、javascript、HTML、CSS语言基础,以及了解高德地图API,看着语言很多,每个知识点只需要了解一点点就好;本文也直接给出了参考代码,不懂的地方可以去参考相关的官方文档。

本人也是一个跟芯片手册打交道的C语言驱动工程师,提到的这些语言基本都是为了画图现学的; 对于完成目标而言,学习难度并不高(能写出商用级别的代码又是另外一回事了)。

调用高德API画轨迹的步骤如下:

1.将第一部分获取到的gpx存放到/root/virenv_python3/django_for_study/mysite/polls/xmls/目录下;

2.django的view.py python文件导入xml解析模块:import xml.etree.ElementTree as ET,并编写函数完成如下功能:

遍历gpx文件,获取每个文件中的经纬度信息保存到变量path_dot中,所有文件的path_dot组成path_list, 通过render函数渲染给模板。

高能预警此处有坑:利用ElementTree模块递归查找gpx格式的xml文件(见上图)时,想通过查找‘trkpt’这个tag获取到每个tag下的‘lat’和‘lon’两个属性,但是无论如何获取不到,后来将tag打印出来发现内容为‘{http://www.topografix.com/GPX/1/0}trkpt‘,即在trkpt前面加了文件中定义的xmlns的内容,将代码改为下图的496行所示就搞定了。

3.模板中通过javascript调用高德地图API加载地图,并为地图添加由一系列经纬度点组成的矢量折线:

3.设置url触发步骤2中的showmap函数,在浏览器中访问该URL,大功告成。现在还有点问题就是轨迹相比地图整体向西偏移了100米左右,我的码表以及小伙伴的码表数据绘制的轨迹偏移差不多。而且多次经过同一个位置的路线基本是叠加在一起的,这样看来码表记录基本准确,在数据基础上整体加个偏移就能跟地图完美重合了;有时间再研究。

原文地址:https://www.cnblogs.com/leituhaomo/p/10165286.html

时间: 2024-10-31 09:30:42

使用python进行运动轨迹合并:多次骑行跑步轨迹叠加显示的相关文章

合并多个python list以及合并多个 django QuerySet 的方法

在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较高的方法是我以前没注意到的.那就是利用 chain 方法来合并多个list. 同样也可以用来合并django 的 QuerySet. #coding:utf-8 from itertools import chain a = [1,2,"aaa",{"name":&qu

高等数学(拉格朗日乘子法):NOI 2012 骑行川藏

[NOI2012] 骑行川藏 输入文件:bicycling.in   输出文件:bicycling.out   评测插件 时间限制:1 s   内存限制:128 MB NOI2012 Day1 Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因此在每天的骑行前设定好目的地.同时合理分配好自己的体力是一件非常重要的事情. 由于蛋蛋装备了一辆非常好的自

深圳到武汉骑行

一生当中,一定要有一次骑行, 一生当中,一定要有说走就走. 不回头,勇往直前, 不放弃,坚持到底. This is my life,这就是我的足迹………… ------05/19/2015 @markfan

国庆第二天骑行记

闲话不说,今天骑行路线 天通苑-----北海公园  往返共40公里以上,早上11:00出发,下午18:00到家. 天通苑--->北海: 沿立汤路南下,(路程与5号线宋家庄方向相同)一直到立水桥(附近有立水桥公园),过立水桥(从桥上过,桥下无路),进入北苑路,一直向南走,至北苑路尽头,直行进入惠新西街,沿惠新西街直行进入樱花园西街,沿着樱花园西街南下直行进入和平里西街,沿着和平里西街直行到达地坛公园,继续向南走到达雍和宫.然后右转向西进入安定门东大街,一路直行向西,经过安定门地铁站到达鼓楼大街地铁

2016.10.04_太湖骑行

骑行 太湖东山,全程28KM 水草肥美的太湖边,鲜嫩的太湖三白,金灿灿的大闸蟹,肆意的玩笑和欢乐 湖边烧烤BBQ 老司机特别会烧烤,肉特别多,而年糕和面包相对难烤一些,到最后很多特别美味的鸡翅都对大家没什么吸引力 露营 洗澡是个问题直到11点才洗完,和同事一起搭帐篷,在帐篷外玩狼人杀 湖边的风很大很冷,睡袋里却特别暖和 太湖边妖风阵阵,伴随着蛐蛐声声,沉醉在大自然的声音中,不舍入睡 启园 皇家园林,康熙下江南登陆的地方.原为席启荪的私家花园,俗称席家花园.是一处始建于民国时代的中国古典园林建筑.

骑行类创业项目骑遇宣告死亡 创始人说硬件创业坑太多(估值3000万,投360万)

新浪科技讯 7月10日下午消息,骑行类创业项目“骑遇”App近日宣布“死亡”,其创始人之一的刘宏亮在朋友圈发布了一张讣告,并深入分析了这家主打智能骑行的创业公司的560天. 在刘宏亮的分析中,他从创业初衷.融资节奏和硬件的坑等几方面总结了骑遇的创业.比如创业一开始很顺,顺利拿到融资,并推出产品开始众筹,但其后低估了硬件创业的难度,并没有预料到资本市场的变化——融资开始变得困难,于是没有正向现金流的公司开始变得困难.刘宏亮还认为,体育产业内的创业速度本来就相对较慢,是骑遇走得太急了.另一方面来说,

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

【携程攻略】千岛湖骑行-其他

[携程攻略]千岛湖骑行-其他 ? 千岛湖绿道骑行,千岛湖沿湖建有骑行车道,可以边骑行边欣赏千岛湖美景.骑行俱乐部20元一小时.千岛湖镇上就近安排车辆.咨询电话13777367764.微信号:yujian20060222

骑行318、 2016.7.24

今天从然乌到波密,123km,其实没有攻略上说的130km,能不能真诚的这些写攻略的,还是忘记了瞎吹上去的,请注明时间XXX仅供参考那才像点样子,现在依然清晰记得从芒康出来之后的路就不停的修啊修···颠簸得我都想哭了···后面的路不停的塌方然后各种修····,但是也是出了芒康后面的路能上3-9,一直到这里,波密今天都是上3-9,然而然乌出发,[可惜没有去转山神医家里,那个田妥镇遇到的广东小伙去了还发朋友圈,羡慕ing],早上就随便买点面包大饼就出发了,告别了老板,跟大瑶子他们出发,不过好像他们又