कच्चे AIS डेटा नमूने की व्याख्या कैसे करें


9

मुझे एक फ़ाइल मिली जिसमें लगभग 85,000 संदेश (3 मिनट लाइव ऐशब फ़ीड) हैं, लेकिन मैं इसके प्रमुख या पूंछ नहीं बना सकता।

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

कहीं एक स्कीमा है?


मैं आमतौर पर किस प्रोग्रामिंग भाषा का उपयोग नहीं करता हूं, लेकिन मैं इसे डिकोड करने के लिए एक पुस्तकालय का उपयोग करके फिर से लिखूंगा। यह मेरा पसंदीदा है: github.com/bcl/aisparser
bjornasm

1
मैं AIS को डिकोड करने के लिए अपनी खुद की रूबी लाइब्रेरी की सिफारिश कर सकता हूं , जो कि catb.org साइट पर आधारित है जिसका दूसरों ने उल्लेख किया है।
इयान

जवाबों:


7

कर्ट श्वेहर का एक अच्छा गितुब भंडार है, जो तटीय और महासागर मानचित्रण के लिए केंद्र में काम करता है ( उदाहरण के लिए व्हेल गतिविधियों को ट्रैक करने के लिए)। वहां आपको nmea संदेश समझने के लिए एक डिकोडर और दस्तावेज़ मिलेंगे (ज्यादातर लिंक @ianmayo और @GID देव के पदों से मेल खाते हैं)। यहां एक छोटा howto के तहत चल रहा है LINUXऔर python 2.7

कुछ कोड चलाने के लिए, आप की जरूरत gitएक C++संकलक, python setup environment, cmake। से डेटा डाउनलोड करें

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

और github पृष्ठ पर या चलाने के लिए इंस्टॉलेशन निर्देश का पालन करें

$ 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

आखिरकार आपके पास अपने pythonवातावरण में पुस्तकालय होना चाहिए ।

 $ 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

यहाँ एक स्क्रिप्ट में कुछ त्वरित और गंदे कोड test-ais.pyहैं जिन्हें यूनिक्स की तरह headऔर tailव्यवहारवादी कहा जाता है । मैं json"स्पष्ट पाठ सुंदर प्रिंटर" के रूप में उपयोग करता हूं ।

#!/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

यह मानते हुए कि nmea-samplesफ़ाइल एक dataनिर्देशिका में है, आप उस पंक्ति को फ़िल्टर कर सकते हैं जिसे आप दिखाना चाहते हैं cat, headऔर 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
 }

Json कोड से शुरू करते हुए, आगे प्रारूपण और भंडारण सामग्री के साथ जाना आसान होना चाहिए।


5

AIVDM / AIVDO डिकोडिंग प्रोटोकॉल साइट जवाब होता है, लेकिन वहाँ वहाँ में छान-बीन करने के लिए एक बहुत है। प्रश्न का उत्तर देने के लिए, यह उस प्रारूप में पूर्वोक्त साइट से है:

यहाँ एक विशिष्ट AIVDM डेटा पैकेट है:

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

और यहाँ खेतों का मतलब है:

फ़ील्ड 1; AIVDM, इसे AIVDM पैकेट के रूप में पहचानता है।

फ़ील्ड 2 (इस उदाहरण में 1) वर्तमान में संचित संदेश में टुकड़ों की गिनती है। प्रत्येक वाक्य के पेलोड का आकार NMEA 0183 के 82-वर्ण अधिकतम द्वारा सीमित है, इसलिए कभी-कभी कई टुकड़े वाक्यों पर पेलोड को विभाजित करने की आवश्यकता होती है।

फ़ील्ड 3 (इस उदाहरण में 1) इस वाक्य का टुकड़ा नंबर है। यह एक-आधारित होगा। 1 का एक टुकड़ा संख्या और 1 का एक टुकड़ा संख्या के साथ एक वाक्य अपने आप में पूर्ण है।

फ़ील्ड 4 (इस उदाहरण में खाली) बहु-वाक्य संदेशों के लिए एक अनुक्रमिक संदेश आईडी है।

फील्ड 5 (बी इस उदाहरण में) एक रेडियो चैनल कोड है। AIS दो VHF रेडियो चैनलों से द्वैध के उच्च पक्ष का उपयोग करता है: AIS चैनल A 161.975Mhz (87,700) है; एआईएस चैनल बी 162.025Mhz (88B) है। जंगली में, चैनल कोड 1 और 2 का भी सामना करना पड़ सकता है; मानकों की व्याख्या नहीं है, लेकिन यह स्पष्ट रूप से पर्याप्त है ..

फ़ील्ड 6 (177KQJ5000G? TO`K> RA1wUbN0TKH इस उदाहरण में) डेटा पेलोड है। हम वर्णन करेंगे कि इसे बाद के खंडों में कैसे डिकोड किया जाए।

फ़ील्ड 7 (0) फिल बिट्स की संख्या को 6 बिट सीमा तक डेटा पेलोड को पैड करने की आवश्यकता होती है, 0 से 5 तक। समान रूप से, 5 से घटाकर यह बताता है कि पिछले 6-बिट निबल के कितने कम महत्वपूर्ण बिट्स हैं डेटा पेलोड को अनदेखा किया जाना चाहिए। ध्यान दें कि इस पैड बाइट में <A-ITU-1371]> एआईएस संदेशों में बाइट संरेखण के लिए एक मुश्किल बातचीत है; बाद में अनुभाग में संदेश की लंबाई और संरेखण की विस्तृत चर्चा देखें।

* -Separated प्रत्यय ( 5C) NMEA 0183 वाक्य के लिए डेटा-अखंडता चेकसम है, " " से पहले । यह AIVDM टैग सहित पूरे वाक्य पर गणना की गई है लेकिन प्रमुख को छोड़कर "!"।

इसके अलावा, यहां महत्वपूर्ण हिस्सा वास्तव में 6 क्षेत्र है, इसलिए यदि आप साइट के माध्यम से कुछ और बहाते हैं, तो आपको जवाब मिलेगा: उस क्षेत्र 6 डेटा पेलोड में एक टन (कोई वास्तव में, एक टन!) नहीं है। तो आप इसे पार्स करने के लिए अपना कोड लिख सकते हैं, या वैकल्पिक रूप से अन्य उत्तर में पोस्ट किए गए गिटब रेपो का उपयोग कर सकते हैं जिसमें विभिन्न एसडीके / एपीआई शामिल हैं, जो संभवतः आपके पास होने चाहिए (जहां आपको अपना एआईएस डेटा मिला है) के आधार पर: https: // /github.com/bcl/aisparser


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.