GIS的积累
It is never to late to learn

导航

 

1、编译加使用:http://blog.csdn.net/gisblog/archive/2008/10/06/3021933.aspx
如何在CSharp中使用GDAL?收藏
    GDAL库的简洁、高效深受开发人员的喜爱,很多开源的GIS软件甚至是商业GIS软件都使用了这个库。GDAL使用C++,在Visual studio环境下开发,对C,C++的支持当然不会有什么问题。但对于C#、Python、Java来说,过程就相对繁琐一些,对初学者造成了不少的麻烦。本文以GDAL1.50为例,详细说明在CSharpe语言中使用GDAL的环境配置问题,至于Python的环境配置问题,在另一篇文章“如何在CSharpe中使用GDAL”中另行讨论。希望对初用GDAL的人员有所帮助。
    GDAL从1.4.1开始添加了swig,以支持.NET环境下的C#语言。在swig文件夹中包含了C#源代码。以下是主要的处理步骤:

1、准备一个C++编译器。建议使用Visual studio2005。

2、下载源代码。

地址:http://download.osgeo.org/gdal/gdal150.zip。

3、把gdal150.zip解压至“C:\gdal-1.5.0”,当然放在其它文件夹也可以。

4、修改源代码中的错误。源文件“C:\gdal-1.5.0\frmts\leveller\levellerdataset.cpp”的第171行的内容如下:

