欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

GDAL2.2.4 C#中的编译及使用

程序员文章站 2022-05-04 14:43:25
GDAL库是一个跨平台的栅格地理数据格式库,包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。 GDAL使用C++,在Visual studio环境下开发,对C,C++的支持当然不会有什么问题。但对于C#、P ......

  

gdal库是一个跨平台的栅格地理数据格式库,包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。

gdal使用c++,在visual studio环境下开发,对c,c++的支持当然不会有什么问题。但对于c#、python、java来说,过程就相对繁琐一些,对初学者造成了不少的麻烦。本文以gdal2.2.4为例,详细说明在csharpe语言中使用gdal的环境配置问题。

 (1)下载gdal224.zip(或者gdal-2.2.4.tar.gz)源码。下载地址:https://trac.osgeo.org/gdal/wiki/downloadsource,下载解压后放在本地。

    msvc_ver对应的版本如下:

    msvc_ver=1910  vs2017

    msvc_ver=1900  vs2015

    msvc_ver=1800  vs2013

    msvc_ver=1700  vs2012

    msvc_ver=1600  vs2010

    msvc_ver=1500  vs2008

 (2)不同的gdal对应的swigwin的版本不同,打开解压后的gdal-1.11.1\swig\csharp\gdal目录下的gdalpinvoke.cs文件,在文件开头找到对应的swig版本,我下载的是swigwin-2.0.12版本,下载地址:,下载解压后放在本地。

(3)修改nmake.opt文件

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

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

  !ifndef gdal_home

  gdal_home = "c:\warmerda\bld"

  !endif

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

  gdal_home = "f:\gdal\gdal-run"  

  设置swig的文件路径,nmake.opt文件中为:

       swig =swig.exe

  将swig修改为下载的swigwin-2.0.12绝对文件名,例如:

       swig=f:\gdal\swigwin-2.0.12\swig.exe

(4)使用“visual studio 2008 命令提示”工具来进行,(该工具位于“开始\程序\microsoft visual studio 2008\visual studio tools”内)。

打开“visual studio 2008 命令提示”工具

  1.键入"cd f:\gdal\gdal-2.2.4",进入源文件所在的文件夹

  2.依次执行:a) nmake /f makefile.vc  //时间很长,耐心等待

        b) nmake /f makefile.vc install   //执行完毕后,f:\gdal\gdal-run文件夹下增加了bin,data,及html文件夹

        c) nmake /f makefile.vc devinstall  //执行完毕后,f:\gdal\gdal-run文件夹下增加了lib,include文件夹

        这两个文件夹主要用于c及c++的开发。

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

(5)编译c#源文件

  1.键入"f:\gdal\gdal-2.2.4\swig\csharp",切到gdal源码的swig/csharp目录下。

  2.执行如下命令:nmake /f makefile.vc interface

  3.等待执行完后,先不要编译,进入到swig/csharp目录下,修改如下生成的源码文件:

    a)打开swig\csharp\gdal\gdalpinvoke.cs文件  查找语句,大概位置都在188行

      static gdalpinvoke() {
      }

     会看到两个一样的语句,注释掉其中一个

    b)打开swig\csharp\ogr\ogrpinvoke.cs 查找语句    

      static ogrpinvoke() {
      }

      注释掉其中一个  

    c)打开swig\csharp\ogr\osrpinvoke.cs 查找语句    

      static osrpinvoke() {
      }

      注释掉其中一个

    d)打开swig\csharp\osr\osrpinvoke.cs 查找语句    

      static osrpinvoke() {
      }

      注释掉其中一个

  4.然后分别打开如下三个文件,修改第17行

    a)csharp\gdal\band.cs文件:

       public band(intptr cptr, bool cmemoryown, object parent) : base(gdalpinvoke.band_swigupcast(cptr), cmemoryown, parent)

    b)csharp\gdal\dataset.cs文件:

       public dataset(intptr cptr, bool cmemoryown, object parent) : base(gdalpinvoke.dataset_swigupcast(cptr), cmemoryown, parent)

    c)csharp\gdal\driver.cs文件:

       public driver(intptr cptr, bool cmemoryown, object parent) : base(gdalpinvoke.driver_swigupcast(cptr), cmemoryown, parent) {

  5.完成修改后,切回到visual studio 2008 命令提示工具,切到gdal源码的swig/csharp目录下。

  6.执行如下命令

    a)nmake /f makefile.vc

    b)nmake /f makefile.vc install

  会把编译出来的8个dll复制到安装目录下的csharp目录下。

(7)在c#项目中,要将f:\gdal\gdal-run\bin目录下的gdal202.dll,连同在f:\gdal\gdal-2.2.4\swig\csharp目录生成的8个dll一起放到项目的debug目录下

  新建一个vs2008的项目,添加对中4个含有"csharp"的dll文件的引用。至此我们就可以使用gdal的功能了。