最近几个月跑了不少步,试用了很多不同的APP,导致轨迹、跑量什么的各自为政,因此萌生了写个程序把所有跑步的轨迹都画在一张地图上的想法。

第一步,先把各个地方能导出轨迹的都导出来。看了一下.FIT .TPX .GPX中,以GPX文件结构最简单,下面就是一段.gpx文件的记录点格式,于是把轨迹都导成.gpx文件。

GPX文件数据点

第二步,读取GPX文件数据

人生苦短,我用Python——用Python读入这些GPX轨迹信息,处理后再画在地图上,应该是最容易的做法了。Python本身接近自然语言,丰富的第三方库让写程序就像用英文和计算机对话一样。

直接使用Python自带的xml库完成读取,注意要剔除lat和lon为0的数据点,因为GPX是用这种方法来标记暂停的。

import xml.dom.minidom as xdom

gpxPath = 'test.gpx'

dom_tree = xdom.parse(gpxPath)

collection = dom_tree.documentElement

trkpts = collection.getElementsByTagName("trkpt")

lats, lons = [], []

for trkpt in trkpts:

lat = trkpt.getAttribute("lat")

lon = trkpt.getAttribute("lon")

if lat=='0' or lon=='0':

continue

lats.append(float(lat))

lons.append(float(lon))

datas = {'lat': lats, 'lon': lons}

第三步,将数据画在地图上

前面进行的一切顺利,没想到在画地图的时候卡住了。

建筑师出身,对图面的要求不能太低。而Python的地图库里面几乎没有好看的地图,而且使用起来都颇为麻烦。在尝试了Basemap、Plotly、Folium之后,最终选择使用高德地图,方便好用。

高德地图JavaScrip API快速入门

在正式开始开发地图应用之前,您需要做如下几步:

引入高德地图JavaScript API文件:

创建地图容器

在页面body里你想展示地图的地方创建一个div 容器,并指定id标识:

指定容器大小

按照需要设定地图容器的大小,确保大小合适,比如用CSS这样设置它:

#container {width:300px; height: 180px; }

接下来要写个网页用来读取本地的数据文件。因为之前已经使用Python完成了GPX数据读取,所以先改写一下,输出JS可以方便读取的JSON文件。

import os

fileDir, fileName = os.path.split(gpxPath)

jsonDir = os.path.join(fileDir, 'jsons')

if not os.path.exists(jsonDir):

os.mkdir(jsonDir)

jsonPath = os.path.join(jsonDir, fileName) + '.json'

with open(jsonPath, 'w') as f:

f.write(json.dumps(datas))

同时为了方便的处理多条数据,把上面Python的部分写成一个procXml函数,然后在命令行中将要转换的文件作为参数传入。

import sys

def main():

if len(sys.argv) < 2:

print 'Specify the gpx file path'

return

fileList = sys.argv[1:]

for p in fileList:

if os.path.isfile(p):

gpxPath = os.path.abspath(p)

print 'Processing'+str(gpxPath)

try:

procXml(p)

print 'Coresponding JSON file was generated.'

except:

print '=====Somthing was wrong!====='

if __name__ == '__main__':

main()

保存为gpx2json.py,将从跑步软件中导出的GPX文件都放在同目录下的gpxs文件夹中,然后在命令行中输入以下命令进行批量转换:

