3.2.1 電子海圖系統(tǒng)解析及開發(fā) 開源軟件 - OpenCPN

對(duì)于航海愛好者或電子海圖開發(fā)人員盖桥,不得不提一下OpenCPN忧换。它是一款開源的軟件季春,它是由熱愛航海的且懂軟件的海員開發(fā),相關(guān)資源可去其官網(wǎng)https://opencpn.org下載缨称。該軟件支持Windows/MacOS/Linux系統(tǒng),安裝簡(jiǎn)單祝迂,功能強(qiáng)大睦尽,界面簡(jiǎn)潔,操作簡(jiǎn)單型雳。對(duì)于業(yè)余航海人員海上航行的不二選擇当凡。目前OpenCPN最新版為2020年7月15日發(fā)布的5.2版山害,Windows安裝包大約40MB,下載完后安裝運(yùn)行沿量,就可以體驗(yàn)商業(yè)級(jí)的電子海圖系統(tǒng)了浪慌。

image.png

OpenCPN提供大量免費(fèi)海圖下載,支持航線設(shè)計(jì)朴则、航行監(jiān)控权纤,能接入GPS、AIS數(shù)據(jù)佛掖,能疊加雷達(dá)圖像妖碉,還滿足氣象導(dǎo)航方面的要求,還有眾多插件可供選擇芥被,且一直持續(xù)改進(jìn)更新中欧宜。更重要的是一點(diǎn)是,開放源代碼https://github.com/OpenCPN/OpenCPN拴魄。

OpenCPN開發(fā)者介紹

Dave夫婦

Dave Register曾是一名程序員冗茸,和Kathi于2000年開始在游艇上任全職。 Dave對(duì)當(dāng)時(shí)可用的商業(yè)電子海圖系統(tǒng)不太滿意匹中,便著手開始開發(fā)自己的軟件夏漱,并將其命名為OpenCPN。多年來顶捷,OpenCPN一直是由他個(gè)人獨(dú)立發(fā)布挂绰,并利用它成功的使游艇安全的從紐芬蘭到達(dá)巴哈馬。此后服赎,Dave開始與其他游艇駕駛員共享該軟件葵蒂,從而產(chǎn)生了將其公開發(fā)布給所有人以開源形式下載的想法。2009年重虑,官網(wǎng)OpenCPN.org創(chuàng)建践付,現(xiàn)在,該開源項(xiàng)目已在全球范圍內(nèi)受到追捧缺厉,并擁有一群出色的志愿者開發(fā)人員永高。

OpenCPN 本地編譯

OpenCPN由C++編寫,遵從GPLv2協(xié)議提针,其源代碼可以輕易的從github獲取命爬。在windows下編譯方法windows下編譯方法如下:

  1. 安裝Visual Studio 2017,添加C++及Windows XP C++功能辐脖。
  2. 安裝Git
  3. 安裝CMake
  4. 安裝POedit遇骑,并將安裝路徑添加到環(huán)境變量

    C:\Program Files (x86)\Poedit\GettextTools\bin

  5. 安裝wxWidgets
    • 獲取wxWidgets 3.1.2源碼并生成,揖曾,使用VS2017 x86 Native Tools下的命令行落萎,運(yùn)行如下命令:
      cd C:\Users\myname\Sources          //修改成自己的目錄
      git clone -b v3.1.2 https://github.com/wxWidgets/wxWidgets
      cd wxWidgets
      git submodule init
      git submodule update
      
      cd build\msw
      nmake /f makefile.vc BUILD=release SHARED=1 CXXFLAGS=/D_USING_V141_SDK71_ CFLAGS=/D_USING_V141_SDK71_ LDFLAGS=/SUBSYSTEM:WINDOWS,5.01
      nmake /f makefile.vc BUILD=debug SHARED=1 CXXFLAGS=/D_USING_V141_SDK71_ CFLAGS=/D_USING_V141_SDK71_ LDFLAGS=/SUBSYSTEM:WINDOWS,5.01
      
      
    • 設(shè)置環(huán)境變量wxWIDGETS_ROOT_DIR為wxWidgets 3.1.2源代碼目錄
    • 將wxWidgets源代碼目錄下的路徑lib\vc_dll\添加進(jìn)系統(tǒng)變量
  6. 獲取OpenCPN源代碼
    • 獲取源代碼
      cd \Users\myname\Sources
      git clone https://github.com/OpenCPN/OpenCPN
      
    • 獲取Windows依賴亥啦,解壓到c:\Users\myname\Sources\OpenCPN\buildwin目錄下
    • 生成OpenCPN,使用VS2017 x86 Native Tools下的命令行练链,運(yùn)行如下命令:
      cd C:\Users\myname\Sources\OpenCPN
      mkdir build
      cd build
      cmake -G "Visual Studio 15 2017" -T v141_xp ..
      cmake --build .
      cmake --build . --config release
      cmake --build . --config release --target package
      
    • 下載Copyfiles.bat.doc翔脱,將文件復(fù)制到將文件復(fù)制到OpenCPN源代碼的目錄,刪掉擴(kuò)展名.doc媒鼓,并運(yùn)行該文件届吁。
  7. 用VS2017打開opencpn.sln,開始調(diào)試代碼吧B堂>毋濉!

