Python中如何根据一组经纬度数据(约8000行)绘制轨迹图(航线图)?
1、个人尝试用了 folium 去画,效果还可以,但是 osm 资源在国外,出个图都要等 1 分钟,实在等不起
2、Pyecharts 的话轨迹图,好像只需要起点和终点就可以,但是中间的数据没用到,造成轨迹与实际上差距很大
Python中如何根据一组经纬度数据(约8000行)绘制轨迹图(航线图)?
10 回复
js 的话,在地图上划过类似的,leaflet 或者 d3,py 不懂了
用matplotlib的plot函数配合Basemap或Cartopy就能画。8000个点不算多,直接画就行。
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
# 读取数据,假设CSV文件包含'lon'和'lat'列
df = pd.read_csv('coordinates.csv')
# 创建地图
plt.figure(figsize=(12, 8))
m = Basemap(projection='merc',
llcrnrlat=df['lat'].min()-5, urcrnrlat=df['lat'].max()+5,
llcrnrlon=df['lon'].min()-5, urcrnrlon=df['lon'].max()+5,
resolution='i')
m.drawcoastlines()
m.drawcountries()
m.fillcontinents(color='lightgray', lake_color='lightblue')
# 转换经纬度为地图坐标
x, y = m(df['lon'].values, df['lat'].values)
# 绘制轨迹
m.plot(x, y, 'b-', linewidth=1, alpha=0.7) # 蓝色轨迹线
m.plot(x, y, 'ro', markersize=2, alpha=0.5) # 红色点标记
plt.title('Flight Trajectory')
plt.show()
如果Basemap安装有问题,可以用Cartopy替代:
import cartopy.crs as ccrs
import cartopy.feature as cfeature
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.add_feature(cfeature.LAND, color='lightgray')
ax.add_feature(cfeature.OCEAN, color='lightblue')
ax.plot(df['lon'], df['lat'], 'b-', linewidth=1, alpha=0.7, transform=ccrs.Geodetic())
ax.plot(df['lon'], df['lat'], 'ro', markersize=2, alpha=0.5, transform=ccrs.Geodetic())
plt.title('Flight Trajectory')
plt.show()
用pandas读数据,matplotlib画图,basemap或cartopy加地图背景。
用百度地图或者高德地图的 api 会直接显示
注意的 火星坐标系转换的问题
这话题真的适合用 js 解决,就是添加折线功能。只是实现折现,参考百度地图的折线覆盖物
参考 http://lbsyun.baidu.com/jsdemo.htm#c1_1
直接把点显示到地图上连起来,是一条折现,不平滑,数据量大了还有性能问题
可以先调用下轨迹纠偏接口,纠偏后能去重去噪绑路,最终连起来的线比较美观
pyecharts 看下
echarts 有一些关于地图的 demo 还不错哦
等等 3 维的哦?!
mapboxgl-jupyter 其他都是渣渣
cartopy 试试? folium 说是设计目标就是用网络资源。要不试试自己给 folium 做个缓存?

