aisdb.track_gen module

generation, segmentation, and filtering of vessel trajectories

exception aisdb.track_gen.EmptyRowsException[source]

Bases: Exception

aisdb.track_gen.TrackGen(rowgen: iter, decimate: False) dict[source]

generator converting sets of rows sorted by MMSI to a dictionary containing track column vectors. each row contains columns from database: mmsi time lon lat name … rows must be sorted by first by mmsi, then time

Parameters:
  • rowgen (aisdb.database.dbqry.DBQuery.gen_qry()) – DBQuery rows generator. Yields rows returned by a database query

  • decimate (bool) – if True, linear curve decimation will be applied to reduce the number of unnecessary datapoints

Yields:

dictionary containing track column vectors. static data (e.g. mmsi, name, geometry) will be stored as scalar values

>>> import os
>>> import numpy as np
>>> from datetime import datetime
>>> from aisdb import DBQuery, TrackGen, decode_msgs
>>> from aisdb.database import sqlfcn_callbacks
>>> filepaths = ['aisdb/tests/testdata/test_data_20210701.csv',
...              'aisdb/tests/testdata/test_data_20211101.nm4']
aisdb.track_gen.fence_tracks(tracks, domain)[source]

compute points-in-polygons for vessel positions within domain polygons

yields track dictionaries

Also see zone_mask()

aisdb.track_gen.min_speed_filter(tracks, minspeed)[source]
aisdb.track_gen.min_track_length_filter(tracks, min_length=300)[source]
aisdb.track_gen.split_timedelta(tracks, maxdelta=datetime.timedelta(days=14))[source]

partitions tracks where delta time exceeds maxdelta

Parameters:
  • tracks (aisdb.track_gen.TrackGen) – track vectors generator

  • maxdelta (datetime.timedelta) – threshold at which tracks should be partitioned

aisdb.track_gen.split_tracks(tracks, max_distance=25000, max_time=datetime.timedelta(days=1), max_speed=50, min_speed=0.2, min_segment_length=15, min_direction_change=45)[source]

Segments AIS tracks based on multiple criteria such as course changes, speed, distance, and time gaps. :param tracks: track vectors generator :type tracks: aisdb.track_gen.TrackGen :param max_distance: Maximum allowable distance (meters) between points in a segment. :type max_distance: float :param max_time: Maximum allowable time difference between points in a segment. :type max_time: timedelta :param max_speed: Maximum allowable speed (knots). :type max_speed: float :param min_speed: Minimum allowable speed (knots). :type min_speed: float :param min_segment_length: Minimum number of points required in a segment. :type min_segment_length: int :param min_direction_change: Minimum course change (degrees) to start a new segment. :type min_direction_change: float

aisdb.track_gen.zone_mask(tracks, domain)[source]

compute points-in-polygons for track positions, and filter results to positions within domain.

yields track dictionaries.

also see fence_tracks()