《GDAL源碼剖析(一)-李民錄的專欄》由會(huì)員分享,可在線閱讀,更多相關(guān)《GDAL源碼剖析(一)-李民錄的專欄(6頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、文檔供參考,可復(fù)制、編制,期待您的好評與關(guān)注!
前言:一直在使用和研究GDAL的相關(guān)東西,發(fā)現(xiàn)網(wǎng)上對GDAL的內(nèi)容倒是不少,但是很少有系統(tǒng)的介紹說明,以及內(nèi)部的一些結(jié)構(gòu)說明,基于這些原因,將本人的一些粗淺的理解放在此處,形成一個(gè)系列,暫時(shí)名為《GDAL源碼剖析》(名稱有點(diǎn)大言不慚,歡迎大家口水吐之,板磚拍之),供大家交流參考,有什么錯(cuò)誤之處,望大家不吝指正,本系列對于GDAL的使用均是在Windows平臺(tái)下,對于Linux平臺(tái)下的不在此系列討論范圍之內(nèi)。此外,轉(zhuǎn)載本博客內(nèi)容,請注明出處,強(qiáng)烈鄙視轉(zhuǎn)載后不注明出處的“類剽竊”行為。
一、GDAL簡介
??? GDAL官方網(wǎng)站http:/
2、/www.gdal.org/,本文章中的基本內(nèi)容都是參照官網(wǎng)中的信息,如有錯(cuò)誤或者與官網(wǎng)中的內(nèi)容沖突,以官網(wǎng)中的為正確。
在開始文章之前,我想先提出幾個(gè)問題,什么是GDAL?GDAL能做什么?GDAL怎么使用?GDAL內(nèi)部結(jié)構(gòu)是怎么組織的?GDAL提供的算法原理是什么?對于上面的幾個(gè)問題,希望大家看完該系列文章后能對上面的幾個(gè)問題少點(diǎn)疑惑,希望能對感興趣的童鞋們有所幫助。本人不才,文章中難免會(huì)出現(xiàn)問題,希望大家不吝指正。
什么是GDAL?這個(gè)問題比較簡單,通俗的講,GDAL是一個(gè)讀寫空間數(shù)據(jù)(這里的空間數(shù)據(jù)包括柵格數(shù)據(jù)和矢量數(shù)據(jù))的開源庫(但不僅限于此,此外還提供了一些非常常用的算法和工具
3、)。嚴(yán)格的講,大家可以參考GDAL首頁上的介紹。
GDAL is a translator library for raster geospatial dataformats that is released under an?X/MIT?style?Open Source?license by the?Open Source Geospatial Foundation. As alibrary, it presents a?singleabstract data model?to the calling application for allsupported formats. It al
4、so comes with a variety of usefulcommandline utilities?fordata translation and processing. TheNEWSpage describes the July 2011 GDAL/OGR 1.8.1 release.
The related?OGR?library(which lives within the GDAL source tree) provides a similar capability forsimple features vector data.
二、GDAL目錄結(jié)構(gòu)
??? 首先對于
5、GDAL的目錄結(jié)構(gòu)進(jìn)行一個(gè)簡單的介紹。GDAL源代碼下載地址:http://trac.osgeo.org/gdal/wiki/DownloadSource,或者安裝svn從源代碼服務(wù)器下載,svn地址是:http://svn.osgeo.org/gdal/trunk。
??? 如果是使用下載的壓縮包,其目錄結(jié)構(gòu)如下圖:
圖1 GDAL源碼壓縮包文件目錄結(jié)構(gòu)
??? 如果使用svn下載的源代碼,目錄結(jié)構(gòu)如下:
圖2 GDAL SVN源碼文件目錄結(jié)構(gòu)
從上面兩張圖中可以看出,GDAL的目錄結(jié)構(gòu)不管是用什么方式獲取的源代碼,它的目錄結(jié)構(gòu)都是一樣的,下面就針對目錄結(jié)構(gòu)中的每個(gè)文件夾和
6、文件做一個(gè)簡單的說明。(按照字母順序來進(jìn)行說明)
下面先對文件夾進(jìn)行說明:
1、alg文件夾:alg文件夾中存放的是GDAL庫中提供的一些算法的源代碼,這些算法包括但不限于:DEM生成等高線算法;圖像糾正算法(幾何糾正,TPS糾正,正射RPC糾正);柵格矢量化算法;矢量柵格化算法;格網(wǎng)計(jì)算算法;PCT和RGB互轉(zhuǎn)算法;分類圖的小碎斑塊去除算法等。
2、apps文件夾:apps文件夾中存放的是GDAL庫中提供的一些命令行工具集的源代碼,這些工具集的介紹可以參考http://gdal.org/gdal_utilities.html,將來我會(huì)對這些工具做一個(gè)簡單的說明。其中有些工具非常的有用,
7、比如gdalinfo,可以使用該工具來查看圖像的元數(shù)據(jù)信息等。
3、bridge文件夾:bridge文件夾中存放的是用來連接GDAL抽象類的定義以及GDAL自己的結(jié)構(gòu)體定義和實(shí)現(xiàn)的源代碼。具體到后面涉及到GDAL的實(shí)現(xiàn)原理時(shí)會(huì)對該文件夾作一個(gè)比較詳細(xì)的介紹。
4、data文件夾:data文件夾中存放的是GDAL庫中需要用到的一些“配置文件”(此處用配置文件可能不太準(zhǔn)確),這些文件主要有ESRI的投影文件,ESPG的投影文件,PCI的投影和橢球體文件,autoCAD的頭文件,以及其他的一些文件。在GDAL庫中有很多時(shí)候會(huì)自動(dòng)讀取該文件夾中的文件,一般是通過環(huán)境變量來查找該文件夾,環(huán)境變量的名
8、字叫GDAL_DATA,值就是data文件夾的路徑,或者可以在你的程序中使用函數(shù)?CPLSetConfigOption("GDAL_DATA","C:\GDAL\data");來進(jìn)行設(shè)置該文件夾的目錄,如果沒有設(shè)置GDAL會(huì)自動(dòng)從環(huán)境變量中查找,如果還是沒有找到,那么GDAL可能會(huì)提示錯(cuò)誤,比如如果不設(shè)置GDAL_DATA,那么在寫如atuocad的dxf格式的時(shí)候就提示創(chuàng)建不成功,后面遇到的話會(huì)再進(jìn)行說明。
5、doc文件夾:doc文件夾存放的是用來生產(chǎn)GDAL幫助文檔的一些dox文件,dox文件是使用doxygen工具來進(jìn)行生成的,后面會(huì)對doxygen工具作一個(gè)簡單的介紹和說明,以及在
9、自己的工程中怎么使用doxygen生成自己的程序的開發(fā)幫助文檔等??傊痪湓挘@個(gè)文件夾就是用來生成GDAL庫的幫助文檔的一些東西。后面會(huì)告訴大家如何生成一份GDAL的幫助文檔,當(dāng)然你也可以把gdal.org整個(gè)網(wǎng)站抓下來,J
6、frmts文件夾:這個(gè)文件夾可以說是GDAL代碼中東西最多的一個(gè)文件夾了,每次更新GDAL的版本后都會(huì)發(fā)現(xiàn)這個(gè)文件夾中會(huì)多出幾個(gè)文件夾,同時(shí)GDAL也會(huì)中支持的文件格式中多出來幾個(gè)新的文件格式。沒錯(cuò),這個(gè)文件夾存放的就是GDAL針對每種不同的特定的圖像格式解析的源代碼,可以舉幾個(gè)簡單的例子,比如bmp文件夾就是解析BMP圖像的,hfa文件夾就是用來解析Erdas的
10、img圖像格式,raw文件夾用來讀取ENVI的hdr文件,還有pcidsk文件夾就是讀取PCI的pix格式的等等。所以這個(gè)文件夾存放的是解析各個(gè)文件格式的源代碼。
7、gcore文件夾:通過名字大家也應(yīng)該知道這個(gè)文件夾是做什么的了,叫core的肯定都是很核心的東西了,這個(gè)文件夾就是GDAL的靈魂所在,主要存放的GDAL抽象類的數(shù)據(jù)集,波段,圖像讀寫接口等都在這個(gè)里面實(shí)現(xiàn)的。如果要知道GDAL的抽象類是怎么對圖像格式進(jìn)行抽象的,可以看看這個(gè)里面的代碼。
8、html文件夾:html文件夾如果使用壓縮包的話,里面應(yīng)該是空的,這個(gè)文件夾主要是用來存放GDAL的生成的幫助文檔的地方,主要是使用前面
11、介紹的doc文件夾中的dox腳本,使用doxygen工具生成的GDAL幫助文檔會(huì)出現(xiàn)在這個(gè)文件夾中。后面會(huì)和doc文件夾一起進(jìn)行一個(gè)詳細(xì)介紹。
9、m4文件夾:m4文件夾存放的有好幾個(gè)已m4為后綴名的文件,m4文件叫MacroProcessor Library,m4文件是編譯基礎(chǔ)中最核心的文件,這個(gè)文件主要是用autoconf來產(chǎn)生configure配置文件,繼而自動(dòng)生成Makefile文件。這個(gè)文件夾中Windows平臺(tái)下貌似沒什么作用,可能是我還不知道吧,在此略過。
10、man文件夾:man文件夾貌似是用來生成linux或者其他平臺(tái)下的幫助文件,估計(jì)是可以使用linux下的man幫助
12、吧。Windows平臺(tái)下貌似也沒什么用,略過。
11、ogr文件夾:用過GDAL的肯定知道ogr庫吧,在很久很久以前,GDAL和OGR是兩個(gè)庫,GDAL專門負(fù)責(zé)讀取柵格數(shù)據(jù),OGR庫負(fù)責(zé)讀取矢量數(shù)據(jù),然后可能是因?yàn)閮蓚€(gè)庫分開有些不方便,比如GDAL的算法庫中經(jīng)常會(huì)用到矢量數(shù)據(jù)的讀取,或者還有別的原因吧,現(xiàn)在將這兩個(gè)庫整合在了一起,目前OGR庫就是GDAL庫的一個(gè)子集。其實(shí)OGR庫還是可以單獨(dú)編譯出來的。Ogr文件夾就是存放OGR庫源代碼的文件夾。這個(gè)文件夾里面也是有很多東西的,后面再詳細(xì)進(jìn)行介紹。
12、port文件夾:port文件夾中存放的是port庫的東西,port庫對于GDAL庫來說
13、是一個(gè)底層的支持庫,port庫中定義了一些字符串的操作,文件處理,網(wǎng)頁請求,數(shù)據(jù)庫連接,哈希表,字符加密文件壓縮等基礎(chǔ)的函數(shù)。比如GDAL中所有的導(dǎo)出函數(shù)符號(hào)CPL_DLL就是在這個(gè)port文件夾中定義的,還有frmts文件夾中,打開文件,打開數(shù)據(jù)庫,打開網(wǎng)絡(luò)路徑等都是用的port庫,以及字符串的處理等。
13、swig文件夾:swig文件夾主要是存放swig的腳本。Swig全稱叫SimplifiedWrapper and Interface Generator,網(wǎng)址是www.swig.org,????????? swig的作用就是可以將C/C++寫的庫封裝為Python,C#,Java,P
14、erl和 Ruby等其他語言的訪問接口。網(wǎng)上GDAL的C#版本就是使用swig來編譯出來實(shí)現(xiàn)的,很強(qiáng)大吧。后面有時(shí)間的話,會(huì)寫一篇關(guān)于swig編譯GDAL的文章。
14、vb6文件夾:這個(gè)文件夾中用來將GDAL編譯成一個(gè)VB6的模塊,對于里面具體的文件說明,以及如何編譯參考文件夾中的readme.txt,由于我對VB6的使用,還是僅限于拖個(gè)按鈕,寫個(gè)單擊事件的基礎(chǔ),對于模塊之間的調(diào)用,實(shí)在是不太懂,所在就不說明了。想用VB6使用GDAL的可以自己研究一下,應(yīng)該也不是很難。
15、wince文件夾:顧名思義,這個(gè)文件夾中的東西就是用來編譯Windows CE平臺(tái)下的GDAL庫用的,具體編譯請
15、參考其中的說明文檔。
文件夾介紹完了,下面對文件進(jìn)行一個(gè)大概說明:
1、aclocal.m4:同上面的m4文件夾
2、autogen.sh:Linux平臺(tái)下的shell文件,用來調(diào)用autoconf來產(chǎn)生configure配置文件的。
3、COMMITERS:該文件中的內(nèi)容是GDAL開發(fā)人員的信息,姓名,聯(lián)系郵箱以及各自負(fù)責(zé)開發(fā)的模塊說明等。
4、config.guess,config.sub,configure,configure.in:這四個(gè)文件貌似都是linux平臺(tái)下的配置文件,中Windows下沒啥用,略過。
5、Doxyfile:Doxyfile就是前面doc文件夾中說明
16、提到的doxygen的工程文件,用來生成幫助文檔用的,后面在介紹doxygen的使用是會(huì)對該文件進(jìn)行一個(gè)說明。
6、GDALmake.opt.in:這個(gè)文件是linux平臺(tái)下的GDAL庫編譯配置文件,功能在后面的nmake.opt中介紹。
7、gdalnightlysvn.sh:Linux平臺(tái)下調(diào)用svn獲取GDAL源代碼的一個(gè)shell腳本。
8、GNUmakefile:GNU的make文件。
9、HOWTO-RELEASE:GDAL發(fā)布版本的一些說明。
10、????install-sh:GDAL的安裝shell腳本,Linux平臺(tái)下。
11、????LICENSE.TXT:G
17、DAL的許可說明文件。
12、????ltmain.sh:libtool的shell腳本,Linux平臺(tái)下,Windows下貌似沒用到。
13、????makefile.vc:GDAL的編譯文件,用來將源代碼編譯成dll文件,后面會(huì)在GDAL編譯中作一個(gè)介紹。
14、????makegdal_gen.bat:用來生成VS的工程文件的一個(gè)批處理文件,后面在GDAL編譯中會(huì)對該文件的使用方式做一個(gè)說明。
15、????makegdal10.sln:文件夾中所有的sln文件都是VS的項(xiàng)目文件,文件名后的數(shù)字代表的是VS的版本號(hào)。
16、????makegdal10.vcxproj和make
18、gdal71.vcproj:VS的工程文件,該文件可以由makegdal_gen.bat文件自動(dòng)生成,后面詳細(xì)介紹。
17、????mkbindist.sh,mkgdaldist.sh和mktestdist.sh:三個(gè)shell腳本文件,Windows下沒用,略過。
18、????NEWS:GDAL的新增功能,以及修復(fù)的bug記錄等。
19、????nmake.opt:GDAL編譯選項(xiàng)配置文件,在編譯GDAL中,可以指定GDAL綁定的其他庫等都在這個(gè)里面進(jìn)行設(shè)置。在后面的GDAL編譯中會(huì)詳細(xì)介紹說明。
20、????nmake-wince.opt:編譯wince版本的編譯選項(xiàng)配置文件。
21、????PROVENANCE.TXT:GDAL目錄說明文件,如果上面說明的不夠清楚,可以參考這個(gè)文件。
22、????submake.bat:一個(gè)編譯的批處理文件,目前沒啥用。
23、????svnkeywords.sh:又是svn的一個(gè)shell腳本。
24、????VERSION:GDAL版本信息。
第一篇完,后續(xù)文章陸續(xù)奉上,敬請期待新作!
6 / 6