python gpx2json.py gpxs/*

轨迹处理完毕后的json文件会放到gpxs/json/下,马上就要读取本地的json文件并调用高德地图的API画轨迹了,已经接近完成了呢。

-*- iRunMap -*-

保存为index.html。框架已经搭好,就差最后的drawPath.js了。

看了一下高德的API,mapStyle选择dark,黑色的背景地图非常酷炫。为了更清楚的显示轨迹信息,直接隐掉路网、建筑等图层,features设置为bg(纯背景)。用HTML5提供的ObjectURL获得本地文件的地址。

'use strict';

var map = new AMap.Map('container', {

zoom: 12,

center: [121, 31],

mapStyle: 'dark',

features: ['bg']

});

$(document).ready(function(){

$('#clear').on('click', (function(){

map.clearMap();

}));

$('#file-upload').on('change', function(){

for(var i=0,f;f=this.files[i];i++){

var fPath = window.URL.createObjectURL(f);

$.getJSON(fPath, function(data){

var lineArr = new Array();

for(var i=0;i

lineArr.push(new AMap.LngLat(data.lon[i],data.lat[i]));

}

var polyline =new AMap.Polyline({

path: lineArr,

strokeColor: "#00ff00",

strokeOpacity: 0.5,

strokeWeight: 3,

strokeStyle: "solid",

});

polyline.setMap(map);

});

}

});

});

Duang的一下就完成了!打开文件上传所有GPX文件,一直在复旦大学和上海西南某高校附近徘徊呢,真是冤家。

7月-9月的跑步轨迹.png

查看源码

python出行轨迹记录软件_看看过去跑过哪些地方,用Python和高德API绘制跑步轨迹...相关推荐

  1. 高德Api绘制线路轨迹

    绘制线路轨迹可通过定时器画Polyline实现效果,但是高德api中有moveAlong方法,实现起来更简单,下面是示例. let marker = new AMap.Marker({map: map ...

  2. 解决高德地图锁屏黑屏定位不更新,高德地图绘制定位轨迹,高德定位判断定位停留点,高德地图将所有坐标绘制在可视区域内

    本文章主要介绍 高德定位锁屏黑屏定位不更新的问题. 实现流程是:程序开始阶段正常执行定位,注册监听锁屏监听,唤醒cpu监听,当锁屏 广播每2秒发起一起单次定位唤醒.源码如下: package net. ...

  3. python科研用哪个软件_科研画图都用什么软件?

    笔者曾分别或同时使用过Excel.Matlab.Origin.GMT画过图.现在只使用Python的Matplotlib和Basemap模块,完全取代了上面所有软件画图. matplotlib,是最经 ...

  4. python好用的软件_【分享|10款超好用的辅助Python的软件,初学者请查收!】- 环球网校...

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注Py ...

  5. python写抢火车票软件_用 Python 代码自动抢火车票

    市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单.下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事. 该代码仅供参考,主要用于大家沟通 ...

  6. python处理音频的软件_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  7. python图片识别验证码软件_基于python图片识别工具(图片识别,车牌,PDF,验证码)...

    先上图  不多说. 对于一般的用户来说识别率还是能达到百分之90以上. 已经打包成exe文件.windows用户可以直接使用.要软件的加我QQ python代码: # -*- coding: UTF- ...

  8. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...

    原标题:如何利用并发性加速你的python程序(二):I/O 绑定程序加速 雷锋网 AI 科技评论按,本文是工程师 Jim Anderson 分享的关于「通过并发性加快 python 程序的速度」的文 ...

  9. python初学者用什么软件_初学者编写python用什么软件

    https://www.php.cn/python-tutorials-444073.html 以下是常用的几款Python代码编辑器和Python集成开发工具. 一.Python代码编辑器 1. S ...

最新文章

  1. react 组件的属性
  2. 高清HDMI接口保护用TVS二极管阵列选型
  3. Java工程师知识图谱
  4. ubuntu 12.04 php5.3 降级为 5.2
  5. Jdk14 都要出了,Jdk9 的新特性还不了解一下?
  6. 有效ip地址_计算机等级考试详解:用IP地址及域名访问web网站的正确说法
  7. 通过谓词查找第一个元素
  8. Oracle and MS SQL Server 2005
  9. SWAT模型在水文水资源、面源污染模拟中的实践技术
  10. px4仿真无法起飞问题(Failsafe enabled: no datalink)
  11. 几种搜索引擎算法 SEO
  12. tumblr_如何制作私人Tumblr博客
  13. HDU-1869 六度分离
  14. 几种常见的水下路由算法介绍
  15. Trading Convexity for Scalability
  16. Bryntum Gantt 5.2.2 New-Crack
  17. 打造APP引导页3D切换特效
  18. 指派问题——匈牙利法
  19. 记录一次重装win10系统后,没有1920*1080分辨率的问题
  20. 【停课不停学】CSDN学院奉绵薄之力,为程序员做点公益!

热门文章

  1. 中国.net域名网站的“前世今生”,那些年的光辉
  2. 可鸡的三大充要条件来了!!
  3. Matlab中filter.m和filtfilt.m函数C语言实现
  4. 许知远在吴晓波《预见2019——国运70》2018年年终演讲上的精华
  5. 51单片机控制的自动感应调光、坐姿矫正智能台灯
  6. 7-4 计算存款利息(10 分)
  7. 135编辑器生成html,135编辑器如何使用动态样式
  8. 文化先锋A6客户端自动登陆
  9. NVIDIA Jetson官网资料整理
  10. 连目标管理都不会,还谈什么目标?