{ "?, kPI / 180.0, UNITLABEL_DEGREE },

在?号后面加上双引呈",改成如下形式:

{ "?", kPI / 180.0, UNITLABEL_DEGREE },

你可以使用任何一种文本文件的编辑工具来进行修改。笔者尝试过下载GDAL1.52的版本,存在同样的问题,真想不到GDAL库也会犯如此低级的错误。

5、创建安装的目标文件夹“C:\gdal-runtime”,稍后的编译配置中,我们将配置GDAL把编译后将会安装到这个文件夹内。

6、修改编译配置文件夹“C:\gdal-1.5.0\nmake.opt”。以下是第41至第43行的内容:

!IFNDEF GDAL_HOME

GDAL_HOME = "C:\warmerda\bld"

!ENDIF

默认的情况下,GDAL将会安装到"C:\warmerda\bld"文件夹内,为了更好地了解安装过程,我们把第42行修改成如下内容:

GDAL_HOME = "C:\gdal-runtime"

7、编译源文件。使用“Visual Studio 2005 命令提示”工具来进行,(该工具位于“开始\程序\Microsoft Visual Studio 2005\Visual Studio Tools”内)。

打开“Visual Studio 2005 命令提示”工具,键入"cd C:\gdal-1.5.0",进入源文件所在的文件夹,再键入"nmake /f makefile.vc"执行编译。编译过程可能需要一些时间,主要取决于机器的性能。

如果没有第4步的修改,将会出现大量的编译错误,累积至100个后,VS2005将自动停止编译。

8、安装文件。

键入“nmake /f makefile.vc install”,执行完毕后,"C:\gdal-runtime"文件夹下增加了bin,data,及html文件夹。

键入“nmake /f makefile.vc devinstall”执行完毕后,"C:\gdal-runtime"文件夹下增加了lib,include文件夹。这两个文件夹主要用于C及C++的开发。

在"C:\gdal-runtime\bin"文件夹内已经生成了gdal15.dll文件,这是GDAL库的核心,不管采用何种开发方式,最终都由这个DLL文件来执行实质性的操作。

9、编译C#源文件。

键入“cd C:\gdal-1.5.0\swig\csharp”,进入C#源文件所在的文件夹。

键入“nmake /f makefile.vc”,编译完毕后生成8个DLL文件:gdal_csharp.dll、gdalconst_csharp.dll、ogr_csharp.dll、osr_csharp.dll和gdal_wrap.dll、gdalconst_wrap.dll、ogr_wrap.dll、osr_wrap.dll。前面4个文件名中都含有"csharp",用法与另外4个稍有不同,稍后详细讨论。

10、把8个DLL文件复制到安装文件夹"C:\gdal-runtime\bin"。

11、创建环境变量。

把路径C:\gdal-runtime\bin添加到系统变量Path,如果没有该变量,则应新建一个。如果你使用的是windows2003,添加后不必重启,修改即时生效;如果你不能确定是否已经生效,可以在doc窗口内输入“echo %path%”,如果显示的内容中包含了"C:\gdal-runtime\bin",则表示修改已经生效。如果你还是无法确定,那就重启吧,这是最安全的方式。

12、在VS2005 CSharp项目中添加对GDAL的引用。新建一个CShapr应用程序项目,然后添加对C:\gdal-runtime\bin中4个含有"csharp"的DLL文件的引用。至此我们就可以使用GDAL的功能了。为了测试GDAL是否可以运行,我们为窗体的Load事件增加如下的代码:

private void Form1_Load(object sender, EventArgs e)
{
try
{
OSGeo.GDAL.Gdal.AllRegister();
OSGeo.GDAL.Dataset dataSet = OSGeo.GDAL.Gdal.Open(@"C:\F-49-32-(10).tif", Access.GA_ReadOnly);
int w = dataSet.RasterXSize;
int h = dataSet.RasterYSize;
MessageBox.Show("image width=" + w + ",height=" + h);
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
}为了运行程序,Open方法的第一个参数@"C:\F-49-32-(10).tif"应改成你本机上图像文件所在的路径。如果运行正常的话将弹出一个对话框,显示图像的宽度和高度。

关于其它一些问题的讨论:

1、关于GDAL_DATA系统变量。GDAL建议创建这个系统变量,从上面的讨论中,我们已经知道,这个系统变量并非必须的,但是如果你想使用一些GDAL提供的例子,那就很有必要,因为样例中的某些方法需要访问这个系统变量。

2、我们已经提到过,创建安装文件夹并非必须的;如果使用默认的方式来编译,将安装到C:\warmerda\bld文件夹内。无论使用何种方式,要想使用GDAL,你的C#程序必须能访问到这些DLL文件:包括上面提到的8个DLL文件,以及C:\gdal-runtime\bin\gdal15.dll文件。我们可以用一句话来概括:C#环境下使用GDAL的问题核心,实质上就是如何保证C#程序能够访问到这9个DLL文件。

在此,我们回顾一下Windows搜索DLL文件的基本规则:

1)执行文件所在的文件夹。

2)windows系统安装文件夹,即安装了windows的文件夹,GetWindowsDirectory( )函数可提供该目录的路径名。

3)Windows系统目录,即System32子目录;调用GetSystemDiretory( )函数可获得这个目录的路径名。

4)在系统变量Path中配置的文件夹,或用dos的path命令指定的文件夹。

5)网络中映象的目录列表中的全部目录。

在需要调用DLL文件时,windows将按以上的顺序,逐一查找各个文件夹,如果找不到相应的文件,将返回异常信息。

根据以上的规则,系统变量path中不必包含GDAL的安装路径,我们只要把这9个DLL文件复制到执行文件所有的位置,同样可以运行。例如把文件复制到bin/debug或bin/release文件夹内,这样程序的运行就不再依赖于任何系统变量了。这种方式非常适合于发布和打包最终的应用程序。在程序开发期间,我们仍然提倡使用系统变量指向GDAL安装路径的方式,开发时将更加有灵活性。

 

 

2、GDALGeospatial Data Abstraction Library)从1.4.1版本开始支持.NET环境下的C#语言。基本的编译步骤参照《如何在CSharp中使用GDAL》(http://blog.csdn.net/gisblog/archive/2008/10/06/3021933.aspx),博主把步骤写的很详细,一路参照编译顺利,只是把自己遇到的几个问题总结如下:

