作者:作者小dull鸟


大家周末好啊,今天给大家带来一篇3D个人足迹图制作教程

下面给大家详细介绍一下制作步骤:

一、准备足迹城市数据

因为本次用pyecharts画3D足迹图的数据接口是列表形式:

python 目标轨迹 python轨迹地图_python 3d绘图

所以我们要把城市的经纬度信息找出来,如果城市比较少可以手动搜索填写,如果城市比较多的话可以做个小爬虫程序,这里给大家推荐1个数据接口

https://apis.map.qq.com/jsapi?qt=geoc&addr=城市名字&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi

https://apis.map.qq.com/jsapi?qt=geoc&addr=城市名字&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi

返回数据如下:

python 目标轨迹 python轨迹地图_ci_02

我们可以先把足迹城市放入csv表格中:

python 目标轨迹 python轨迹地图_python 目标轨迹_03

import requests
import csv
import json
city_points=[]
with open('足迹城市.csv','r') as f:
    city=csv.reader(f)
    for i in city:
        city_point = []
        for j in i:
            url='https://apis.map.qq.com/jsapi?qt=geoc&addr={0}' \
                '&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi'.format(j)
            response=requests.get(url)
            text=json.loads(response.text)
            city_point.append([text['detail']['pointx'],text['detail']['pointy']])
        city_points.append(city_point)

import requests
import csv
import json
city_points=[]
with open('足迹城市.csv','r') as f:
    city=csv.reader(f)
    for i in city:
        city_point = []
        for j in i:
            url='https://apis.map.qq.com/jsapi?qt=geoc&addr={0}' \
                '&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi'.format(j)
            response=requests.get(url)
            text=json.loads(response.text)
            city_point.append([text['detail']['pointx'],text['detail']['pointy']])
        city_points.append(city_point)

可以返回足迹城市的经纬度数据,直接用于该3D足迹图数据接口

二.画3D足迹图

画足迹图代码如下:

c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(72,61,139)",        #地图背景颜色
            opacity=100,                   #图形透明度
            border_width=0.8,              #边界宽度
            border_color="rgb(80,100,0,0)",#边界颜色
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=True,                  #显示各省名字
            text_style=opts.TextStyleOpts(
                color=" #DC143C", font_size=9, background_color="rgba(75,0,130,0)"
            ),
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",            #主光源的颜色
            main_intensity=1.2,           #主光源的强度
            is_main_shadow=True,          #是否投射阴影
            main_alpha=55,                #主光源上下旋转角度
            main_beta=10,                 #主光源左右旋转角度
            ambient_intensity=0.3,        #环境光的强度
        ),

    )
    .add(
        series_name="",
        data_pair=city_data,   #足迹城市经纬度数据
        type_=ChartType.LINES3D,  #地图类型
        effect=opts.Lines3DEffectOpts(   #轨迹特效设置
            is_show=True,
            period=8,            #尾迹特效的周期
            trail_width=8,       #尾迹特效的宽度
            trail_length=1,      #尾迹特效的长度
            trail_color="#DC143C",  #尾迹特效的颜色
            trail_opacity=1,     #尾迹特效的不透明度
            constant_speed=8
        ),
        linestyle_opts=opts.LineStyleOpts(is_show=True, color="#3CB371", opacity=0.5),  #轨迹特效实线设置,设置透明度opacity为0.5
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="3D足迹城市图"))
)
c.render_notebook()

c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(72,61,139)",        #地图背景颜色
            opacity=100,                   #图形透明度
            border_width=0.8,              #边界宽度
            border_color="rgb(80,100,0,0)",#边界颜色
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=True,                  #显示各省名字
            text_style=opts.TextStyleOpts(
                color=" #DC143C", font_size=9, background_color="rgba(75,0,130,0)"
            ),
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",            #主光源的颜色
            main_intensity=1.2,           #主光源的强度
            is_main_shadow=True,          #是否投射阴影
            main_alpha=55,                #主光源上下旋转角度
            main_beta=10,                 #主光源左右旋转角度
            ambient_intensity=0.3,        #环境光的强度
        ),

    )
    .add(
        series_name="",
        data_pair=city_data,   #足迹城市经纬度数据
        type_=ChartType.LINES3D,  #地图类型
        effect=opts.Lines3DEffectOpts(   #轨迹特效设置
            is_show=True,
            period=8,            #尾迹特效的周期
            trail_width=8,       #尾迹特效的宽度
            trail_length=1,      #尾迹特效的长度
            trail_color="#DC143C",  #尾迹特效的颜色
            trail_opacity=1,     #尾迹特效的不透明度
            constant_speed=8
        ),
        linestyle_opts=opts.LineStyleOpts(is_show=True, color="#3CB371", opacity=0.5),  #轨迹特效实线设置,设置透明度opacity为0.5
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="3D足迹城市图"))
)
c.render_notebook()


根据读者朋友要求,我把画图过程中的注释都加上了,方便理解,大家可以根据自己的爱好调整图形效果。

python 目标轨迹 python轨迹地图_python 3d绘图_04

python 目标轨迹 python轨迹地图_ci_05