pyecharts:绘制动态轨迹图(自动获取指定位置坐标,并绘制动态轨迹图)

引言

  • 这几天想要绘制骑行的动态轨迹图,想到了用pyecharts来搞一下,于是有了本文
  • 在网上查了半天,发现pyecharts带你领略动态轨迹图的风骚不错,网上其他博客大多也是这个的翻版
  • 但是这个有个问题,就是代码中用到的数据总是不那么好获取,其他博客甚至没有给出数据获取链接,所以想要快速实现一个小demo,变得比较繁琐。
  • 于是,结合百度地图API和上面提到的博客代码,有了本篇文章:可以自动获取指定地方的经纬度,并绘制动态轨迹图
  • 注意事项:
    • 我的本意是想绘制我们村附近的动态轨迹图,结果地图精度显示不到,有知道怎么搞的小伙伴,欢迎讨论
  • 相关源码:pyecharts-showDynamicTrajectory 欢迎Star

安装

代码

from urllib.request import urlopen, quote
import json

from pyecharts import GeoLines, Style


def get_location_coordinate(location_name):

    api_url = 'http://api.map.baidu.com/geocoding/v3/?address='
    api_url = f'{api_url}{quote(location_name)}&output=json&ak=你的ak'
    result = urlopen(api_url)
    result = json.loads(result.read().decode())['result']['location']
    return result['lng'], result['lat']


# 参考小文的
def plot_geolines(plotting_data, geo_cities_coords):
    # 设置画布的格式
    style = Style(title_pos="center",
                  width=1000,
                  height=800)

    # 部分地理轨迹图的格式
    style_geolines = style.add(is_label_show=True,
                               line_curve=0.3,  # 轨迹线的弯曲度,0-1
                               line_opacity=0.6,  # 轨迹线的透明度,0-1
                               geo_effect_symbol='plane',  # 特效的图形,有circle,plane,pin等等
                               geo_effect_symbolsize=10,  # 特效图形的大小
                               geo_effect_color='#7FFFD4',  # 特效的颜色
                               geo_effect_traillength=0.1,  # 特效图形的拖尾效果,0-1
                               label_color=['#FFA500', '#FFF68F'],  # 轨迹线的颜色,标签点的颜色,
                               border_color='#97FFFF',  # 边界的颜色
                               geo_normal_color='#36648B',  # 地图的颜色
                               label_formatter='{b}',  # 标签格式
                               legend_pos='left')

    # 作图
    geolines = GeoLines('出行轨迹图', **style.init_style)
    geolines.add('从北京出发',
                 plotting_data,
                 maptype='china',  # 地图的类型,可以是省的地方,如'广东',也可以是地市,如'东莞'等等
                 geo_cities_coords=geo_cities_coords,
                 **style_geolines)

    # 发布,得到图形的html文件
    geolines.render('地理轨迹图.html')


if __name__ == '__main__':
    location_name_list = ['北京', '郑州', '盐城', '高雄', '广州', '三亚', '成都', '拉萨', '乌鲁木齐', '银川',
                          '呼和浩特', '漠河', '哈尔滨', '长春', '沈阳', '北京']
    geo_cities_coords = {}
    for location in location_name_list:
        print(location)
        lat_long = get_location_coordinate(location)
        geo_cities_coords[location] = list(lat_long)

    plotting_data = []
    for i in range(len(location_name_list)):
        if i < len(location_name_list)-1:
            plotting_data.append((location_name_list[i], location_name_list[i+1]))

    # 绘制动态图
    plot_geolines(plotting_data, geo_cities_coords)
    print('ok,去浏览器看看吧')

效果(GifCam录制)

相关资料

posted @ 2020-06-06 10:27  Danno  阅读(12447)  评论(8编辑  收藏  举报