GDAL库简介以及在Windows下编译过程
GDAL(Geospatial Data Abstraction Library,地理空間數據抽象庫)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。官網http://www.gdal.org/index.html,也可參考GitHub https://github.com/OSGeo/gdal,最新release版本為2.1.1.
GDAL是一個在X/MIT許可協議下讀寫空間數據(包括柵格數據和矢量數據)的開源庫,它利用抽象數據模型來表達所支持的各種文件格式,還使用一系列命令行工具來進行數據轉換和處理。
OGR(OGR Simple Features Library)是GDAL項目的一個分支,功能與GDAL類似,只是它提供對矢量數據的讀寫支持。同時它實現了一個對空間參考信息進行處理的類,用來對空間數據的空間信息進行處理。
GDAL支持的數據格式分為兩種:柵格數據格式和矢量數據格式。GDAL在每次版本更新的時候,都會加入對新的格式的支持。
GDAL2.1.1源碼中目錄結構介紹:
alg:該目錄下存放的是GDAL庫中提供的一些算法的源代碼;
apps:該目錄下存放的是GDAL庫中提供的一些命令行工具集的源代碼;
bridge:該目錄下存放的是用來連接GDAL抽象類的定義與GDAL自己的結構體定義及其實現的源代碼;
data:該目錄下存放的是GDAL庫中需要用到的一些”配置文件”;
doc:該目錄下存放的是用來生成GDAL幫助文檔的一些dox文件;
frmts:該目錄下存放的是GDAL針對不同的特定圖像格式解析的源代碼;
gcore:該目錄下存放的是GDAL抽象類的數據集、圖像、波段的讀寫接口等代碼;
html:該目錄下存放的是GDAL生成的幫助文檔;
m4:該目錄下存放的是以m4為后綴的文件,m4文件叫Macro Processor Library,主要是用autoconf來產生configure配置文件,繼而自動生成Makefile文件;該目錄在Windows下無用;
man:該目錄下存放的是用來生成Linux或者其它平臺下的幫助文件,Windows下無用;
ogr:該目錄下存放的是OGR庫源代碼;
port:該目錄下存放的是CPL庫的源代碼;CPL是一個GDAL的底層支持庫,CPL庫中定義了一些字符串的操作、文件處理、網頁請求、數據庫連接、哈希表、字符加密文件、壓縮等基礎的函數;
swig:該目錄下存放的是swig的腳本;swig的作用就是可以將C/C++的庫封裝為Python、C#、Java、Perl和Ruby等其它語言的訪問接口;
vb6:該目錄用來將GDAL編譯成一個VB6的模板;
alcocal.m4:該文件是用autoconf來產生configure配置文件;
autogen.sh:shell文件,該文件通過調用autoconf來產生configure配置文件;
COMMITERS:該文件中的內容是GDAL開發人員的信息,包括姓名、聯系郵箱以及各自負責開發的模塊說明等;
Doxyfile:用來生成幫助文件;
GDALmake.opt.in:該文件是Linux平臺下的GDAL庫編譯配置文件;
gdalnightlysvn.sh:該文件是Linux平臺下調用svn獲取GDAL源代碼的一個shell腳本;
GNUmakefile:GNU的make文件;
HOWTO-RELEASE:該文件是GDAL發布版本的一些說明;
install-sh:該文件是Linux平臺下GDAL安裝的shell腳本;
LICENSE.TXT:該文件是GDAL的許可說明文件;
ltmain.sh:Linux平臺下libtool的shell腳本,windows下無用;
makefile.vc:GDAL的編譯文件,用來將源代碼編譯成dll文件;
makegdal_gen.bat:用來生成VS的工程文件的批處理文件;
NEWS:該文件是介紹GDAL的新增功能以及修復的bug記錄等;
nmake.opt:GDAL編譯選項配置文件,在編譯GDAL時,可以指定GDAL綁定的其它庫;
PROVENANCE.TXT:GDAL目錄說明文件;
VERSION:GDAL版本信息。
下面介紹GDAL2.1.1源碼在windows vs2013中的編譯步驟:
1.??????從http://download.osgeo.org/gdal/2.1.1/下載最新穩定版本2.1.1,gdal211.zip并解壓縮至E:\GitCode\GDAL_Test\src\gdal目錄下;
2.??????修改nmake.opt文件: MSVC_VER=1800 GDAL_HOME = "E:\GitCode\GDAL_Test\lib_x64_release"
3.??????以管理員身份打開”VS2013 x64 兼容工具命令提示”;
4.??????首先切換到VS2013的安裝目錄下執行:
C:\Program Files (x86)\Microsoft Visual Studio12.0\VC\vcvarsall.bat ?amd64;
5.??????然后切換到GDAL源碼目錄E:\GitCode\GDAL_Test\src\gdal下依次執行:
nmake /f makefile.vc MSVC_VER=1800 WIN64=YES
nmake /f makefile.vc MSVC_VER=1800 WIN64=YES install
nmake /f makefile.vc MSVC_VER=1800 WIN64=YES devinstall
6.??????執行完以上三條命令后,就會在E:\GitCode\GDAL_Test\lib_x64_release目錄下生成gdal x64 release相應頭文件、靜態庫和動態庫
7.??????按照以上類似步驟即可生成x64 debug、win32 release、win32 debug相應庫:
C:\Program Files (x86)\Microsoft Visual Studio12.0\VC\vcvarsall.bat x86
nmake /f makefile.vc MSVC_VER=1800 DEBUG=1
如按照以上的步驟生成的庫運行時提示缺失msvcr120.dll,則修改nmake.opt文件,將130行到138行,四處的/MD改成/MT即可。
按照上面的步驟只能生成相應的庫,確不能生成vc工程,下面介紹下能生成vc工程的操作步驟:
1.??????將nmake.opt文件中的SYM_PREFIX=_ 改為SYM_PREFIX=
2.??????將makefile.vc中的內容
BASE_INCLUDE = /INCLUDE:_GDALSimpleImageWarp@36 \/INCLUDE:_GDALReprojectImage@48 \/INCLUDE:_GDALComputeMedianCutPCT@32 \/INCLUDE:_GDALDitherRGB2PCT@28 \/INCLUDE:_OCTNewCoordinateTransformation@8 $(VB6_SAFEARRAYSYM)
調整為:
BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation $(VB6_SAFEARRAYSYM)
3.??????在剛才打開的命令行窗口中輸入:makegdal_gen.bat 10.00 64 > makegdal10.vcproj ,執行完后會生成makegdal10.vcproj;
4.??????打開vs2013,將其makegdal10.vcproj加入到工程中,會升級到vs2013;
創建一個控制臺工程GDAL_Test,測試生成庫的正確性,測試代碼如下:
#include <iostream>
#include <gdal_priv.h>
#include <ogrsf_frmts.h>
#include <gdal_alg.h>int main()
{const char* image_name = "E:/GitCode/GDAL_Test/test_images/a.tif";GDALAllRegister();GDALDataset* poSrc = (GDALDataset*)GDALOpen(image_name, GA_ReadOnly);if (poSrc == nullptr) {std::cout << "input image error" << std::endl;return -1;}int width_src = poSrc->GetRasterXSize();int height_src = poSrc->GetRasterYSize();int band_count_src = poSrc->GetRasterCount();fprintf(stderr, "width: %d, height: %d, bandCount: %d\n", width_src, height_src, band_count_src);GDALDataType gdal_data_type = poSrc->GetRasterBand(1)->GetRasterDataType();int depth = GDALGetDataTypeSize((GDALDataType)gdal_data_type);fprintf(stderr, "depth: %d\n", depth);GDALClose((GDALDatasetH)poSrc);std::cout << "ok" << std::endl;return 0;
}
結果如下:
由于編譯GDAL源碼需要較長的時間,這里把windows下x86/x64 debug/release編譯好的庫都放在了GitHub上,有需要的可以去下載。
GitHub:https://github.com/fengbingchun/GDAL_Test
總結
以上是生活随笔為你收集整理的GDAL库简介以及在Windows下编译过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11中Lambda表达式的使用
- 下一篇: GDAL2.1.1库在Ubuntu14.