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


      

    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.1swigcsharpgdal目录下的GdalPINVOKE.cs文件,在文件开头找到对应的swig版本,我下载的是swigwin-2.0.12版本,下载地址:https://sourceforge.net/projects/swig/files/swigwin/,下载解压后放在本地。

    (3)修改nmake.opt文件

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

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

      !IFNDEF GDAL_HOME

      GDAL_HOME = "C:warmerdald"

      !ENDIF

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

      GDAL_HOME = "F:gdalgdal-run"  

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

           SWIG =swig.exe

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

           SWIG=F:gdalswigwin-2.0.12swig.exe

    (4)使用“Visual Studio 2008 命令提示”工具来进行,(该工具位于“开始程序Microsoft Visual Studio 2008Visual Studio Tools”内)。

    打开“Visual Studio 2008 命令提示”工具

      1.键入"cd F:gdalgdal-2.2.4",进入源文件所在的文件夹

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

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

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

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

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

    (5)编译C#源文件

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

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

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

        a)打开swigcsharpgdalGdalPINVOKE.cs文件  查找语句,大概位置都在188行

          static GdalPINVOKE() {
          }

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

        b)打开swigcsharpogrOgrPINVOKE.cs 查找语句    

          static OgrPINVOKE() {
          }

          注释掉其中一个  

        c)打开swigcsharpogrOsrPINVOKE.cs 查找语句    

          static OsrPINVOKE() {
          }

          注释掉其中一个

        d)打开swigcsharposrOsrPINVOKE.cs 查找语句    

          static OsrPINVOKE() {
          }

          注释掉其中一个

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

        a)csharpgdalBand.cs文件:

           public Band(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Band_SWIGUpcast(cPtr), cMemoryOwn, parent)

        b)csharpgdalDataset.cs文件:

           public Dataset(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Dataset_SWIGUpcast(cPtr), cMemoryOwn, parent)

        c)csharpgdalDriver.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:gdalgdal-runin目录下的gdal202.dll,连同在F:gdalgdal-2.2.4swigcsharp目录生成的8个dll一起放到项目的Debug目录下

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

     

      

     

         

  • 相关阅读:
    nginx windows 清理日志文件
    golang iris(mvc) 框架使用 dchest/captcha
    一步一步教您内网穿透
    使用 golang 辅助查询网约车信息
    微信小程序UI组件、开发框架、实用库
    sql查询优化--数字转换字符串字段
    Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
    Git简易的命令行入门教程
    .NET Framework 历史版本(2017年)
    深入理解 JavaScript 事件循环(一)— event loop
  • 原文地址:https://www.cnblogs.com/Blue-ZXL/p/12484955.html
Copyright © 2020-2023  润新知