首页 > C# GDAL 学习一

C# GDAL 学习一

最近一直琢磨如何用C#+GDAL读取栅格数据(.tif.img),运气不错的在GDAL 的官网上找到一部分源码。经过本人测试,效果还不错。学习还将继续深入下去。

参考网址:http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/csharp/apps/GDALRead.cs

开发环境:VS2008+GDAL1.5

所需dll gdal15.dllgdal_csharp.dllgdal_wrap.dllgdalconst_csharp.dllgdalconst_warp.dll

一、将以上.dll添加到工程bindebug目录下。

二、建立控制台程序,添加gdal_csharp引用。如图

 

三、工程GDALRead处右键打开属性对话框,调试一栏添加命令行参数,如图:

 

这里的命令行参数在程序中直接被数组args[]调用。

四、任务与目标

(1)、读取栅格数据的一般参数,如坐标投影(Projection)、波段数(Rsatercount)、数据驱动、栅格大小(RasterSize)

(2)、每个波段的数据类型(DataType)、大小(Size)、PaletteInterp

五、完整代码

 

ExpandedBlockStart.gifView Code
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using OSGeo.GDAL;

 6 namespace GDALRead

 7 {

 8     class Program

 9     {

10         public static void usage()

11         {

12             Console.WriteLine("usage");

13             System.Environment.Exit(-1);

14         }

15      public  static void Main(string[] args)

16         {

17             //Console.WriteLine(args[0]);

18             //Console.ReadLine();

19          try

20          {

21              Gdal.AllRegister();

22              Dataset ds = Gdal.Open(args[0],Access.GA_ReadOnly);

23              if (ds==null)

24              {

25                 Console.WriteLine("Can't open " + args[0]); 

26                  System.Environment.Exit(-1); 

27              }

28              Console.WriteLine("raster dataset parameters:");

29              Console.WriteLine("  Projection:" + ds.GetProjectionRef());

30              Console.WriteLine("  Rastercount:" + ds.RasterCount);//RasterCount是波段数

31              Console.WriteLine("  RasterSize (" + ds.RasterXSize + "," + ds.RasterYSize + ")");

32 

33              /************************************************************************/

34              /* Get Driver                                                                     */

35              /************************************************************************/

36              Driver drv = ds.GetDriver();

37              if (drv ==null)

38              {

39                  Console.WriteLine("Can't get driver");

40                  System.Environment.Exit(-1);

41              }

42              Console.WriteLine("using driver" + drv.LongName);

43              /************************************************************************/

44              /* Get raster band                                                                    */

45              /************************************************************************/

46              for (int iBand=1;iBand<=ds.RasterCount;iBand++)

47              {

48                  Band band = ds.GetRasterBand(iBand);

49                  Console.WriteLine("Band" + iBand + ":");

50                  Console.WriteLine("   DataType:" + band.DataType);

51                  Console.WriteLine("   Size (" + band.XSize + "," + band.YSize + ")");

52                 Console.WriteLine("   PaletteInterp: " + band.GetRasterColorInterpretation().ToString()); //调色说明?

53 

54                 for (int iOver = 0; iOver < band.GetOverviewCount(); iOver++)

55                 {

56                     Band over = band.GetOverview(iOver);

57                     Console.WriteLine("      OverView " + iOver + " :");

58                     Console.WriteLine("         DataType: " + over.DataType);

59                     Console.WriteLine("         Size (" + over.XSize + "," + over.YSize + ")");

60                     Console.WriteLine("         PaletteInterp: " + over.GetRasterColorInterpretation().ToString());

61                 } 

62 

63              }

64              /************************************************************************/

65              /* Processing the raster    

66               * To be continued

67              /************************************************************************/

68 

69          }

70              

71          catch (System.Exception ex)

72          {

73              Console.WriteLine("Application error: " + ex.Message);

74          }

75          Console.ReadLine();

76         }

77     }

78 }

六、运行结果

我找了一幅.img的遥感影像,不含投影坐标,运行结果如下:

 

转载于:https://www.cnblogs.com/ming5536/archive/2011/05/30/ming5536.html

更多相关:

  • //普通委托DeleteShow ds = new DeleteShow(ShowName);Console.WriteLine("----------------------");Console.WriteLine("普通委托----请输入用户名:");string Name = Console.ReadL...

  • IHostingEnviroment 获取环境相关洗洗 IsDevelopment()、IsStaging()、IsProduction() 分别为:开发、准生产、生产环境 IsEnviroment("Uat") 自定义环境,比如自定义Uat环境 新建: appsettings.Uat.json文件 {"Enviroment":...

  • 七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板其实就是在WinForm类似于Dock属性的元 素。DockPanel会对每个子元素进行排序,并停靠在面板的一侧,多个停靠在同侧的元素则按顺序排序。     如果将 LastChild...

  • 该链接有导入,导出源码,我的代码有下链接改写,完善而成的, http://www.cnblogs.com/colder/p/3611906.html using System;using System.Collections.Generic;using System.Linq;using System.Web;using System...

  • 转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成。设计一个tool,利用Records.BypassLocks...

  • C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html)  提到了ThreadId是一样的,突然想到在WinForm中,非UI线程是无法直接更新UI线程上的控件的问题。 于是做了如下测试: using System; using System.Collectio...

  • 工厂方法模式和抽象工厂模式工厂方法模式抽象工厂模式总结: 工厂方法模式 #include #include // Abstract class Splitter { private:/* data */ public:Splitter(/* args */);virtual ~Split...