Bagaimana menafsirkan sampel data AIS Raw


9

Saya menemukan file yang berisi sekitar 85.000 pesan (feed AISHub live 3 menit), tetapi saya tidak bisa membuat kepala atau ekornya.

http://www.aishub.net/nmea-sample.html

!AIVDM,1,1,,A,13aEOK?P00PD2wVMdLDRhgvL289?,0*26
!AIVDM,1,1,,B,16S`2cPP00a3UF6EKT@2:?vOr0S2,0*00
!AIVDM,2,1,9,B,53nFBv01SJ<thHp6220H4heHTf2222222222221?50:454o<`9QSlUDp,0*09
!AIVDM,2,2,9,B,888888888888880,2*2E

Apakah ada skema di suatu tempat?


Saya tidak menggunakan bahasa pemrograman yang biasa Anda gunakan, tetapi saya akan merekomendasikan menggunakan perpustakaan untuk memecahkan kode itu. Ini adalah favorit saya: github.com/bcl/aisparser
bjornasm

1
Saya dapat merekomendasikan perpustakaan Ruby saya sendiri untuk mendekode AIS , yang didasarkan pada situs catb.org yang disebutkan orang lain.
Ian

Jawaban:


7

Ada gudang github yang bagus dari Kurt Schwehr yang bekerja di Pusat Pemetaan Pesisir dan Laut (misalnya untuk melacak aktivitas paus ). Di sana Anda akan menemukan decoder dan dokumen untuk memahami pesan nmea (sebagian besar tautan disebutkan oleh posting @ianmayo dan @GID Dev). Berikut adalah howto kecil yang berjalan di bawah LINUXdan python 2.7.

Untuk mendapatkan beberapa kode berjalan, Anda perlu gitsebuah C++compiler, yang python setup environment, cmake. Unduh data dari

$ cd YOUR_BUILD_PATH
$ git clone https://github.com/schwehr/libais.git

dan ikuti instruksi instalasi pada / di halaman github atau jalankan

$ cd YOUR_BUILD_PATH/libais
$ cmake .  # to bulid the Makefile 
$ make     # to build the libais C++
$ python setup.py build # to build the python stuff
$ sudo python setup.py install # to deploy it

Bagaimanapun, Anda harus memiliki perpustakaan di pythonlingkungan Anda .

 $ ls /usr/local/lib/python2.7/dist-packages/
 easy-install.pth  libais-0.16-py2.7-linux-x86_64.egg

 $ ls /usr/local/lib/python2.7/dist-packages/libais-0.16-py2.7-linux-x86_64.egg
 ais  _ais.py  _ais.pyc  _ais.so  EGG-INFO  test

Berikut ini beberapa kode cepat dan kotor dalam skrip yang dipanggil test-ais.pyuntuk mendapatkan unix seperti head& tailbehavoir. Saya menggunakan jsonsebagai "printer cukup teks yang jelas".

#!/usr/bin/python

# To supress the warning ...could be done better    
# FutureWarning: The stream module is deprecated and will be removed in 1.0
# https://github.com/schwehr/libais/blob/master/ais/stream/__init__.py
# coded in in __init__.py line 10-14
import warnings
warnings.filterwarnings("ignore")

# import json module for pretty print
import json

# import ais.stream module to decode
# a ais binary nmea message to json 
import ais.stream

# import sys module to read stuff from
# standard input STDIN
import sys

# decode a file or somthing form the STDIN
f = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin

# Iterate over the messages 
for msg in ais.stream.decode(f):
    # make a json pretty print for each message
    print json.dumps(msg, indent=4, sort_keys=True)

# EOF

Dengan asumsi bahwa nmea-samplesfile tersebut ada dalam datadirektori, Anda dapat memfilter baris yang ingin Anda tampilkan cat, headdan tail...

