在Python中实现空间移动的动画
Python中实现空间移动动画的方法
如何将起点-终点矩阵转化为迷人的动画

空间数据在本质上是可视的,在Python中用于可视化(地理)空间数据的进展使得快速绘制各种形状和形式的地图非常容易。甚至可以轻松创建图表和简单地图的动画。特别是使用静态多边形和变化的颜色的分级地图,已经有现成的函数可用。
然而,当涉及到移动数据和线条动画的时候,任务就变得有些繁琐了。在这里,我将尝试给出一个示例,展示如何使用Python解决动态移动数据的动画化。
初始数据
首先,我们需要一些带有时间戳的(线性)数据;在本例中,我将使用挪威奥斯陆市自行车共享系统的自行车共享数据。这些数据在挪威政府开放数据许可证(NLOD 2.0)/开放政府许可证下公开可用,可以从奥斯陆市自行车共享网站主页获取。
import geopandas as gpdimport pandas as pd# 从csv文件导入数据data = pd.read_csv("https://data.urbansharing.com/oslobysykkel.no/trips/v1/2023/10.csv")data = data[['started_at','ended_at','duration', 'start_station_latitude', 'start_station_longitude','end_station_latitude', 'end_station_longitude']]# 将数据子集化为一天的数据data['start_day'] = data['started_at'].apply(lambda x: int(x[8:11]))data = data[data["start_day"]==day]data
由于数据由行程的起点和终点组成,我们需要在这些点之间创建一条线,为此我们可以使用NetworkX中Dijkstra算法的实现。
创建移动线条
在我们创建移动线条之前,我们需要一个街道网络,可以用它来进行最短路径计算。使用osmnx
,我们可以从OpenStreetMap中获取我们感兴趣的区域的自行车网络。我们将使用自行车行程数据的范围作为我们的研究区域。
import osmnx as ox# 从站点创建一个GeoDataFrameinitial_data = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data['start_station_longitude'],data['start_station_latitude']),crs="EPSG:4326")# 获取总边界total_bounds =…