python在地图上绘制gps轨迹图
时间: 2023-05-16 16:05:25 浏览: 172
可以使用Python的matplotlib库来绘制GPS轨迹图。首先需要将GPS数据转换为经纬度坐标,然后使用matplotlib的plot函数绘制轨迹线。以下是一个简单的示例代码:
```python
import matplotlib.pyplot as plt
# GPS数据,格式为[(经度1, 纬度1), (经度2, 纬度2), ...]
gps_data = [(116.397128, 39.916527), (116.397636, 39.916527), (116.398144, 39.916527), ...]
# 将经纬度坐标分别存储到两个列表中
lon = [d[0] for d in gps_data]
lat = [d[1] for d in gps_data]
# 绘制轨迹线
plt.plot(lon, lat)
# 设置坐标轴范围
plt.xlim(min(lon), max(lon))
plt.ylim(min(lat), max(lat))
# 显示图形
plt.show()
```
这段代码会将GPS数据绘制成一条轨迹线,并显示在屏幕上。你可以根据需要修改代码,添加标题、坐标轴标签等。
相关问题
python绘制gps轨迹图
可以使用Python中的matplotlib库来绘制GPS轨迹图。具体实现方法可以参考以下代码:
```python
import matplotlib.pyplot as plt
# 假设有一组GPS坐标数据,存储在x和y两个列表中
x = [116.397128, 116.397137, 116.397146, 116.397155, 116.397164, 116.397173]
y = [39.908722, 39.908731, 39.908740, 39.908749, 39.908758, 39.908767]
# 绘制轨迹图
plt.plot(x, y, '-o')
# 设置坐标轴范围
plt.xlim(min(x)-0.0001, max(x)+0.0001)
plt.ylim(min(y)-0.0001, max(y)+0.0001)
# 设置坐标轴标签
plt.xlabel('Longitude')
plt.ylabel('Latitude')
# 显示图像
plt.show()
```
这段代码可以绘制出一条由x和y坐标组成的GPS轨迹线。其中,`-o`表示绘制线段和点,`plt.xlim`和`plt.ylim`用于设置坐标轴范围,`plt.xlabel`和`plt.ylabel`用于设置坐标轴标签。
用python读取GPS串口数据并将其绘制成轨迹图
在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")
```
阅读全文