在python用ais数据在地图上绘制航迹图
时间: 2024-03-13 21:44:28 浏览: 263
要在Python中使用AIS数据在地图上绘制航迹图,你需要使用一些地图绘制库,如folium、plotly等。这里以使用folium库为例,演示如何在地图上绘制航迹图。
首先,你需要获取到AIS数据,并将其解析为易于处理的格式。AIS数据通常是NMEA0183格式的文本数据,你可以使用Python中的serial库读取串口数据、使用socket库读取网络数据、或者直接读取文件数据。然后,你需要将AIS数据解析成Python对象,通常可以使用AIS-decoder库或pyAISm库来实现。
在获取和解析AIS数据之后,你需要提取出船舶的位置信息和时间戳信息,并将它们组织成易于处理的数据结构。最后,你可以使用folium库创建地图,并在地图上绘制航迹图。
下面是一个使用folium库绘制航迹图的示例代码:
```python
import folium
from datetime import datetime
import pyais
# 读取AIS数据
with open('ais_data.txt', 'r') as f:
ais_data = f.read()
# 解析AIS数据
ais_decoder = pyais.AISDecoder()
ais_msgs = ais_decoder.decode(ais_data)
# 提取船舶的MMSI和位置信息
ship_positions = {}
for ais_msg in ais_msgs:
if ais_msg['type'] == 'position_report_class_a':
mmsi = ais_msg['mmsi']
lat = ais_msg['position']['latitude']
lon = ais_msg['position']['longitude']
timestamp = datetime.strptime(ais_msg['timestamp'], '%Y-%m-%d %H:%M:%S.%f')
ship_positions.setdefault(mmsi, []).append((lat, lon, timestamp))
# 创建地图
m = folium.Map(location=[30, 120], zoom_start=6)
# 绘制航迹
for mmsi, positions in ship_positions.items():
folium.Marker(location=[positions[0][0], positions[0][1]], popup=str(mmsi)).add_to(m)
folium.PolyLine(locations=[(lat, lon) for lat, lon, _ in positions], color='red', weight=2, opacity=0.7).add_to(m)
# 显示地图
m.save('ship_track.html')
```
在上面的代码中,我们首先使用open函数读取AIS数据文件,然后使用pyais库解析AIS数据。我们提取了船舶的MMSI和位置信息,并使用folium库创建地图。最后,我们使用folium库的Marker和PolyLine对象绘制船舶的位置和航迹,并将地图保存为HTML文件。你可以根据自己的需求,调整代码中的参数和样式。
阅读全文