RTL-SDRã§ãšã¢ã¬ãŒã¹æ©ã®ADS-Bã¡ãã»ãŒãžãåä¿¡ããé£è¡è»è·¡ãJupyterãšpandasã§GeoJSONã«å€æããŠããããããŠã¿ã
æ©æã®ã»ããã¢ããã§ãããåä¿¡æ©ã«ã¯ãã€ãã®RTL2832Uãã³ã°ã«ãããŒãPC(Mac Book Pro)ã«æ¥ç¶ããŠããŸããåä¿¡çšãœãããŠã§ã¢ã¯dump1090ãã³ãã³ãã©ã€ã³ãã䜿ããŸããdump1090ã¯åä¿¡ããADS-Bã¡ãã»ãŒãžããã³ãŒãããçµæãTCPã®ããŒã30003ã§åºåããæ©èœããããŸãããããæŽ»çšããŠãã®ã³ã°ããŠã¿ãããšã«ããŸãã UNIXç³»ã®OSã§ã¯ãnc(NetCat)ãšããã³ãã³ãã§ãä»»æã®ãã¹ããããŒãã«TCPæ¥ç¶ãããåãåã£ãããŒã¿ããã®ãŸãŸæšæºåºåã«åºãããšãã§ããŸããããããªãã€ã¬ã¯ãããããšã§ãã¡ã€ã«ã«èšé²ã§ããŸãããã®åºåãã©ãŒãããã¯CSVã®ããã¹ã圢åŒã§ãã®ã§ãããŒã¿ã®åŠçã¯é£ãããããŸããã
MacOSã®å Žåãdump1090ã³ãã³ãã¯ãœãŒã¹ãããã«ãããå¿ èŠããããŸããæºåãšããŠãRTL2832Uçšã®ã©ã€ãã©ãªãçšæããŠããå¿ èŠããããŸããã©ã€ãã©ãªã¯brewã§ã€ã³ã¹ããŒã«ããŠããã®ãç°¡åã§ããããšã¯dump1090ã®ãœãŒã¹ã³ãŒããgithubããèœãšããŠããŠãmakeããã ãã§OKã§ããLinux(Raspberry Piãªã©)ã®å Žåãbrewã®ä»£ããã«apt-getçã䜿ãããšã§åæ§ã«ãã«ãã§ããŸãã
$ brew install rtl-sdr $ git clone https://github.com/MalcolmRobb/dump1090 $ cd dump1090 $ make
RTL-SDRãã³ã°ã«ãPCã«æ¥ç¶ããdump1090ã³ãã³ããèµ·åããŸããã¢ã³ããã¯ä»å±ã®ãã®ãã€ãããŸããåä¿¡ã«æåããããã°ã¡ãã»ãŒãžãæµããŠãããŸããæ¬¡ã«ããTCPã§ããŒã¿ãåããããã«--netãªãã·ã§ã³ãä»ããŠèµ·åããŠãããŸãã
$ ./dump1090 --net
ãã®ç¶æ ã§å¥ã®ã¿ãŒããã«ãéããŠãããŒã«ã«ãã¹ã(127.0.0.1)ãããŒã30003ããããŒã¿ãèªããããäžèšã®ã³ãã³ããå ¥åããŸãã
$ nc 127.0.0.1 30003
ãããããšãããã¹ãã§CSV圢åŒã®ããŒã¿ã衚瀺ãããã¯ãã§ãããã³ãŒãã§ããã¡ãã»ãŒãžãã1ã¡ãã»ãŒãž=1è¡ã§åºåãããŸããããšã¯ãããããªãã€ã¬ã¯ãã§ãã¡ã€ã«ã«èœãšãã°èšé²ã§ããããšã«ãªããŸãã
$ nc 127.0.0.1 30003 > adsb.csv
ãšããã§dump1090ã«ã¯ããããããªãšãŒã·ã§ã³ããããŸããæ€çŽ¢ã§æåã«åŒã£ããã https://github.com/antirez/dump1090 ã§å ¬éãããŠããããŒãžã§ã³ã§ã¯ã30003ããŒãããäžèšã®ãããªåºåãåŸãããŸãã
MSG,8,,,84BB74,,,,,,,,,,,,,,,,, MSG,8,,,84B79C,,,,,,,,,,,,,,,,, MSG,3,,,D9E098,,,,,,,40325,,,,,,,0,0,0,0 MSG,5,,,84B79C,,,,,,,2400,,,,,,,,,, MSG,8,,,84BB74,,,,,,,,,,,,,,,,, MSG,5,,,84B79C,,,,,,,2450,,,,,,,,,, MSG,5,,,84B79C,,,,,,,2475,,,,,,,,,, MSG,5,,,84B79C,,,,,,,2500,,,,,,,,,, MSG,6,,,84B79C,,,,,,,,,,,,,7301,0,0,0,0 MSG,5,,,84B79C,,,,,,,2525,,,,,,,,,, MSG,8,,,84B79C,,,,,,,,,,,,,,,,,
ã«ã³ãã®é£ç¶ãç®ç«ã¡ãŸãã空ã®ãã£ãŒã«ãå€ãããã§ãã
ãã®ããŒãžã§ã³ã®ä»ã«ãhttps://github.com/MalcolmRobb/dump1090 ã«ãå ¬éãããŠããŸãããã¡ãã¯çš®ã ã®æ¹è¯ãå ããããŠãããCSVåºåã®åœ¢åŒåœ¢åŒãéã£ãŠããŸãããããªåºåãåŸãããŸãã
MSG,7,111,11111,8675BC,111111,2017/06/04,10:18:14.261,2017/06/04,10:18:14.252,,7375,,,,,,,,,,0 MSG,4,111,11111,8675BC,111111,2017/06/04,10:18:14.316,2017/06/04,10:18:14.254,,,271,217,,,3968,,,,,0 MSG,7,111,11111,86752C,111111,2017/06/04,10:18:14.356,2017/06/04,10:18:14.318,,11025,,,,,,,,,,0 MSG,7,111,11111,862248,111111,2017/06/04,10:18:14.530,2017/06/04,10:18:14.514,,22525,,,,,,,,,,0 MSG,5,111,11111,86752C,111111,2017/06/04,10:18:14.538,2017/06/04,10:18:14.515,,11025,,,,,,,0,,0,0 MSG,8,111,11111,8675BC,111111,2017/06/04,10:18:15.106,2017/06/04,10:18:15.104,,,,,,,,,,,,0 MSG,8,111,11111,8675BC,111111,2017/06/04,10:18:15.115,2017/06/04,10:18:15.104,,,,,,,,,,,,0 MSG,8,111,11111,8675BC,111111,2017/06/04,10:18:15.124,2017/06/04,10:18:15.105,,,,,,,,,,,,0 MSG,7,111,11111,85D7C0,111111,2017/06/04,10:18:15.195,2017/06/04,10:18:15.170,,2550,,,,,,,,,,0 MSG,8,111,11111,8675BC,111111,2017/06/04,10:18:15.195,2017/06/04,10:18:15.170,,,,,,,,,,,,0 MSG,3,111,11111,8675BC,111111,2017/06/04,10:18:15.226,2017/06/04,10:18:15.172,,7425,,,35.44315,139.86805,,,,,,0
ãã¡ãã¯åãããããã£ãŒã«ããå¢ããŠããŸã(äžéšã®ãã£ãŒã«ãã¯ãããŒã®ããã§ã)ãéèŠãªã®ã¯æ¥æã«ã€ããŠã®æ å ±ãå ¥ã£ãŠããããšã§ããèªè·¡ãæç³»åããŒã¿ãšããŠèšé²ããããã«ã¯ãMalcolmRobbçã䜿ã£ãæ¹ãè¯ãããã§ãã
以äžã®ãããªæºåããããããã§ãåœæ¥çŸå°ã§ãå±å€ã§ããŒãPC(MBP)ãåºããŠãããŒã¿ãèšé²ããŸãããæ¥å·®ãã匷ããããŒãPCã®ç»é¢ãèŠãã«ããå°ãé£åããŸããã
ããŠãåŸãããããŒã¿ã芳å¯ããŠã¿ããšãè¡ã«ãã£ãŠå 容ãéã£ãŠããŸããããŒã¿ãã©ãŒãããã¯ãã¡ãã«è§£èª¬ããããŸããã2 çªç®ã®ãã£ãŒã«ã2=Transmission Typeã§ã¡ãã»ãŒãžã®çš®å¥ãåºå¥ãããŠããããã§ãããã£ãŒã«ã5ã«AircraftIDããããæ©äœ(ã¡ãã»ãŒãžã®çºä¿¡è )ãèå¥ããããã§ãã
緯床çµåºŠã¯Transmission Typeããªãã¡ã¿ã€ã3ã¡ãã»ãŒãžã®ã«ã©ã 15,16ã«èšé²ãããŠããŸãããŸãã é«åºŠã¯ã¿ã€ã2,3,5,6,7ã®ãããããã«ã©ã 12ã®ããã§ããããããåãåºãã°è»è·¡ãåŸãããã¯ãã§ãã
ããŠãã®æé ã§ããŒã¿ãåŠçããŠãããããããããšãç®æšã§ããäœãããŒã«ããããããããŸããããããã¹ããã¡ã€ã«ã§ãã®ã§ãèªåã§åŠçããŠã¿ãŸããæç³»åããŒã¿ã§ãã®ã§ãPythonãšPandasã䜿ã£ãŠã¿ãŸããæçµçã«GeoJSONã«å€æããããšã§ãGoogle Mapãã¯ãããããããªããŒã«ã§åãæ±ããã¯ãã§ãã
ãŸãã¯pandasãimportããCSVãã¡ã€ã«ãèªã¿èŸŒã¿ãŸãã
import pandas as pd dat = pd.read_csv('20170604-1252.csv', header=None, index_col=9)
ãã£ãŒã«ã9ã«ããæå»ãã€ã³ããã¯ã¹ã«æå®ããŠããŸããããããããšã§åãæ±ãæãæããªããŸãã
èªã¿èŸŒãã ããŒã¿ã¯Jupyter notebookã®ããã§ã¯ãããªãµãã«è¡šç€ºãããŸãã
NaNãå€ããæå€ãšã¹ã«ã¹ã«ã§ããããšãããããŸãã
ã¡ãã»ãŒãžã¿ã€ã=3ã®ã¬ã³ãŒããããAirCraft IDãšãæéãé«åºŠã緯床ãçµåºŠãåãåºããŠã¿ãŸãã
ã¡ãã»ãŒãžã¿ã€ã5ãåãåºããŸããAircraft ID,æå»,ã³ãŒã«ãµã€ã³,é«åºŠ(FT)ã®ãã£ãŒã«ãã ãã衚瀺ããŠããŸããããã§ã³ãŒã«ãµã€ã³=䟿åãšAircraft IDã®å¯Ÿå¿ãããããŸãã
é«ãé«åºŠã§é£ãã§ããã®ã¯åçšæ©ã§ãã矜ç°ã®è¿ããªã®ã§é£è¡æ©ã¯ããããé£ãã§ããŸãã
ãšã¢ã¬ãŒã¹æ©ã¯äœç©ºãé£ãã§ããŸãã®ã§ã1000FT以äžã®ã¡ãã»ãŒãžã ããåãåºããŠã¿ãŸããNaNã«ãªã£ãŠããã¬ã³ãŒããå€ãã®ã§ãããåãé€ããŸãã
ãšã¢ã¬ãŒã¹æ©ãããã³ãŒã«ãµã€ã³ãèŠã€ãããŸãããã®ãã¡ãN31YMãšããã®ãFalken宀屿©ã§ããAircraft IDã A346AA ãšããããšãããããŸãã
Aircraft ID(ãã£ãŒã«ã4)ãâA346AAâã®ã¬ã³ãŒããåãåºããŸãã
çµæ§ããããåºãŠããŸãã930è¡ãããŸããããããªãããããã§ãããã§ãã
matplotlibã§ã°ã©ãåããŠã¿ãŸããjupyter notebookã®äžã§%matplotlibãã£ã¬ã¯ãã£ãã§inlineãæå®ããŸãã
èŠäºã°ã©ãã«ãªããŸãããäžäžã«å€§ããå€åããŠããã®ãããããŸãã
ãããããããåãã«ãªã£ãŠããã®ã¯ãNaNãæ··ãã£ãŠããããã§ããdropna颿°ã䜿ã£ãŠåãé€ããŸãã
ããæãã«ãªããŸãããéäžæªãããªãžã£ã³ãããããŸãããäœãããã®ãããããŸããã
ããŠæ¬¡ã¯ç·¯åºŠãšçµåºŠã§ããã¡ãã»ãŒãžã¿ã€ã3ã®ããã£ãŒã«ã14,15ã«å ¥ã£ãŠããŸãã
ãã¡ãã¯186ååããŠãŸãããè»è·¡ã¯æãããã§ãã
ããŠããã®ããŒã¿ãgeojsonã«å€åããŠã¿ãŸãããŸãã¯pandasãã緯床çµåºŠãæ®éã®ããŒã¿ã«çŽããŸããã€ãã¬ãŒã¿ãšãªã¹ãå æ¬è¡šèšã§ãçµåºŠç·¯åºŠã®ã¿ãã«ã®é åã«å€æããŸãã
ããŸããã£ãããä»åºŠã¯geojsonãšããã¢ãžã¥ãŒã«ã䜿ã£ãŠgeojson圢åŒã«å€æããŸãã緯床çµåºŠã®é åããLineStringãçæããããFeatureãšããŠgeojsonã«è¿œå ããŸããgeojsonã®ããŒã¿ãã§ããããããã©ã¯jsonã¢ãžã¥ãŒã«ã䜿ã£ãŠãjsonãã¡ã€ã«ãçæããŸãã
ãã¡ã€ã«ã®åé ãèŠããšããããããããŒã¿ãå ¥ã£ãŠããŸãã
ãã®geojsonãã¡ã€ã«ãå°å³ã®äžã«ããããããŠã¿ãŸããä»åã¯ç°¡åã®ããgeojson.io ãšããWebãµã€ããå©çšããŸãããã©ãŠã¶ã§ http://geojson.io/ ãéããgeojsonãã¡ã€ã«ãã¢ããããŒãããã ãã§è¡šç€ºãããããšãã§ããŸãã
çš²æ¯æµ·å²žã§åŸ æ©æåããŠããæ§åããäŒå Žåã§ç«¶æã®æãéãªã£ãé£è·¡ããããŠçµãã£ãåŸãæµŠå®æ¹é¢ãæ»ãæ§åãèšé²ã§ããŠããŸããã
æé ã¯çç¥ããŸããã仿©ãåçšæ©ããã¹ãŠå«ããgeojsonãäœã£ãŠã¿ãŸãããgeojson.ioã¯ãGITHub/Gistã«çœ®ããããŒã¿ãéãããšãã§ããŸãã眮ããŠãããŸããã®ã§èå³ãããã°ã芧ãã ããããã¡ãã®geojsonã«ã¯é«åºŠæ å ±ãå«ããŠããŸãã
æ¬æ¥ã§ããã°ãJupyterã®äžã§è¡šç€ºããããšè¯ãã£ãã®ã§ããããã«ããã«ããšé¢åãªã®ã§ãããã§ã¯GeoJsonãã¡ã€ã«ãäœã£ãŠWebãµã€ãã§è¡šç€ºãããŠã¿ãŸãããã³ãŒãã®æçãã¹ã¯ãªãããã¡ã€ã«ã«ãŸãšããããšãå¯èœã§ããæ¯éã詊ããã ããã
ã¡ãªã¿ã«GeoPandasãšããå°çæ å ±çšã®Pandasããã±ãŒãžããããŸããgeojsonãã¡ã€ã«ãçŽæ¥æ±ãããšãã§ããç°¡åãªãããããå¯èœã§ããshapelyãšããã¢ãžã¥ãŒã«ã§ããããªãã»ã«ã®äžã§ãããããããŠããŸããŸãããã¡ãã䟿å©ããã§ãã
è£è¶³
Jupyterã䜿ããç°å¢ã«ããå Žåã¯åé¡ãªããšæããŸãããpandasãgeojsonã¯ã¢ãžã¥ãŒã«ãšããŠè¿œå ãå¿ èŠã§ããpipã§ã€ã³ã¹ããŒã«ããããšãå¯èœã§ãã
pip install pandas pip install geojson
åè
䜿çšããdump1090(ADS-Bãã³ãŒã)  https://github.com/MalcolmRobb/dump1090
ADS-Bã¡ãã»ãŒãžã®è§£èª¬Â http://woodair.net/sbs/Article/Barebones42_Socket_Data.htm
Jupyter http://jupyter.org/
Pandas http://pandas.pydata.org/
GeoPandas http://geopandas.org/
geojson.io  http://geojson.io/
åä¿¡ããããŒã¿ããããããããã®http://geojson.io/#id=gist:/91a831b32253595ff02777cee42cbb1e









