用python读取GPS串口数据并将其绘制成轨迹图
时间: 2024-11-06 11:25:07 浏览: 33
使用Python串口实时显示数据并绘图的例子
在Python中读取GPS串口数据并绘制轨迹图通常需要结合`serial`库来处理串口通信,以及如`matplotlib`库用于绘制地图和轨迹。以下是基本步骤:
1. 首先,安装必要的库:
```bash
pip install pyserial matplotlib geopandas basemap
```
2. 使用`pyserial`库连接到GPS设备,并设置正确的波特率、校验位等参数:
```python
import serial
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1)
```
请将`'/dev/ttyUSB0'`替换为你实际GPS设备的端口号。
3. 定义一个函数接收从串口读来的经纬度信息,并存储它们:
```python
def read_gps_data():
lat_lon_list = []
while True:
line = ser.readline().decode('utf-8').strip()
if 'GPRMC' in line: # 检查是否收到有效位置信息
lat, lon = parse_gprmc(line) # 解析经纬度函数
lat_lon_list.append((lat, lon))
return lat_lon_list
```
4. 编写`parse_gprmc`函数解析特定的GPS数据格式(如RMC格式),例如:
```python
def parse_gprmc(line):
# 提取经纬度字段并转换成浮点数
lat_str, lon_str = line.split(',')[3:5]
lat = float(lat_str.strip())
lon = float(lon_str.strip())
return lat, lon
```
5. 当获取到足够多的数据后,可以使用`geopandas`库将地理坐标转换为GeoDataFrame,并利用`basemap`或`folium`库绘制地图和轨迹:
```python
from geopandas import GeoDataFrame
from shapely.geometry import Point
import folium
# ... (假设lat_lon_list已填充)
gdf = GeoDataFrame(
{'geometry': [Point(xy) for xy in zip(*lat_lon_list)]},
crs={'init': 'epsg:4326'}
)
m = folium.Map(location=gdf.geometry[0].centroid)
fg = gdf.plot(column='index', marker=True, markersize=10, cmap='tab20c', legend=True, ax=m)
# 更新地图显示
for index, row in gdf.iterrows():
m.Marker([row['geometry'].y, row['geometry'].x]).add_to(fg)
# 显示地图
m.save("trajectory.html")
```
阅读全文