對(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)了浪慌。
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 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下編譯方法如下:
- 安裝Visual Studio 2017,添加C++及Windows XP C++功能辐脖。
- 安裝Git
- 安裝CMake
- 安裝POedit遇骑,并將安裝路徑添加到環(huán)境變量
C:\Program Files (x86)\Poedit\GettextTools\bin
- 安裝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)變量
- 獲取wxWidgets 3.1.2源碼并生成,揖曾,使用VS2017 x86 Native Tools下的命令行落萎,運(yùn)行如下命令:
- 獲取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)行該文件届吁。
- 獲取源代碼
- 用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)試了芬探。
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é)果。