কোনও কাঁচা এইআইএস ডেটা নমুনা কীভাবে ব্যাখ্যা করবেন


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
আমি এআইএসের ডিকোডিংয়ের জন্য আমার নিজের রুবি লাইব্রেরির সুপারিশ করতে পারি , যা অন্যরা উল্লিখিত catb.org সাইটের উপর ভিত্তি করে ।
আয়ান

উত্তর:


7

কর্ট শ্বেওয়ারের একটি ভাল গিথুব সংগ্রহশালা রয়েছে যারা সেন্টার ফর কোস্টাল অ্যান্ড ওশান ম্যাপিংয়ে কাজ করেন ( উদাহরণস্বরূপ তিমির ক্রিয়াকলাপ ট্র্যাক করার জন্য)। সেখানে আপনি এনএমএ বার্তাগুলি বোঝার জন্য একটি ডিকোডার এবং নথি পাবেন (বেশিরভাগ ক্ষেত্রে @ianmayo এবং @GID দেব পোস্টগুলি দ্বারা সংযুক্ত লিঙ্কগুলি)। এখানে একটি ছোট হাওটো LINUXএবং এর নীচে চলছে python 2.7

কিছু কোড চলমান পেতে, আপনি প্রয়োজন gitএকটি C++কম্পাইলার, python setup environment, cmake। থেকে ডেটা ডাউনলোড করুন

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

এবং গিথুব পৃষ্ঠায় / চালনায় ইনস্টলেশন নির্দেশ অনুসরণ করুন বা রান করুন

$ 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জন্য পেতে বলা হয় । আমি একটি "পরিষ্কার পাঠ্য প্রিন্টার" হিসাবে ব্যবহার করি ।headtailjson

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

Assuming যে 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
 }

জসন কোড থেকে শুরু করে, আরও ফর্ম্যাটিং এবং স্টোর স্টাফ দিয়ে চালানো সহজ হওয়া উচিত।


5

AIVDM / AIVDO ডিকোডিং প্রোটোকল সাইটে জবাব রয়েছে কিন্তু সেখানে মাধ্যমে টালা অনেক। উত্থাপিত প্রশ্নের উত্তর দিতে, এটি এই ফর্ম্যাটটিতে উল্লিখিত সাইট থেকে:

এখানে একটি সাধারণ এআইভিডিএম ডেটা প্যাকেট রয়েছে:

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

এবং ক্ষেত্রগুলির অর্থ এখানে:

ক্ষেত্র 1, এআইআইভিডিএম, এটিআইআইডিএম প্যাকেট হিসাবে চিহ্নিত করে।

ক্ষেত্র 2 (এই উদাহরণের মধ্যে 1) বর্তমানে জমে থাকা বার্তায় টুকরাগুলির গণনা। প্রতিটি বাক্যটির পেডলোডের আকারটি NMEA 0183 এর সর্বাধিক ৮২-অক্ষর দ্বারা সীমাবদ্ধ থাকে, তাই এটি কখনও কখনও বেশ কয়েকটি খণ্ড বাক্যগুলিতে পেলোডকে বিভক্ত করতে হয়।

ক্ষেত্র 3 (এই উদাহরণের 1) এই বাক্যটির খণ্ড সংখ্যা। এটি এক ভিত্তিক হবে। 1 এর একটি খণ্ড গণনা এবং 1 এর একটি খণ্ড সংখ্যা সহ একটি বাক্য নিজেই সম্পূর্ণ।

ক্ষেত্র 4 (এই উদাহরণে খালি) বহু বাক্য বার্তাগুলির জন্য একটি ক্রমিক বার্তা আইডি।

ক্ষেত্র 5 (এই উদাহরণে বি) একটি রেডিও চ্যানেল কোড। এআইএস দুটি ভিএইচএফ রেডিও চ্যানেল থেকে ডুপ্লেক্সের উচ্চতর দিক ব্যবহার করে: এআইএস চ্যানেল এ 161.975 মেগাহার্টজ (87 বি); এআইএস চ্যানেল বি 162.025Mhz (88 বি)। বন্য অঞ্চলে, চ্যানেল কোড 1 এবং 2 এর মুখোমুখি হতেও পারে; মানগুলি এগুলির একটি ব্যাখ্যা নির্ধারণ করে না তবে এটি যথেষ্ট সুস্পষ্ট ..

ক্ষেত্র 6 (177KQJ5000G? TO`K> RA1wUbN0TKH এই উদাহরণে) ডেটা পেলোড। এটি পরবর্তী বিভাগগুলিতে কীভাবে ডিকোড করা যায় তা আমরা বর্ণনা করব।

ফিল্ড ((০) ভরাট বিটের সংখ্যাটি pay থেকে 5. অবধি pay বিট সীমানায় ডেটা পেলোডকে প্যাড করতে হবে, সমানভাবে, এর থেকে ৫ টি বিয়োগ করে জানাচ্ছে যে সর্বশেষে 6-বিট স্তন্যপানটির কতগুলি নূন্যতম গুরুত্বপূর্ণ বিট রয়েছে ডেটা পে-লোড উপেক্ষা করা উচিত। নোট করুন যে এই প্যাড বাইটটির ওভার-দ্য এআইএস বার্তাগুলিতে বাইট প্রান্তিককরণের জন্য <[ITU-1371]> প্রয়োজনীয়তার সাথে একটি জটিল মিথস্ক্রিয়া রয়েছে; পরবর্তী বিভাগে বার্তার দৈর্ঘ্য এবং প্রান্তিককরণের বিস্তারিত আলোচনা দেখুন।

*-বিচ্ছিন্ন প্রত্যয় ( 5 সি) বাক্যটির NMEA 0183 ডেটা-অখণ্ডতা চেকসাম, " " এর আগে " "। এটিআইভিডিএম ট্যাগ সহ পুরো বাক্যটিতে গণনা করা হয় তবে অগ্রণী "!" বাদ দিয়ে lud

তদ্ব্যতীত, এখানে গুরুত্বপূর্ণ অংশটি আসলে ক্ষেত্র so, সুতরাং আপনি যদি সাইটটি আরও কিছু চালনা করেন তবে আপনি উত্তর পাবেন: field ক্ষেত্রের 6 ডেটা পেডে এর মধ্যে বিভিন্ন ক্ষেত্রের একটি টন (আসলেই কোনও টন নেই!) রয়েছে। সুতরাং আপনি এটির বিশ্লেষণের জন্য নিজের কোডটি লিখতে পারেন বা বিকল্পভাবে অন্য উত্তরে পোস্ট করা গিথুব রেপো ব্যবহার করতে পারেন যার মধ্যে বিভিন্ন এসডিকে / এপিআই রয়েছে যা আপনার সম্ভবত যা হওয়া উচিত (আপনার এআইএস ডেটা কোথায় পেয়েছেন তার উপর নির্ভর করে): https: / /github.com/bcl/aisparser


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.