a)下载地址:http://download.osgeo.org/gdal/,自己使用的时候还只是1.6.1,现在最新的版本已是1.6.2O(_)O~每天都有新事物。

bGDAL的底层是用C++写的,所以要用C++编译器才会编译成功。

c)生成的九个dll中,gdal16.dll才是GDAL库的实现核心。

    

d)在C#中使用时,需要引用四个有_csharp后缀的dll

e)在开发过程,最好把编译的GDALbin文件夹加入到系统环境变量中。

f)在打包和用于发布的应用程序中,需要把9dll文件全部拷贝到程序目录中。

注意了上面的细节,就可以顺利使用啦↖(^ω^)↗

 

3、

[个人心得] Gdal In C# 接口编译

Gdal是栅格地理空间数据格式的转换开源类库,它使用一种单一的抽象数据模型,满足了其所支持的所有数据格式的应用需求。目前Gdal的最新版本为GDAL/OGR 1.6.0
与Gdal类似地,与Gdal库一起的OGR类库,提供了对矢量数据的相关操作。
详细资料请参考GDAL
流浪者N应用Gdal是为了用C#实现对HDF文件的操作。
下面为流浪者N编译支持HDF4、HDF5的Gdal库的操作,首先声明流浪者N这么编译出的Gdal仍然不支持HDF,这里写下一为记录;二为交流,寻求帮助。
流浪者N尝试编译的Gdal版本:gdal-1.5.2gdal-1.6.0
另外还需swig,这里用的版本:swigwin-1.3.38 ;HDF4:42r4-win-vnet;HDF5:5-182-win-vs2005
为了支持HDF5,还需下载SZip,这里用szip21-vs2005
OK,现在万事具备,只欠编译了,尽管编译出来不能支持HDF,但对于TIFF之类还是支持的,仍然期待…
编译准备……
1.Gdal压缩包、swigwin压缩包、HDF压缩包、szip压缩包解压;
2.修改。
  • 修改Gdal中的bug,Source Files\leveller\levellerdataset.cpp文件171行 { “?, kPI / 180.0, UNITLABEL_DEGREE },将“ “? ”修改为“ ”? “ ”,保存;
  • 修改Gdal根目录下的nmake.opt文件:MSVC_VER=1400(即选择VS2005);GDAL_HOME=“YourDir”,YourDir为你自己建立的用于存放编译生成的文件的地方,自行定义;SWIG = swig.exe,将swigwin解压后其中swig.exe的路径填于此处;
3.再次修改nmake.opt,安装 Hdf4、Hdf5的驱动。
  • 找到“Uncomment the following and update to enable NCSA HDF Release 4 support”位置,将该项下方的三个#去除。修改如下:HDF4_PLUGIN = YES    HDF4_DIR = E:\JoSn\sIon\Gdal0311_10\42r4-win-vnet     HDF4_LIB = $(HDF4_DIR)\lib\ hd424.lib
  • 同理修改HDF5的相关配置。修改如下:HDF5_PLUGIN = YES     HDF5_DIR = E:\JoSn\sIon\Gdal0311_10\5-182-win-vs2005     SZIP_DIR = E:\JoSn\sIon\Gdal0311_10\szip21-vs2005-enc       HDF5_LIB = $(HDF5_DIR)\hdf5dll.lib \
      $(SZIP_DIR)\dll\szlibdll.lib
  • 修改部分结束
