python出行轨迹记录软件_看看过去跑过哪些地方,用Python和高德API绘制跑步轨迹...
最近几个月跑了不少步,试用了很多不同的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绘制跑步轨迹...相关推荐
- 高德Api绘制线路轨迹
绘制线路轨迹可通过定时器画Polyline实现效果,但是高德api中有moveAlong方法,实现起来更简单,下面是示例. let marker = new AMap.Marker({map: map ...
- 解决高德地图锁屏黑屏定位不更新,高德地图绘制定位轨迹,高德定位判断定位停留点,高德地图将所有坐标绘制在可视区域内
本文章主要介绍 高德定位锁屏黑屏定位不更新的问题. 实现流程是:程序开始阶段正常执行定位,注册监听锁屏监听,唤醒cpu监听,当锁屏 广播每2秒发起一起单次定位唤醒.源码如下: package net. ...
- python科研用哪个软件_科研画图都用什么软件?
笔者曾分别或同时使用过Excel.Matlab.Origin.GMT画过图.现在只使用Python的Matplotlib和Basemap模块,完全取代了上面所有软件画图. matplotlib,是最经 ...
- python好用的软件_【分享|10款超好用的辅助Python的软件,初学者请查收!】- 环球网校...
[摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注Py ...
- python写抢火车票软件_用 Python 代码自动抢火车票
市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单.下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事. 该代码仅供参考,主要用于大家沟通 ...
- python处理音频的软件_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python图片识别验证码软件_基于python图片识别工具(图片识别,车牌,PDF,验证码)...
先上图 不多说. 对于一般的用户来说识别率还是能达到百分之90以上. 已经打包成exe文件.windows用户可以直接使用.要软件的加我QQ python代码: # -*- coding: UTF- ...
- python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...
原标题:如何利用并发性加速你的python程序(二):I/O 绑定程序加速 雷锋网 AI 科技评论按,本文是工程师 Jim Anderson 分享的关于「通过并发性加快 python 程序的速度」的文 ...
- python初学者用什么软件_初学者编写python用什么软件
https://www.php.cn/python-tutorials-444073.html 以下是常用的几款Python代码编辑器和Python集成开发工具. 一.Python代码编辑器 1. S ...
最新文章
- react 组件的属性
- 高清HDMI接口保护用TVS二极管阵列选型
- Java工程师知识图谱
- ubuntu 12.04 php5.3 降级为 5.2
- Jdk14 都要出了,Jdk9 的新特性还不了解一下?
- 有效ip地址_计算机等级考试详解:用IP地址及域名访问web网站的正确说法
- 通过谓词查找第一个元素
- Oracle and MS SQL Server 2005
- SWAT模型在水文水资源、面源污染模拟中的实践技术
- px4仿真无法起飞问题(Failsafe enabled: no datalink)
- 几种搜索引擎算法 SEO
- tumblr_如何制作私人Tumblr博客
- HDU-1869 六度分离
- 几种常见的水下路由算法介绍
- Trading Convexity for Scalability
- Bryntum Gantt 5.2.2 New-Crack
- 打造APP引导页3D切换特效
- 指派问题——匈牙利法
- 记录一次重装win10系统后,没有1920*1080分辨率的问题
- 【停课不停学】CSDN学院奉绵薄之力,为程序员做点公益!