Source code for obsea.ais

"""
AIS module.

Used to read AIS files.

"""
import pandas as pd
import datetime as dt


[docs] def cls_time_parser(x): return dt.datetime( int(x[6:10]), int(x[3:5]), int(x[0:2]), int(x[11:13]), int(x[14:16]), int(x[17:19]))
[docs] def read_cls(fname, cargo_and_tanker=True): """ Read AIS data from CLS format. Parameters ---------- fname : string File name. cargo_and_tanker : bool, optional Whether only to keep cargos and thankers. Returns ------- pandas.DataFrame AIS data as a DataFrame with four columns: mmsi - time - lon - lat """ ais = pd.read_csv(fname, sep=';', dtype={'imo': 'Int64'}) s = ais['locDate'] + ' ' + ais['locTime'] ais.loc[:, 'time'] = s.apply(cls_time_parser) if cargo_and_tanker: mask = ((ais['aisShipType'] >= 70) & (ais['aisShipType'] < 90) & (ais['navigationStatus'] == 0)) ais = ais[mask] return ais
[docs] def read_marine_traffic(fname, terrestrial=True): """ Read AIS data from Marine Traffic format. Parameters ---------- fname : string File name. terrestrial : bool, optional Whether only to keep terrestrial AIS. Returns ------- pandas.DataFrame AIS data as a DataFrame with four columns: mmsi - lon - lat - time """ ais = pd.read_csv(fname, parse_dates=['TIMESTAMP UTC']) ais = ais.rename(columns={ 'MMSI': 'mmsi', 'STATUS': 'navigationStatus', 'SPEED': 'sog', 'COURSE': 'cog', 'HEADING': 'trueHeading', 'LAT': 'lat', 'LON': 'lon', 'TIMESTAMP UTC': 'time', 'STATION': 'source'}) if terrestrial: mask = (ais['source'] == 'TER') & (ais['navigationStatus'] == 0) ais = ais[mask] return ais
[docs] def select_ships(ais, mmsi_list): """ Filter out ship from ais which do not belongs to mmsi_list. Parameters ---------- ais : pandas.DataFrame AIS data. mmsi_list : list List of wanted ships' MMSI. Returns ------- pandas.DataFrame AIS data containing ship in mmsi_list. """ mask = ais['mmsi'].isin(mmsi_list) ais = ais[mask] return ais