zoukankan      html  css  js  c++  java
  • GPS轨迹数据可视化的三种途径

    有一阵子没写过博客了,最近因为自己小队申请了项目有并且要帮研究生做一些数据处理的小任务,接触到可视化。这里介绍最近学到的了三种方法。

    第一种是用python。

    这里原理是用matplotlib里面的scatter画散点图,设置好横轴和纵轴的单位距离,然后把横轴和纵轴数据放在两个列表里面就行,具体可以看看matplotlib的官方文档,或者参照这篇博客,且看代码:

    import matplotlib.pyplot as plt
    import os
    
    #定义读取txt的函数 返回一个列表 列表里包含经度
    def get_longitude(filename,i):
        fopen = open(filename,'r')
        longitude = []
        for eachline in fopen:
            group = eachline.split(",")
            longitude.append(float(group[i]))
        fopen.close()
        return longitude
    
    #定义读取txt的函数 返回一个列表 列表里包含纬度
    def get_latitude(filename,i):
        fopen = open(filename,'r')
        latitude = []
        for eachline in fopen:
            group = eachline.split(",")
            latitude.append(float(group[i]))
        fopen.close()
        return latitude
    
    #filename文件路径 size点的大小 color为点的颜色 i为自己定义 如果每一行前面有代表行数的数字,i为1否则i为0
    def draw_image(filename,size,color,i):
        latitude = get_latitude(filename, i)  # 纬度
        longitude = get_longitude(filename, i+1)  # 经度
        plt.scatter(longitude, latitude, size,color)
        plt.ylim(Ymin,Ymax)#Ymin和Ymax表示纵轴的最大值和最小值
        plt.xlim(Xmin,Xmax)#同上
        plt.plot(longitude,latitude,'b')#颜色的设置 'r' 红色 'm' 粉红'g' 绿色 'c' 青色'b' 蓝色 'w' 白色'y' 黄色 'k' 黑色
        plt.show()

    效果如下:


    这里的可视化的容易懂,但有个不好的地方就是背景不是地图,效果不太好。不过python有个库是可以在地图上标点的,叫BaseMap,但我这里没写的原因,,emmm一是当时没时间学,二是这个网上资料不多,不想看英文文档,就没写,这回我有空就去学一学,之后也写一篇博客,这里贴一篇可以参考的,感兴趣的小伙伴可以看看BaseMap


    第二种可视化,就是用百度地图了,百度地图API提供了很多东西,只要注册申请密钥之后就能用。

    值得注意的是,如果你要可视化的是海量数据,个人建议,还是用LBS麻点,百度地图API,在控制台里找数据管理那部分,然后上传数据,不过切记别把上传的格式搞错了,先把百度提供的模板下下来然后自己录入数据生成csv文件,然后再上传。

    上传数据成功后会有一个geotableId,然后就是显示了,这里可以直接在地图上看了


    之前的geotableId在前端页面调用的时候会要用到

    请看代码

    // 百度地图API功能 
    
    var map = new BMap.Map("l-map");          // 创建地图实例 
    
    var point = new BMap.Point(116.403694,39.927552);  // 创建点坐标 
    
    map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别 
    
    var customLayer=new BMap.CustomLayer({ 
    
        geotableId: 30960,//换成你自己的数据表geotableId 
    
        q: '', //检索关键字 
    
        tags: '', //空格分隔的多字符串 
    
        filter: '' //过滤条件 
    
    }); 
    
    map.addTileLayer(customLayer); 
    
    customLayer.addEventListener('hotspotclick',callback);


    如果数据不多,可以用这个例子,多个点示例,不难,这里就不赘述了,效果还不错


    更多的demo还是看百度官方提供的吧demo

    第三种方法,就是地图无忧,如果你不想理睬上面的那些代码,那么,地图无忧可以暂时解决一下你的问题,不过问题就是他不免费,试用是七天。不过他的便利之处就是他只用你上传数据文件(支持Excel和csv),样式等也可以自己随意设置,很方便。送上网址地图无忧,效果也很好


  • 相关阅读:
    codeblocks-17.12mingw-nosetup(mingw编译,绿色免安装版)的下载、安装及设置一
    我的Qt历程1:第一个Qt程序
    单一职责-依赖倒转-代理模式-迭代器模式等
    结合你以往的工作经验谈谈高并发应用的性能优化措施
    如何优化数据库,如何提高数据库的性能?
    在一个千万级的数据库查询中,如何提高查询效率?
    如何提高页面的显示速度?假如一个页面的加载时间是10.89s,你会用什么方式进行优化?
    强制提高网站性能有什么办法
    简述httpModule与HttpHandler
    EntityFramework的效率与ADO.Net的效率哪个高?
  • 原文地址:https://www.cnblogs.com/Yintianhao/p/9157405.html
Copyright © 2011-2022 走看看