c#版GDAL编译

目录

1、工具准备:swig

2、下载GDAL3编译版本(c++版本的编译)

3、成果展示(8个dll):

4、成果下载地址: 

5、声明


1、工具准备:swig

从链接处下载:   SWIG工具

2、下载编译版

链接:c++编译版

1、打开gdal源码目录,cd swig\csharp

nmake /f makefile.vc

'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。(使用Developer Command Prompt for VS 你vs版本)

注:社区版的vs可能存在没有nmake的情况,http://go.microsoft.com/fwlink/?LinkId=691126 下载安装

打开这个一下命令窗口:

2、出现错误解决方案:

1)(swig.exe不是有效的命令)

解决方案:将从1处下载的工具 “E:\008GDAL\GDAL\swigwin3\swig.exe ”根据你的路径将该路径加入到环境变量中

环境变量设置方法:环境变量

2)NMAKE : fatal error U1073: 不知道如何生成“ogr_wrap.obj”

执行如下命令:

nmake /f makefile.vc
nmake /f makefile.vc interface

具体执行过程如下: 

》》E:\008GDAL\GDAL\gdal\swig\csharp>nmake /f makefile.vc
Microsoft (R) 程序维护实用工具 14.22.27905.0 版
版权所有 (C) Microsoft Corporation。  保留所有权利。
        cd ogr
        nmake /nologo /f makefile.vc
        xcopy /D  /Y *.obj ..
复制了 0 个文件
        cd ..
        cd gdal
        nmake /nologo /f makefile.vc
        xcopy /D  /Y *.obj ..
复制了 0 个文件
        cd ..
        cd osr
        nmake /nologo /f makefile.vc
        xcopy /D  /Y *.obj ..
复制了 0 个文件
        cd ..
        cd const
        nmake /nologo /f makefile.vc
        xcopy /D  /Y *.obj ..
复制了 0 个文件
        cd ..
        csc /platform:x86 /define:CLR4  /target:library /out:osr_csharp.dll osr\
*.cs AssemblyInfo.cs
......
        link /dll   ogr_wrap.obj                      E:\008GDAL\OSGeo4W\lib\pro
j_6_2.lib E:\008GDAL\SQLite\lib\SQLite3.lib               legacy_stdio_definitio
ns.lib odbc32.lib odbccp32.lib user32.lib                             ws2_32.lib
  kernel32.lib psapi.lib ..\..\gdal_i.lib /out:ogr_wrap.dll
Microsoft (R) Incremental Linker Version 14.22.27905.0
Copyright (C) Microsoft Corporation.  All rights reserved.
  正在创建库 ogr_wrap.lib 和对象 ogr_wrap.exp 
  ......    
  正在创建库 gdal_wrap.lib 和对象 gdal_wrap.exp
  ......
  正在创建库 gdalconst_wrap.lib 和对象 gdalconst_wrap.exp
  ......
  正在创建库 osr_wrap.lib 和对象 osr_wrap.exp
  ......
》》E:\008GDAL\GDAL\gdal\swig\csharp>nmake /f makefile.vc install
Microsoft (R) 程序维护实用工具 14.22.27905.0 版
版权所有 (C) Microsoft Corporation。  保留所有权利。
......
复制了 4 个文件
......
复制了 4 个文件

3、成果展示(8个dll):

4、成果下载地址: 

   链接: c#版 GDAL3 (可直接在工程中使用)

      注:默认生成的为32位的dll

5、测试dll

1)测试dll加载,成功结果图:

测试代码 :

       static void Main(string[] args)
        {
            string ImagePath = @"D:\20200502225730.png";
            Gdal.AllRegister();
            Dataset dataset = Gdal.Open(ImagePath,Access.GA_ReadOnly);
            //获取X、Y方向栅格数
            int xSize = dataset.RasterXSize;
            int ySize = dataset.RasterYSize;

            //读取影像数据到内存中 //获取第一个波段
            Band band = dataset.GetRasterBand(1); 
            double[] dataBuffer = new double[xSize * ySize];
            band.ReadRaster(0, 0, xSize, ySize, dataBuffer, xSize, ySize, 0, 0);

        }

 注意:9个dll一定要复制到运行目录下:

 2)测试投影

关于找不到那个proj.db文件问题:

gdal编译需要自己编译proj_6文件,proj.db文件在原始编译文件中(文章开始位置可以找到):

GDAL3版本需要设置proj.db文件位置:

投影测试

using OSGeo.GDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace wmgdal
{
    class Program
    {
        static void Main(string[] args)
        {
             
            Gdal.AllRegister();
            //设置proj.db位置
            OSGeo.OSR.Osr.SetPROJSearchPath(@"E:\006gdal\share\proj\"); 

            string ImagePath = @"E:\008music\c20200502225730_ProjectRaste1.tif";
            Dataset dataset = Gdal.Open(ImagePath,Access.GA_ReadOnly);
            //获取X、Y方向栅格数
            int xSize = dataset.RasterXSize;
            int ySize = dataset.RasterYSize;
            //影像波段数
            int count= dataset.RasterCount;

            //读取影像数据到内存中,//获取第一个波段
            Band band = dataset.GetRasterBand(1); 
            double[] dataBuffer = new double[xSize * ySize];
            band.ReadRaster(0, 0, xSize, ySize, dataBuffer, xSize, ySize, 0, 0);

            string gCPProjection = dataset.GetGCPProjection();
           
            // 获取投影信息
            string projectionRef = dataset.GetProjectionRef();
            string projection = dataset.GetProjection();
 

        }
    }
}

测试结果图:

 

 

该文案的意思就是,gdal3版本需要我们自己设置proj.db文件路径;

3版本和2版本的一个不同的地方,设置proj.db 设置环境变量不一定有效果;

源码分析:属于:OSGeo.OSR.Osr,源码采用的是swig将c++编译成c#的,c#篇不深入解析源码

 

6、声明

以上通过本人测试与调试,是在项目中实践的方法,经过论证,可以实现,如有问题,请留言,谢谢你的阅读!

转载请标注来源!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值