我拿到的需求是这样的, 需要在地图上将我司船舶的轨迹展示出来. 听起来很简单, 一开始我也是这样想的. 通过一些 BI 工具应该可以轻松实现, 比如这样的:
仔细观察可以看到, 这种轨迹是两点之前的弧线, 适合用来展示航空的航线或者起点终点方向类型轨迹, 而加载了插件后发现, 其功能是无法支持船舶轨迹的数据的, 所以该插件被 pass 掉了.
百度已经无法找到合适的资源了, 于是我又转向了微信公众号搜索, 我发现了 folium 这个地图可视化的库. 它的可视化地图让人着迷, 也支持不同的瓦片 (高德, 谷歌, 也有内置的) 风格供你选择, 可以在地图上描绘点, 圈, 直线, 热力图等风格的图片, 但是如何将轨迹在地图上描绘出来, 不论是如何搜索技术文章, 也无论是看官方文档, 能实现轨迹的只能通过点来描绘, 当点足够密集, 就相当于轨迹了, 类似于中国台风网这种图的样式, 如下图.
但现实情况是, 我们船舶的轨迹是没有如此频繁的轨迹数据的, 那么 folium 包也没有办法实现我的需求. 终于, 功夫不负有心人, plotly 这个可视化的包被我找到了.
1, 实践之轨迹地图
轨迹地图使用 plotly 包, 具体脚本如下, 数据为自己模拟数据.
- import os
- import plotly.graph_objects as go
- import plotly as py
- url = r'D:\working_directory\task \ 文章 \ shipping_line.html'
- mapbox_access_key = '需要你自己去 mapbox 的网站去申请一个账号'
- style = 'streets'
- # 采用的风格为 streets 类型
- fig = go.Figure()
- color_map = ['#7bd3f6', '#bcbd22', '#17becf','#d62728']
- lat_li = []
- lng_li = []
- for item in [(122.180204,30.806457),(123.256865,29.762908),(123.366728,28.631261),(122.048368,26.350981),(120.048857,24.705378),(119.060087,22.835386),(119.543486,19.433918),(119.960966,16.276336),(116.159697,11.413759),(110.183134,5.067372),(105.173368,0.064226),(101.833525,1.909575),(101.833525,1.909575),(101.833525,1.909575),(88.122587,3.840643),(80.300322,5.154913),(76.433134,7.338996),(71.247587,13.900433),(63.425322,22.246862),(56.394072,25.857701)]:
- lng_li.append(item[0])
- lat_li.append(item[1])
- fig.add_trace(go.Scattermapbox(
- name='vessel',
- mode='markers+lines',
- lon=lng_li,
- lat=lat_li,
- marker={'size': 2, 'color': color_map[3]},
- showlegend=False
- ))
- fig.update_layout(
- margin={'l': 0, 't': 0, 'b': 0, 'r': 0}
- , mapbox={
- 'center': {'lon': 90, 'lat': 8},
- 'zoom': 1
- , 'style': style
- , 'accesstoken': mapbox_access_key}
- )
- if os.path.isfile(url):
- os.remove(url)
- py.offline.plot(fig, filename=url, auto_open=False)
- # 保存为 HTML 文件
效果图如下:
2, 最终制作出来的效果图
就这样, 对大屏各个模板进行打磨, 我们最终效果图是这样的.
3,20 个大屏的由来
来源: https://blog.csdn.net/weixin_38037405/article/details/122367702