1、GDAL库安装简单介绍:OGR是一个读取和处理GSI矢量数据的库。这个库可以读取和处理多种流行的矢量数据,OGR是GDAL(http:/www.gdal.org/)的一个部分,只要你安装了GDAL库,就已经拥有了OGR库。一、安装: 1.先下载一个GDAL版本(C+) (http:/trac.osgeo.org/gdal/wiki/BuildHints)。 2.然后打开控制(DOS)台,找到.Microsoft Visual Studio .NET 2010Vcbinvcvars32.bat,注册VC编译环境。 进入VS安装目录执行VS目录下的 VCVARS32 文件 3.然后把GDAL库放到
2、一个目录下,如C:gdal-1.9.1gdal-1.9.1;用VS打开并打开文件夹下的nmake.opt修改GDAL_HOME = C:GDAL把路径改到需要把gdal安装的地方。cd进入刚才源文件的解压目录C:gdal-1.9.1gdal-1.9.1。将gdal解压到C盘修改nmakecd进入解压目录4.然后在DOS中依次输入: nmake /f makefile.vc nmake /f makefile.vc install nmake /f makefile.vc devinstall 中间等待编译处理。处理完后系统将会把我们需要的文件拷贝到开始设定的安装目录,如刚才设置的C:GDAL
3、二、应用1. 在新建项目下: 属性-C/C+-常规-附加包含目录:C:GADLinclude。 属性-链接器-常规-附加库目录:C:GADLlib. 属性-连接器-输入-附加依赖项:gdal_i.lib. 2. 将C:GDALbingdal14.dll拷贝到vs新建项目的debug文件夹中。(否则运行时会提示找不到gdal14.dll) 添加所需的头文件就可以用了。 OGR参考(http:/www.gdal.org/ogr/index.html)三、实例下面附上一个一个GDAL的读写数据例子引自 /#include stdafx.h#include fangshibo.h#include #i
4、nclude/gdal头文件#include .includegdal.h#include .includegdal_priv.h#include .includeogr_srs_api.h#include .includecpl_string.h#include .includecpl_conv.h#pragma comment (lib,.libgdal_i.lib)/#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ The one and only applic
5、ation objectCWinApp theApp;using namespace std;/void MaxNDVI(vector files,CString maxNDVfile) / GDALAllRegister(); vector datasets; /打开文件 for(int i=0;ifiles.size();i+) CString filename=filesi; GDALDataset *tmpDataset = (GDALDataset *) GDALOpen( filesi,GA_ReadOnly); if(tmpDataset!=NULL) datasets.push
6、_back(tmpDataset); else fprintf( stderr, GDALOpen failed - %dn%sn, CPLGetLastErrorNo(),CPLGetLastErrorMsg() ); tmpDataset=NULL;/以后再释放 /读取数据咯,按行来读取 /GDALDir if(datasets.size()=0)return; GDALDataset *tmpDataset=datasets0; if(tmpDataset!=NULL) GDALDriver * driver=NULL; int index = maxNDVfile.ReverseFin
7、d(.); if (index GetDriverByName(BMP); else if (suffix = jpg) driver = GetGDALDriverManager()-GetDriverByName(JPEG); else if (suffix = tif) driver = GetGDALDriverManager()-GetDriverByName(GTiff); else if (suffix = img) driver = GetGDALDriverManager()-GetDriverByName(HFA); else if (suffix = bt) driver
8、 = GetGDALDriverManager()-GetDriverByName(BT); else if (suffix = ecw) driver = GetGDALDriverManager()-GetDriverByName(ECW); else if (suffix = fits) driver = GetGDALDriverManager()-GetDriverByName(FITS); else if (suffix = gif) driver = GetGDALDriverManager()-GetDriverByName(GIF); else if (suffix = hd
9、f) driver = GetGDALDriverManager()-GetDriverByName(HDF4); else if (suffix = hdr) driver = GetGDALDriverManager()-GetDriverByName(EHdr); int w=tmpDataset-GetRasterXSize(); int h=tmpDataset-GetRasterYSize(); GDALDataset *maxNDV=driver-Create(maxNDVfile,w,h,1,GDT_Float32,NULL); int xOff=0; int yOff=0;
10、int width=w; int height=1;/一行一行地读取 vector bufs; for(int i=0;iGetRasterBand(1); for(int j=0;jh;j+) for(int i=0;iGetRasterBand(1); float *buf=bufsi; xOff=0; yOff=j; poband-RasterIO(GF_Read,xOff,yOff,width,height,buf,width,height,GDT_Float32,0,0); buf=NULL; tmpDt=NULL;/在后面再释放,因为很多个指针指向同一一段内存,不能随便释放内存哦
11、/ /在这可以开始运算咯 for(int k=0;kw;k+)/对于每个像元 /下面这段代码以后要支持均值,极差,方差 for(int kk=0;kknewbufk)/最大的,稍微改下就是最小值, newbufk=bufk; /写入数据 newpoband-RasterIO(GF_Write,xOff,yOff,width,height,newbuf,width,height,GDT_Float32,0,0); delete newbuf; newbuf=NULL; for( i=0;ibufs.size();i+) if(bufsi!=NULL) delete bufsi; bufs.resize(0); delete maxNDV; maxNDV=NULL; delete driver; driver=NULL; tmpDataset=NULL; /释放掉内存 for( i=0;idatasets.size();i+) if(datasetsi!=NULL) delete datasetsi; datasetsi=NULL; datasets.resize(0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1