GDAL库安装.docx
《GDAL库安装.docx》由会员分享,可在线阅读,更多相关《GDAL库安装.docx(9页珍藏版)》请在冰豆网上搜索。
GDAL库安装
简单介绍:
OGR是一个读取和处理GSI矢量数据的库。
这个库可以读取和处理多种流行的矢量数据,OGR是GDAL(http:
//www.gdal.org/)的一个部分,只要你安装了GDAL库,就已经拥有了OGR库。
一、安装:
1.先下载一个GDAL版本(C++)(http:
//trac.osgeo.org/gdal/wiki/BuildHints)。
2.然后打开控制(DOS)台,找到.....\MicrosoftVisualStudio.NET2010\Vcbin\vcvars32.bat,注册VC编译环境。
进入VS安装目录
执行VS目录下的VCVARS32文件
3.然后把GDAL库放到一个目录下,如C:
\gdal-1.9.1\gdal-1.9.1;用VS打开并打开文件夹下的nmake.opt修改GDAL_HOME="C:
\GDAL"把路径改到需要把gdal安装的地方。
cd进入刚才源文件的解压目录C:
\gdal-1.9.1\gdal-1.9.1。
将gdal解压到C盘
修改nmake
cd进入解压目录
4.然后在DOS中依次输入:
nmake/fmakefile.vc
nmake/fmakefile.vcinstall
nmake/fmakefile.vcdevinstall
中间等待编译处理。
处理完后系统将会把我们需要的文件拷贝到开始设定的安装目录,如刚才设置的C:
\GDAL
二、应用
1.在新建项目下:
属性->C/C++->常规->附加包含目录:
"C:
\GADL\include"。
属性->链接器->常规->附加库目录:
"C:
\GADL\lib".
属性->连接器->输入->附加依赖项:
gdal_i.lib.
2.将C:
\GDAL\bin\gdal14.dll拷贝到vs新建项目的debug文件夹中。
(否则运行时会提示找不到gdal14.dll)
添加所需的头文件就可以用了。
OGR参考(http:
//www.gdal.org/ogr/index.html)
三、实例
下面附上一个一个GDAL的读写数据例子
引自
//
#include"stdafx.h"
#include"fangshibo.h"
#include
#include
///gdal头文件
#include"..\\include\\gdal.h"
#include"..\\include\\gdal_priv.h"
#include"..\\include\\ogr_srs_api.h"
#include"..\\include\\cpl_string.h"
#include"..\\include\\cpl_conv.h"
#pragmacomment(lib,"..\\lib\\gdal_i.lib")
/////////////////////////////////////////////////////////////////////////////
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//Theoneandonlyapplicationobject
CWinApptheApp;
usingnamespacestd;
///////////////////////
voidMaxNDVI(vectorfiles,CStringmaxNDVfile)
{
// GDALAllRegister();
vectordatasets;
//打开文件
for(inti=0;i {
CStringfilename=files[i];
GDALDataset*tmpDataset=(GDALDataset*)GDALOpen(files[i],
GA_ReadOnly);
if(tmpDataset!
=NULL)
{
datasets.push_back(tmpDataset);
}
else
{
fprintf(stderr,"GDALOpenfailed-%d\n%s\n",CPLGetLastErrorNo(),
CPLGetLastErrorMsg());
}
tmpDataset=NULL;//以后再释放
}
////读取数据咯,按行来读取
//GDALDir
if(datasets.size()==0)return;
GDALDataset*tmpDataset=datasets[0];
if(tmpDataset!
=NULL)
{
GDALDriver*driver=NULL;
intindex=maxNDVfile.ReverseFind('.');
if(index<0)
return;
if(index==maxNDVfile.GetLength()-1)
return;
CStringsuffix=maxNDVfile.Right(maxNDVfile.GetLength()-1-index);
suffix.MakeLower();
if(suffix=="bmp")
driver=GetGDALDriverManager()->GetDriverByName("BMP");
elseif(suffix=="jpg")
driver=GetGDALDriverManager()->GetDriverByName("JPEG");
elseif(suffix=="tif")
driver=GetGDALDriverManager()->GetDriverByName("GTiff");
elseif(suffix=="img")
driver=GetGDALDriverManager()->GetDriverByName("HFA");
elseif(suffix=="bt")
driver=GetGDALDriverManager()->GetDriverByName("BT");
elseif(suffix=="ecw")
driver=GetGDALDriverManager()->GetDriverByName("ECW");
elseif(suffix=="fits")
driver=GetGDALDriverManager()->GetDriverByName("FITS");
elseif(suffix=="gif")
driver=GetGDALDriverManager()->GetDriverByName("GIF");
elseif(suffix=="hdf")
driver=GetGDALDriverManager()->GetDriverByName("HDF4");
elseif(suffix=="hdr")
driver=GetGDALDriverManager()->GetDriverByName("EHdr");
intw=tmpDataset->GetRasterXSize();
inth=tmpDataset->GetRasterYSize();
GDALDataset*maxNDV=driver->Create(maxNDVfile,w,h,1,GDT_Float32,NULL);
intxOff=0;
intyOff=0;
intwidth=w;
intheight=1;//一行一行地读取
vectorbufs;
for(inti=0;i {
float*buf=newfloat[width*height];
bufs.push_back(buf);
buf=NULL;
}
float*newbuf=newfloat[width*height];
GDALRasterBand*newpoband=maxNDV->GetRasterBand
(1);
for(intj=0;j {
for(inti=0;i {
GDALDataset*tmpDt=datasets[i];
GDALRasterBand*poband=tmpDt->GetRasterBand
(1);
float*buf=bufs[i];
xOff=0;
yOff=j;
poband->RasterIO
(GF_Read,xOff,yOff,width,height,buf,width,height,GDT_Float32,0,0);
buf=NULL;
tmpDt=NULL;//在后面再释放,因为很多个指针指向同一一段内存,不能随
便释放内存哦
}
//////////
//在这可以开始运算咯
for(intk=0;k {
//下面这段代码以后要支持均值,极差,方差
for(intkk=0;kk {
float*buf=bufs[kk];
if(kk==0)//初始化
{
newbuf[k]=buf[k];
}
if(buf[k]>newbuf[k])//最大的,稍微改下就是最小值,
{
newbuf[k]=buf[k];
}
}
}
//////////写入数据
newpoband->RasterIO
(GF_Write,xOff,yOff,width,height,newbuf,width,height,GDT_Float32,0,0);
}
deletenewbuf;
newbuf=NULL;
for(i=0;i {
if(bufs[i]!
=NULL)
deletebufs[i];
}
bufs.resize(0);
deletemaxNDV;
maxNDV=NULL;
deletedriver;
driver=NULL;
}
tmpDataset=NULL;
//释放掉内存
for(i=0;i {
if(datasets[i]!
=NULL)
{
deletedatasets[i];
datasets[i]=NULL;
}
}
datasets.resize(0);
}