.. image:: https://travis-ci.org/schwehr/libais.svg?branch=master :target: https://travis-ci.org/schwehr/libais
.. image:: https://scan.coverity.com/projects/5519/badge.svg :target: https://scan.coverity.com/projects/5519
.. image:: https://codeclimate.com/github/schwehr/libais/badges/gpa.svg :target: https://codeclimate.com/github/schwehr/libais
.. image:: https://badge.fury.io/py/libais.svg :target: http://badge.fury.io/py/libais
Library for decoding maritime Automatic Identification System messages.
Automatic Identification System <http://en.wikipedia.org/wiki/Automatic_Identification_System>
_
Other open source AIS projects:
GPSd <http://en.wikipedia.org/wiki/Gpsd>
_AisLib <https://github.com/dma-ais/AisLib>
_noaadata <http://github.com/schwehr/noaadata>
_ais-areanotice <https://github.com/schwehr/ais-areanotice-py>
_OpenCPN <https://github.com/OpenCPN/OpenCPN>
_aisparser <https://github.com/bcl/aisparser>
_nmea_plus <https://github.com/ifreecarve/nmea_plus>
_.. code-block:: console
$ python setup.py build
$ python setup.py install
.. code-block:: console
$ virtualenv ve
$ source ve/bin/activate
$ python setup.py test
.. code-block:: console
$ cmake .
$ make
.. code-block:: console
$ make -f Makefile-custom test
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:
.. code-block:: python
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:
.. code-block:: python
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.
.. code-block:: python
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")
e-Navigation <http://www.e-navigation.nl/asm>
_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/
.. code-block:: console
$ 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
.. code-block:: console
$ 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