GDAL库介绍、安装与使用介绍.docx_第1页
GDAL库介绍、安装与使用介绍.docx_第2页
GDAL库介绍、安装与使用介绍.docx_第3页
GDAL库介绍、安装与使用介绍.docx_第4页
GDAL库介绍、安装与使用介绍.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.GDAL介绍GDAL是一个转换各种栅格数据格式的库。包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS对栅格,矢量,3D数据模型的抽象能力实在令人叹服)。当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库ogr(转换矢量GIS数据),这样这个库就同时具备了操作栅格和矢量数据的能力,目前ogr能够支持的数据格式包括:Arc/Info Binary Coverage、DWG、ESRI Personal GeoDatabase、ArcSDE、ESRIShapefile、GML、GRASS、Mapinfo File、Microstation DGN、ODBC、Oracle Spatial和PostgreSQL等。应该说,这就基本包括了我们平常用到的所有矢量型GIS文件格式了。Gdal支持的栅格数据格式参阅/formats_list.html2.GDAL安装(1)下载gdal的安装文件,/gdal/gdal142.zip,解压到某目录下,如C:gdalsrc下。这里我们假定VC6的安装在默认目录C:Program FilesMicrosoft Visual Studio8下。(2)启动cmd,即打开控制台窗口。进入VC6的安装目录下,如cd C:Program FilesMicrosoftVisual Studio8VCbin,在此目录下有个文件VCVARS32.BAT,执行一下这个文件,然后重新回到C:gdalsrc下。运行命令nmake /f makefile.vc。编译完成后,用记事本打开文件C:gdalsrcnmake.opt,根据自己的情况修改GDAL_HOME = 这一行,这个指的是最终GDAL的安装目录,比如说我们安装在C:GDAL,那么这一行就是GDAL_HOME = C:GDAL,在C:gdalsrc下执行nmake /f makefile.vc install,然后是nmake /f makefile.vc devinstall,然后我们需要的东西就安装到了C:GDAL下。3.GDAL使用初次使用visual studio 对工具不熟悉,有些步骤可以配置的(1)在VS2005中新建win32控制台程序 testGDALconsole,(向导中附加选项不能选为空项目)将C:GDALbingdal14.dll拷贝到testGDALconsole目录下的debug目录中。(否则运行时会提示找不到gdal14.dll)(2)在工程的Library files中和Include files中分别添加GDAL的LIB文件目录和头文件目录,这步我不会,就直接将gdal_priv.h拷贝到testGDALconsole.cpp所在目录下(3)添加一个文件gdal_i.lib。使用 #pragma comment (lib,.libgdal_i.lib)(这步没做)(4)程序文件样本程序如下:#include stdafx.h#include gdal_priv.h#include using namespace std;int main(int argc, char* argv) if(argc!=2) return 0; GDALDataset *poDataset; GDALAllRegister(); poDataset = (GDALDataset *) GDALOpen( argv1, GA_ReadOnly ); if( poDataset != NULL ) coutRasterXSize:GetRasterXSize()endl; coutRasterYSize:GetRasterYSize()endl; coutRasterCount:GetRasterCount()test 1.JPGRasterXSize:800RasterYSize:600RasterCount:3练习总结:1)使用 #pragma comment (lib,.libgdal_i.lib)来引入外部的库文件或者在Visual studio里面设置project properties- Linker- Input里面的Additional Dependencies里面加lib properties- General- Additional Libary Directories加Lib目录还没有解决,未知原因,以后熟悉了在看下面附上一个一个GDAL的读写数据例子引自 /tangnf/archive/2008/10/26/3152538.aspx/#include stdafx.h#include fangshibo.h#include #include/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 application 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_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.ReverseFind(.); 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 = 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 = hdf) 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; 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;/在后面再释放,因为很多个指针指向同一一段内存,不能随便释放内存哦 / /在这可以开始运算咯 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论