$ tail -1 data/nmea-sample | ./test-ais.py
 {
    "day": 14, 
    "fix_type": 1, 
    "hour": 11, 
    "id": 4, 
    "minute": 33, 
    "mmsi": 2320717, 
    "month": 3, 
    "position_accuracy": 0, 
    "raim": false, 
    "repeat_indicator": 3, 
    "second": 30, 
    "slot_offset": 2250, 
    "slot_timeout": 0, 
    "spare": 0, 
    "sync_state": 0, 
    "transmission_ctl": 0, 
    "x": -5.782454967498779, 
    "y": 57.842193603515625, 
    "year": 2012
 }

Mulai dari kode json, seharusnya mudah untuk melanjutkan dengan memformat lebih lanjut dan menyimpan barang-barang.


5

Situs decoding protokol AIVDM / AIVDO berisi jawabannya tetapi ada banyak yang harus disaring di sana. Untuk menjawab pertanyaan yang diajukan, ini dari situs yang disebutkan dalam format itu:

Berikut adalah paket data AIVDM yang khas:

! AIVDM, 1,1,, B, 177KQJ5000G? TO`K> RA1wUbN0TKH, 0 * 5C

Dan inilah yang dimaksud ladang:

Bidang 1,! AIVDM, mengidentifikasi ini sebagai paket AIVDM.

Bidang 2 (1 dalam contoh ini) adalah jumlah fragmen dalam pesan yang terakumulasi saat ini. Ukuran payload setiap kalimat dibatasi oleh maksimum 82 karakter NMEA 0183, sehingga kadang-kadang diperlukan untuk memecah muatan menjadi beberapa kalimat fragmen.

Bidang 3 (1 dalam contoh ini) adalah nomor fragmen dari kalimat ini. Ini akan menjadi berbasis satu. Kalimat dengan jumlah fragmen 1 dan jumlah fragmen 1 sudah lengkap.

Bidang 4 (kosong dalam contoh ini) adalah ID pesan berurutan untuk pesan multi-kalimat.

Bidang 5 (B dalam contoh ini) adalah kode saluran radio. AIS menggunakan sisi tinggi dupleks dari dua saluran radio VHF: AIS Channel A adalah 161.975Mhz (87B); AIS Channel B adalah 162.025Mhz (88B). Di alam liar, kode saluran 1 dan 2 juga mungkin ditemui; standar tidak menentukan interpretasi ini tetapi cukup jelas ..

Field 6 (177KQJ5000G? TO`K> RA1wUbN0TKH dalam contoh ini) adalah muatan data. Kami akan menjelaskan cara mendekode ini di bagian selanjutnya.

Bidang 7 (0) adalah jumlah bit pengisian yang diperlukan untuk mengisi data payload ke batas 6 bit, mulai dari 0 hingga 5. Secara setara, mengurangi 5 dari ini memberi tahu berapa banyak bit paling tidak signifikan dari 6-bit nibble terakhir di muatan data harus diabaikan. Perhatikan bahwa byte pad ini memiliki interaksi yang rumit dengan persyaratan <[ITU-1371]> untuk perataan byte dalam pesan AIS over-the-air; lihat pembahasan rinci panjang pesan dan perataan di bagian selanjutnya.

Sufiks * -separated ( 5C) adalah checksum integritas data NMEA 0183 untuk kalimat, didahului oleh " ". Ini dihitung pada seluruh kalimat termasuk tag AIVDM tetapi tidak termasuk yang terkemuka "!".

Selain itu, bagian penting di sini sebenarnya adalah bidang 6, jadi jika Anda menyaring situs lagi, Anda akan mendapatkan jawabannya: bidang 6 muatan data berisi satu ton (tidak benar-benar, satu ton!) Dari berbagai bidang di dalamnya. Jadi, Anda dapat menulis kode Anda sendiri untuk menguraikannya, atau sebagai alternatif menggunakan repo github yang diposting dalam jawaban lain yang berisi berbagai SDK / API yang mungkin harus memiliki apa yang Anda butuhkan (tergantung di mana Anda mendapatkan data SIA Anda): https: / /github.com/bcl/aisparser


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.