天天看點

gis開發:使用gdal操作影像(C#)

GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協定下的開源栅格空間資料轉換庫。它利用抽象資料模型來表達所支援的各種檔案格式。它還有一系列指令行工具來進行資料轉換和處理。

GDAL提供對多種栅格資料的支援,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas Imagine Images(img),ASCII DEM(dem) 等格式。

使用C#開發gdal的程式,引用的C#類庫不多,但是需要在執行目錄中,添加不少C++的dll,要不然就會報錯,缺失dll檔案,具體可以去網上下載下傳。

C#的工程中,需要引用以下的dll:

gis開發:使用gdal操作影像(C#)

             Gdal.AllRegister();

            //支援中文

            //Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");    

            Dataset ds = Gdal.Open(strFilePath, Access.GA_ReadOnly);

            Band Band = ds.GetRasterBand(1); 

                //擷取圖像的尺寸               

                int width = Band.XSize;

                int height = Band.YSize;  

                //擷取坐标變換系數

                double[] adfGeoTransform = new double[6];

                ds.GetGeoTransform(adfGeoTransform);

                //擷取行列号              

                double dCol = 0.0, dRow = 0.0;                  

                int dc = Convert.ToInt32(dCol);

                int dr = Convert.ToInt32(dRow);

                DataType DT = DataType.GDT_CFloat32;

               //建立一個tiff檔案的格式

                OSGeo.GDAL.Driver driver = Gdal.GetDriverByName("GTiff");

                Dataset dataset = driver.Create(testPath, fx, fy, 1, DT, null);

                //影像轉換參數

                dataset.SetGeoTransform(adfGeoTransform); 

                //投影轉換參數

                dataset.SetProjection(ds.GetProjection()); 

                //影像波段中寫入資料

                dataset.GetRasterBand(1).WriteRaster(0, 0, fx, fy, data, fx, fy, 0, 0); 

dataset.GetRasterBand(1).FlushCache();