public void LdfToMvgFileWithName() { string ldfName = @"E:\气象局项目\MAS二期\mvg文件\FY3B_VIRRX_GBAL_L1_20101128_0500_1000M_MS_PRJ_Whole.LDF"; string mvgName = @"e:\ldfToMvg.mvg"; Int16 valueCount = 2; string values = "{ 0, 1 }"; string valueNames = "{120,99}"; MvgDataProvider.FromLDF(ldfName, mvgName, 1, "VALUECOUNT=" + valueCount, "VALUES=" + values, "VALUENAMES=" + valueNames); Assert.True(File.Exists(@"e:\ldfToMvg.hdr")); Console.WriteLine("Ldf header informations:"); using (StreamReader sr = new StreamReader(@"E:\气象局项目\MAS二期\mvg文件\FY3B_VIRRX_GBAL_L1_20101128_0500_1000M_MS_PRJ_Whole.hdr")) { string ldfHeaderInfo = sr.ReadToEnd(); Console.Write(ldfHeaderInfo); } Console.WriteLine("********************************************************"); Console.WriteLine("Mvg header informations:"); using (StreamReader sr = new StreamReader(@"e:\ldfToMvg.hdr")) { string mvgHeaderInfo = sr.ReadToEnd(); Console.Write(mvgHeaderInfo); } }
public unsafe IExtractResult Do(string productIdentify, string subProductIdentify, IRasterDataProvider dataProvider, string filename, out string error) { error = string.Empty; if (!CanDo(productIdentify, subProductIdentify, filename, out error)) { return(null); } if (_transDef == null) { _transDef = (new MVGXMLParser()).GetTransDef(); } ProductDef product = _transDef.GetProductBySmartProductIdentify(productIdentify); SubProductDef subProduct = product.GetSubProductBySmartIdentfy(subProductIdentify); IGeoDataProvider provider = GeoDataDriver.Open(filename, enumDataProviderAccess.ReadOnly, null); if (provider != null) { MvgDataProvider mvgProvider = provider as MvgDataProvider; if (mvgProvider == null) { error = "MVG转换尚不支持文件【" + Path.GetFileName(filename) + "】!"; return(null); } float xResolution = dataProvider.ResolutionX, mvgXResolution = (float)mvgProvider.CoordEnvelope.Width / mvgProvider.Width; float yResolution = dataProvider.ResolutionY, mvgYResolution = (float)mvgProvider.CoordEnvelope.Height / mvgProvider.Height; int width = dataProvider.Width, mvgWidth = mvgProvider.Width; double minX = dataProvider.CoordEnvelope.MinX, mvgMinX = mvgProvider.CoordEnvelope.MinX; double maxY = dataProvider.CoordEnvelope.MaxY, mvgMaxY = mvgProvider.CoordEnvelope.MaxY; int xIndex = 0; int yIndex = 0; if (dataProvider.DataType == enumDataType.UInt16) { Int16[] dataBlock = new Int16[mvgProvider.Width * mvgProvider.Height]; fixed(Int16 *buffer = dataBlock) { IntPtr ptr = new IntPtr(buffer); mvgProvider.Read(0, 0, mvgProvider.Width, mvgProvider.Height, ptr, enumDataType.Int16, mvgProvider.Width, mvgProvider.Height, 1, new int[] { 1 }, enumInterleave.BSQ); } Dictionary <Int16, Int16> dic = subProduct.GetTableDic <Int16, Int16>(); IPixelIndexMapper map = PixelIndexMapperFactory.CreatePixelIndexMapper(productIdentify + "_" + subProductIdentify, width, dataProvider.Height, dataProvider.CoordEnvelope, dataProvider.SpatialRef); RasterPixelsVisitor <UInt16> visitor = new RasterPixelsVisitor <UInt16>(new ArgumentProvider(dataProvider, null)); visitor.VisitPixel(new int[] { 1 }, (index, values) => { xIndex = (int)Math.Round((minX + (index % width * xResolution) - mvgMinX) / mvgXResolution); yIndex = (int)Math.Round((mvgMaxY - (maxY - (index / width * yResolution))) / mvgYResolution); if (xIndex >= 0 && yIndex >= 0 && yIndex * mvgWidth + xIndex < dataBlock.Length) { if (dic.ContainsKey(dataBlock[yIndex * mvgWidth + xIndex])) { map.Put(index); } } }); return(map); } } return(null); }
public void LdfToMvgFile() { string ldfName = @"E:\气象局项目\MAS二期\mvg文件\FY3A_MERSI_GBAL_L1_20090505_0200_1000M_MS_PRJ_DXX.LDF"; Int16 valueCount = 2; string values = "{ 0, 1 }"; string valueNames = "{120,99}"; MvgDataProvider.FromLDF(ldfName, 1, "VALUECOUNT=" + valueCount, "VALUES=" + values, "VALUENAMES=" + valueNames); }