GDAL相关网站:
- 官方网站:http://www.gdal.org/
GDAL相关资料:
GDAL问题:
1.问题描述:“OSGeo.OGR.Ogr”的类型初始值设定项引发异常。
引用giswei的回答:这个问题是dll不全造成的,除了要引用的4个dll外,还有5个dll也要放到Debug目录下。在编译C#下的gdal时,总共生成了9个dll,在编译的本机上,程序是通过环境变量path找到另外的几个dll的。在没有编译过gdal的电脑上,反正就把这9个编译后的dll放到debug下面就一切Ok了。
实际上如果你是将GDAL以类库项目的形式再次封装了一遍,不仅要在类库项目中将所有9个dll拷入debug(或release)文件夹中,在引用该类库的其他项目中同样要手动拷贝这9个dll,否则将同样报该错误。因为.NET项目对类库的引用,只会将该类库所引用的dll中“复制本地”属性为true的(如ogr_csharp.dll)拷贝到其他项目中,而不会自动拷贝其依赖(如ogr_wrap.dll)。
2.OGR对ArcSDE的支持
If you require a Windows based build, you should identify the location of your SDE client lib and header files and modify your gdal make.opt accordingly:
SDE_ENABLED = YES SDE_VERSION=92 SDE_PLUGIN = YES SDE_SDK = C:\arcgis\arcsde SDE_INC = $(SDE_SDK)\include SDE_LIB = $(SDE_SDK)\lib\pe$(SDE_VERSION).lib \ $(SDE_SDK)\lib\sde$(SDE_VERSION).lib $(SDE_SDK)\lib\sg$(SDE_VERSION).lib
In a Visual Studio command prompt you can do something like:
> cd [GDAL_DIR]\ogr\ogrsf_frmts\sde > nmake /f makefile.vc ogr_SDE.dll > cd [GDAL_DIR]\frmts\sde > nmake /f makefile.vc plugin
[2010-08-13 16:30更新]
通过上述的命令,分别在{GDAL Root}\ogr\ogrsf_frmts\sde和{GDAL Root}\frmts\sde下产生ogr_SDE.dll和gdal_SDE.dll两个文件,将其拷贝至环境变量GDAL_DRIVER_PATH定义的路径下,然后尝试用C#代码连接SDE数据库,结果提示“126: 找不到指定的模块”的错误,错误描述如下:
System.ApplicationException: Can't load requested DLL: {GDAL_DRIVER_PATH}\ogr_SDE.dll 126: 找不到指定的模块。
我想应该是ogr_SDE.dll是依赖于ArcSDE的SDK(见此文“The OGR ArcSDE driver depends on being built with the ESRI provided ArcSDE client libraries.”),因此我将nmake.opt文件中定义的pe.dll,se.dll和sde.dll都拷贝至GDAL bin文件夹下,依然报错。
将ArcSDE SDK Bin文件夹中的所有dll文件均拷贝至GDAL文件夹中,依然报错…… -_-||
更进一步,将ArcSDE SDK中Bin、lib、include文件夹中的所有文件都拷贝至GDAL文件夹中,问题依旧…… ||-_-||(为什么拷贝这三个文件夹的文件,见此文,我想既然都是client SDK,那就都引用进去吧)
不知道如何能注册成功ESRI ArcSDE的驱动?
整体编译过程见:http://trac.osgeo.org/gdal/wiki/BuildingOnWindows
[END 2010-08-13 16:30更新]
注:gdal_sde.dll和ogr_sde.dll的编译需要ArcSDE SDK的支持(C API或Java API)
3.利用批处理文件为GDAL添加环境变量
利用批处理命令为GDAL设置path和GDAL_DRIVER_PATH环境变量,有利于系统部署时添加对GDAL的支持。
注:Windows Server 2003对setx命令默认支持,但在Windows XP系统下并不支持该命令,需安装WindowsXP支持工具(Windows XP SupportTools,可以在这里下载)。XP系统下通过批处理命令修改环境变量一般需要重启系统。
关于Setx的命令参数说明可以参考:Windos下用setx.exe命令行模式下永久设置系统环境变量
@echo off echo 设置GDAL环境变量 @setx path "%path%;%cd%\bin;" -m @setx GDAL_DRIVER_PATH %cd%\bin\gdalplugins -m echo 设置成功 pause