public void ToLdfFile(string ldfFileName) { ILdfDriver ldfDrv = null; IRasterDataProvider ldfPrd = null; IRasterBand ldfBand = null; IRasterBand mvgBand = null; Ldf1Header ldfHeader = null; try { ldfDrv = GeoDataDriver.GetDriverByName("LDF") as ILdfDriver; if (ldfDrv == null) { return; } ldfPrd = ldfDrv.Create(ldfFileName, _width, _height, 1, enumDataType.Int16); if (ldfPrd == null) { return; } ldfBand = ldfPrd.GetRasterBand(1); if (ldfBand == null) { return; } ldfHeader = MvgHeaderConvertor.MvgHeaderToLdfHeader(_header); if (ldfHeader == null) { return; } //read data by block ,write ldf provider mvgBand = GetRasterBand(1); if (mvgBand == null) { return; } WriteDataFromMvgToLdf(ldfBand, mvgBand); } finally { Disposed(ldfDrv, ldfPrd, ldfBand, null, null, mvgBand); } }
/// <summary> /// ldf文件另存为mvg文件 /// </summary> /// <param name="ldfName">ldf文件名</param> /// <param name="mvgName">mvg文件名</param> /// <param name="bandNo">需要获取的波段号</param> /// <param name="options"> /* * VALUECOUNT = 2 //default:0 * VALUES = "{0,1}" // * VALUENAMES // * SPATIALREF=Proj4 //default:wgs-84 * MAPINFO={X,Y}:{Col,Row}:{ResolutionX,ResolutionY} //default:null * WITHHDR=[TRUE|FALSE] //default:true */ /// </param> public static void FromLDF(string ldfFileName, string mvgFileName, int bandNo, params object[] options) { IGeoDataDriver ldfDrv = null; IRasterDataProvider ldfPrd = null; IRasterBand ldfBand = null; IMvgDriver mvgDrv = null; IMvgDataProvider mvgPrd = null; IRasterBand mvgBand = null; try { ldfDrv = GeoDataDriver.GetDriverByName("LDF"); if (ldfDrv == null) { return; } ldfPrd = ldfDrv.Open(ldfFileName, enumDataProviderAccess.ReadOnly) as IRasterDataProvider; if (ldfPrd == null) { return; } Ldf1Header ldfHeader = (ldfPrd as ILdfDataProvider).Header as Ldf1Header; if (ldfHeader == null || (ldfHeader.DataType != enumDataType.Int16 && ldfHeader.DataType != enumDataType.UInt16)) { throw new NotSupportedException("只支持Int16和UInt16数据格式的LDF文件转换!"); } ldfBand = ldfPrd.GetRasterBand(bandNo); if (ldfBand == null) { return; } //创建MVG文件 mvgDrv = GeoDataDriver.GetDriverByName("MVG") as IMvgDriver; if (mvgDrv == null) { return; } mvgPrd = mvgDrv.Create(mvgFileName, ldfBand.Width, ldfBand.Height, 1, enumDataType.Int16, options) as IMvgDataProvider; if (mvgPrd == null) { return; } MvgHeaderConvertor.FillMvgHeader(ldfHeader, mvgPrd.Header); //重新生成hdr头文件 string hdrFileName = HdrFile.GetHdrFileName(mvgFileName); HdrFile.SaveTo(hdrFileName, mvgPrd.Header.ToHdrFile()); //读数据并写入MVG文件中 mvgBand = mvgPrd.GetRasterBand(1); if (mvgBand == null) { return; } WriteDataFromLdfToMvg(ldfHeader, ldfBand, mvgBand); } finally { if (mvgPrd != null) { (mvgPrd as MvgDataProvider).Disposed(ldfDrv, ldfPrd, ldfBand, mvgDrv, mvgPrd, mvgBand); } } }