学习GDAL的话推荐两个网站。
GDAL的官方文档:www.gdal.org
李民录老师的博客:http://blog.csdn.net/liminlu0314/article/category/777646
下面进入正题。
笔者的系统为RHEL4。
建议Linux的使用者习惯非root权限的操作,这是一个好习惯,在工作中会很有帮助。
首先安装GDAL依赖库PROJ.4和GEOS。
PROJ.4是提供投影坐标系相关操作的库,GEOS是提供空间分析计算相关的库。都是开源的项目,可以自行Google最新的下载地址。
由于是非root权限,所以需要自行在~/local/目录下创建proj和geos目录(最好带上版本号)。然后将当前操作目录跳转到解压缩后的PROJ.4工程的根目录,如/.../proj-4.8.0。接下来进行源码安装三部曲。
./configure --prefix=/home/users/yourname/local/proj-4.8.0 --without-jni make make install
配置的时候注意一定要配置安装路径,由于没有root权限,如果直接安装会失败。而安装路径就是上面创建的目录。这里笔者的机器由于如果包含jni的话编译会报错,所以在配置的时候将其去掉了。原因可能是版本或者Java配置的问题。反正我是用C++来使用GDAL。这里就要多试一试了,如果可以直接编译成功,那就不需要后面的选项了。
然后是安装GEOS,同样的步骤。
./configure --prefix=/home/users/yourname/local/geos-3.4.2 make make install
安装完依赖库后,开始正式安装GDAL。
还是先跳转到解压后的工程根目录,然后进行三部曲。
./configure --prefix=/home/users/yourname/local/gdal-1.11.1 --with-geos=/home/users/yourname/local/geos-3.4.2/bin/geos-config make make install
这里解释一下,在执行完第一行语句后如果看到GEOS support: yes,则证明GDAL有了GEOS库的支持,否则GDAL库中一些功能将无法正常使用。
这里笔者的机器又出现了问题:无法编译通过。报了一个有关cpl_virtualmem.cpp的错误,通过一番查找发现系统的mremap函数的参数和这个文件中的不一致,所以手动修改源码。将cpl_virtualmem.cpp里面的宏定义(如下)注释掉即可。
#define HAVE_5ARGS_MREMAP
如果可以直接编译通过,可以无视上面的啰嗦。
这样安装的过程就基本完成,下面开始配置一些开发需要的环境。
由于GDAL对PROJ.4是动态加载的,所以要将PROJ.4的动态链接库路径加到变量LD_LIBRARY_PATH中,同时将GDAL的bin路径加到变量PATH中。
先用vim打开~/.bashrc文件,在末尾加上下面的代码。
export PATH=$PATH:/home/users/yourname/local/gdal-1.11.1/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/users/yourname/local/gdal-1.11.1/lib:/home/users/yourname/local/proj-4.8.0/lib
保存退出后,执行source ~/.bashrc才真正的更新了变量。
然后在命令行中输入gdalinfo回车,如果出现提示信息证明安装成功。
下面介绍一下用C++来调用GDAL库的方法。
首先,新建一个GDALTest.cpp文件,内容如下。
1 #include "gdal.h" 2 #include "ogrsf_frmts.h" 3 4 int main(int argc,char * argv[]) 5 { 6 RegisterOGRTAB(); 7 8 OGRSFDriverRegistrar *registrar = OGRSFDriverRegistrar::GetRegistrar(); 9 int count =registrar->GetDriverCount(); 10 printf("Total: %d\n",count); 11 for(int i=0;i<count;i++){ 12 printf("%s\n",registrar->GetDriver(i)->GetName()); 13 } 14 15 return 0; 16 }
这段代码的意思是输出OGR驱动。
然后进行编译。
g++ GDALTest.cpp -I ./ -I /home/users/yourname/local/gdal-1.11.1/include -L/home/users/yourname/local/gdal-1.11.1/lib -lgdal -o GDALTest
最后执行./GDALTest,如果看到正常的输出则说明成功。