Skip to content
forked from schwehr/libais

C++ decoder for Automatic Identification System for tracking ships and decoding maritime information

License

Notifications You must be signed in to change notification settings

bitbouncer/libais

This branch is 20 commits behind schwehr/libais:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

140c10a · May 14, 2019
Jan 17, 2018
Oct 27, 2015
Jul 10, 2015
May 21, 2015
May 14, 2019
Dec 5, 2017
Apr 20, 2015
Oct 27, 2015
Jul 3, 2015
Nov 17, 2017
Mar 27, 2019
Apr 22, 2014
Apr 26, 2015
Jan 17, 2018
Aug 15, 2016
Oct 27, 2015
Nov 20, 2017
Apr 27, 2015
Nov 23, 2017
Apr 27, 2015
Dec 13, 2017

Repository files navigation

Introduction

https://travis-ci.org/schwehr/libais.svg?branch=master

Library for decoding maritime Automatic Identification System messages.

See Also

Automatic Identification System

Other open source AIS projects:

Building

Building with Python

$ python setup.py build
$ python setup.py install

Testing with Python

$ virtualenv ve
$ source ve/bin/activate
$ python setup.py test

Building with CMake

$ cmake .
$ make

Building with legacy Makefile

$ make -f Makefile-custom test

Usage

There are two interfaces to libais, one high-level iterator based one and a low-level fast C++ only one. The iterator based interface is accessed the following way:

import ais.stream
with open("file.nmea") as f:
    for msg in ais.stream.decode(f):
        print msg

To use the low-level C++ interface directly, you need to handle multi-line messages and padding yourself:

import ais
ais.decode('15PIIv7P00D5i9HNn2Q3G?wB0t0I', 0)
ais.decode('402u=TiuaA000r5UJ`H4`?7000S:', 0)
ais.decode('55NBjP01mtGIL@CW;SM<D60P5Ld000000000000P0`<3557l0<50@kk@K5h@00000000000', 2)

There is also support for converting parsed messages to the structure output by GPSD / gpsdecode. For full compatibility, you have to write the resulting message dictionaries to a file with json.dump() and add a newline after each message.

import ais.stream
import json
import ais.compatibility.gpsd

with open("infile.nmea") as inf:
    with open("outfile.gpsd") as outf:
        for msg in ais.stream.decode(f):
            gpsdmsg = ais.compatibility.gpsd.mangle(msg)
            json.dump(gpsdmsg, outf)
            outf.write("\n")

AIS Specification Documents

  • ITU-1371, ITU-1371-{1,2,3,4]
  • e-Navigation
  • IMO Circ 236
  • IMO Circ 289
  • EU RIS

Developing

The C++ code was switched to the Google style in November, 2012. Indenting should be by 2 spaces.

http://google-styleguide.googlecode.com/svn/trunk/cpplint/

$ git clone https://github.com/schwehr/libais
$ cd libais
$ virtualenv ve
$ source ve/bin/activate
$ pip install -e .[tests]
$ python setup.py test
$ py.test --cov=ais --cov-report term-missing

or

$ git clone https://github.com/schwehr/libais
$ cd libais
$ virtualenv ve
$ source ve/bin/activate
$ pip install -e .[test]
$ python setup.py develop
$ python setup.py test
$ py.test --cov=ais --cov-report term-missing

About

C++ decoder for Automatic Identification System for tracking ships and decoding maritime information

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 63.7%
  • Python 32.9%
  • Makefile 1.8%
  • M4 1.4%
  • Other 0.2%