修改完毕,编译真正开始…
1.打开VS 2005 命令行,定位到Gdal所在的文件夹;
2.nmake /f makefile.vc;
3.nmake /f makefile.vc install;
4.nmake /f makefile.vc devinstall,这步完成后GDAL_HOME处生成一系列的文件,其bin目录下会有gdal15.dll or gdal16.dll,视gdal版本而定。
5. cd swig\csharp,定位到gdal目录下的csharp文件夹。
6.nmake /f makefile.vc,这步完成后会在csharp目录下生成8个dll文件。将这8个文件拷贝到gdal15.dll or gdal16.dll 所在位置(见第4步)。
测试程序……
1.添加*_csharp.dll 四个文件的引用。
2.OSGeo.GDAL.Gdal.AllRegister();
3.OSGeo.GDAL.Dataset ds=OSGeo.GDAL.Gdal.Open(@”d:\test.tiff”,OSGeo.GDAL.Access.GA_ReadOnly);
4.int w = ds.RasterXSize; int h = ds.RasterYSize; MessageBox.Show(”image width=” + w + “,height=” + h);
5.tiff文件的测试没有问题,但改为HDF4或HDF5文件就无能为力了。提示为:暂不支持该文件。
寻求交流与帮助
1.望对Gdal有较深研究者传授流浪者N编译支持HDF的方法
2.流浪者N后来用FWTools,据说FWTools编译的Gdal支持了HDF4、HDF5,但不知是流浪者N愚钝,不会用FWTools2.2.8,还是FWTools2.2.8存在bug,总之有异常,说是“OSGeo.GDAL.GdalPINVOKE的类型初始值设定项引发异常”,这倒与之前流浪者N错误编译Gdal库时的异常相同,不知是和缘故,望广大GIS同行们指点。
3.大家帮帮忙,期待ing

 

 

4\

 

在Window下编译、安装、使用GDAL
时间:2008-12-11 03:39:20  来源:RealGIS  作者:tqx  点击量:
1. GDAL简介
GDAL(主页:http://www.gdal.org/)是一个操作栅格地理数据的库,由C写成。它包括读取、写入、转换和处理各种栅格数据格式。当前版本的GDAL还包含了OGR库,OGR也是用C写成,是操作矢量地理数据的库,合二为一,GDAL库具备了操作栅格和矢量地理数据的能力。更令人欣喜的是,GDAL是开源的,跨平台的,目前有很多软件都用到了GDAL,如GRASS,QGIS,Google Earth等等。GDAL支持C/C++、VB、Python、Java、C#/.NET、Ruby、Perl,目前能够支持如此多语言的库真的不多。GDAL支持的格式多得惊人,可以看看它主页上列也的Support Formats(http://www.gdal.org/formats_list.html)。

2.下载GDAL
二进制文件(已经编译好的):http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

源文件(未编译):http://trac.osgeo.org/gdal/wiki/DownloadSource

上面两链接都列出了各种平台各种版本,你可根据自己的情况下载。撰写此文时,GDAL最新的Release版本是1.6.0。

3.编译前配置
         直接下载编译好的二进制文件固然省事,但对于想自己动手进一步了解GDAL,用GDAL进行开发的话,最好还是下载源文件自己编译。编译方法如下:

1)  准备C++编译器,如Visual Studio2005或者2003。

2)  将下载的源码解压到C:\gdal-X.X.X(X.X.X表示版本号,当然你也可以自己命名),把文件放在其它目录也可以。

3)  修改源文件的错误。源文件\frmts\leveller\levellerdataset.cpp的第171行的内容如下:

{ "?, kPI / 180.0, UNITLABEL_DEGREE }

在?号后面加上双引号",改成如下形式:


{ "?", kPI / 180.0, UNITLABEL_DEGREE },


不知为何,1.6.0版本依然没有修改这个BUG。

4)  修改编译安装目录。

用任意文本编辑器,如记事本打开配置文件nmake.opt,找到以下代码:

!IFNDEF GDAL_HOME

GDAL_HOME = "C:\warmerda\bld"

!ENDIF

BINDIR = $(GDAL_HOME)\bin

PLUGINDIR = $(BINDIR)\gdalplugins

PY_INST_DIR = $(GDAL_HOME)\pymod

LIBDIR = $(GDAL_HOME)\lib

INCDIR = $(GDAL_HOME)\include

DATADIR = $(GDAL_HOME)\data

HTMLDIR = $(GDAL_HOME)\html