由上面步驟可知潮模,對(duì)OpenCPN編譯還是很復(fù)雜的亮蛔,其中任何一個(gè)環(huán)節(jié)出錯(cuò),都會(huì)影響最后程序的編譯及調(diào)試擎厢。照著上面的步驟大概率也會(huì)出錯(cuò)究流,排坑過程可以查看VS2017 + Win10 下的 OpenCPN 5.0.0 編譯過程小結(jié)

OpenCPN 代碼結(jié)構(gòu)

打開OpenCPN\build\OpenCPN.sln,并將項(xiàng)目opencpn設(shè)為啟動(dòng)項(xiàng)目动遭,即可開始代碼調(diào)試了芬探。

代碼結(jié)構(gòu)示意圖

OpenCPN的UI框架為wxWidget,其入口函數(shù)為chart1.cpp中的MyApp厘惦。初始化函數(shù)中偷仿,含有大量代碼,執(zhí)行窗體樣式布局宵蕉、海圖加載酝静、插件初始化等工作。

窗體初始化

解決方案中存在大量類庫項(xiàng)目国裳,通過其名稱即可判斷其在程序中所起到的作用形入。如ISO8211類庫就是解析ENC數(shù)據(jù)封裝標(biāo)準(zhǔn)(ISO/IEC 8211)的全跨;S57ENC類庫對(duì)ISO8211解析后的數(shù)據(jù)加工后進(jìn)行顯示(對(duì)應(yīng)S-57和S-52標(biāo)準(zhǔn))缝左;NMEA0183類庫是對(duì)GPS數(shù)據(jù)的解析。

總之浓若,OpenCPN由于功能眾多渺杉,使得代碼量大、結(jié)構(gòu)復(fù)雜挪钓,涉及到的技術(shù)也頗多是越。想要完全掌握代碼,除了擁有過硬的C++水平外碌上,還需要了解wxWidget框架倚评、串口通信浦徊、GIS、數(shù)據(jù)解析天梧、語言國際化等方面的知識(shí)盔性。對(duì)于初學(xué)者而言,應(yīng)該在研究相關(guān)協(xié)議標(biāo)準(zhǔn)的基礎(chǔ)上呢岗,找到相對(duì)應(yīng)的代碼進(jìn)行細(xì)微修改冕香,再調(diào)試驗(yàn)證結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末后豫,一起剝皮案震驚了整個(gè)濱河市悉尾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挫酿,老刑警劉巖构眯,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異饭豹,居然都是意外死亡鸵赖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拄衰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來它褪,“玉大人,你說我怎么就攤上這事翘悉∶4颍” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵妖混,是天一觀的道長(zhǎng)老赤。 經(jīng)常有香客問我,道長(zhǎng)制市,這世上最難降的妖魔是什么抬旺? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮祥楣,結(jié)果婚禮上开财,老公的妹妹穿的比我還像新娘。我一直安慰自己误褪,他們只是感情好责鳍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兽间,像睡著了一般历葛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘀略,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天恤溶,我揣著相機(jī)與錄音乓诽,去河邊找鬼。 笑死咒程,一個(gè)胖子當(dāng)著我的面吹牛问裕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孵坚,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼粮宛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了卖宠?” 一聲冷哼從身側(cè)響起巍杈,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扛伍,沒想到半個(gè)月后筷畦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刺洒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年鳖宾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆航。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鼎文,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出因俐,到底是詐尸還是另有隱情拇惋,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布抹剩,位于F島的核電站撑帖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澳眷。R本人自食惡果不足惜胡嘿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钳踊。 院中可真熱鬧衷敌,春花似錦、人聲如沸箍土。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吴藻。三九已至,卻和暖如春弓柱,著一層夾襖步出監(jiān)牢的瞬間沟堡,已是汗流浹背侧但。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留航罗,地道東北人禀横。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粥血,于是被迫代替她去往敵國和親柏锄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容