GDAL库安装.docx

上传人:b****5 文档编号:6842353 上传时间:2023-01-11 格式:DOCX 页数:9 大小:814.99KB
下载 相关 举报
GDAL库安装.docx_第1页
第1页 / 共9页
GDAL库安装.docx_第2页
第2页 / 共9页
GDAL库安装.docx_第3页
第3页 / 共9页
GDAL库安装.docx_第4页
第4页 / 共9页
GDAL库安装.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

GDAL库安装.docx

《GDAL库安装.docx》由会员分享,可在线阅读,更多相关《GDAL库安装.docx(9页珍藏版)》请在冰豆网上搜索。

GDAL库安装.docx

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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1