其中GDAL_HOME = "C:\warmerda\bld"为编译后的安装目录,这里你可以修改你想要的目录,当然也可以不改。

4.  添加Python支持
修改PY_INST_DIR = $(GDAL_HOME)\pymod把路径改成python下的Lib\site-packages文件夹下。PYDIR = "C:\Software\Python24" 改成python的安装路径。

5.  添加其它支持
在编译GDAL时,你可以按需要添加其它支持,如ProJ,GeoTiff等等,添加方法只要在nmake.opt找到相关配置节,把前面的“#”去掉,即取消注释,然后修改相关的路径即可。如:

nmake.opt中的PROJ.4 stuff节

# PROJ.4 stuff
# Uncomment the following lines to link PROJ.4 library statically. Otherwise
# it will be linked dynamically during runtime.
# PROJ_FLAGS = -DPROJ_STATIC
# PROJ_INCLUDE = -ID:\GDAL\proj-4.5.0\src
# PROJ_LIBRARY = D:\GDAL\proj-4.5.0\src\proj_i.lib

本节的作用是控制链接方式,默认是注释的,即采用动态链接方式。只需拷贝proj的动态库。若要采用静态链接方式,通过取消gdal的该节注释,并设置proj源码的对应路径即可。静态链接的好处是,加载之初就会判断库的依赖关系,这可以避免采用动态链接库而又缺少依赖库而出现莫名其妙的现象。

6.  编译GDAL源码
打开“Visual Studio 2005 命令提示”工具,该工具位于“开始\程序\Microsoft Visual Studio 2005\Visual Studio Tools”。或者直接打开“cmd”窗口,但需要注册VC编译环境,使用如下代码(与你机子的VS安装路径有关):


E:\program files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat

在命令提示符下,用“cd”命令定位到GDAL文件夹(如C:\gdal-1.6.0),输入以下命令:

nmake /f makefile.vc

这里编译要花费一定的时间,请耐心等待。

7.  安装GDAL
编译完成后,输入以下命令:

nmake /f makefile.vc install

命令执行后,即在安装目录下创建了bin,data,html文件夹。其中bin中包含了GDAL的核心文件gdalXX.dll(XX为版本号,如为gdal16.dll)。

再输入以下命令:

nmake /f makefile.vc devinstall

命令执行后,即在安装目录下创建include,lib文件夹,这两个文件夹用于开发。 

8.  编译C#源码
         在命令提示符下输入:

cd C:\gdal-1.5.0\swig\csharp


进入C#源文件所在的文件夹,然后再输入:


nmake /f makefile.vc


编译完成后,将会生成以下8个dll文件:


gdal_csharp.dll、


gdalconst_csharp.dll、


ogr_csharp.dll、


osr_csharp.dll


gdal_wrap.dll、


gdalconst_wrap.dll、


ogr_wrap.dll、


osr_wrap.dll。

将以上8个dll文件复制到安装目录的bin文件夹下。

9.  使用GDAL
在VS开发中,要先在工具(Tools)-> 选项(Options)-> Projects(vc6.0为Directories)中添加GDAL的lib和include路径,然后把生成的dll文件放在可执行文件所在的文件夹里或直接放在system32文件夹内即可。

如果要用到bin目录中的exe程序,则要创建环境变量,即把GDAL的安装目录的bin路径(如C:\gdal-1.6.0\bin)添加到环境变量中的Path。添加方法为:右击“我的电脑”-> “属性”->”高级”,点击“环境变量”按钮,在系统变量里找到Path,如果没有可添加Path变量,然后把路径添加进去,多个路径以分号分隔。

 
本篇文章来源于 3SDN  转载请以链接形式注明出处 网址:http://www.3sdn.net/giszt/osgis/2008-12-11/148.html

 

 

posted on 2009-11-13 10:56  GIS的学习  阅读(37965)  评论(3编辑  收藏  举报