private unsafe void button5_Click(object sender, EventArgs e) { //先生成全文件NDVI文件 string fname = @"E:\数据文件\蓝藻\th_2012_05_05_02_44_GZ.ld2"; IRasterDataProvider dataProvider = GeoDataDriver.Open(fname) as IRasterDataProvider; IPixelFeatureMapper <float> ndvi = new MemPixelFeatureMapper <float>("NDVI_Temp", 1000, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope, dataProvider.SpatialRef); IArgumentProvider argprdNDVI = new ArgumentProvider(dataProvider, null); //argprdNDVI.AOI = idxs; string expressNDVI = "(band2 - band1) / (float)(band2 + band1)"; int[] bandNos = new int[] { 1, 2 }; //构造栅格计算判识器 IRasterExtracter <UInt16, float> extracterNDVI = new SimpleRasterExtracter <UInt16, float>(); extracterNDVI.Reset(argprdNDVI, bandNos, expressNDVI); //判识 extracterNDVI.Extract(ndvi); //NDVI结果永久保存 RasterIdentify idNDVI = new RasterIdentify(); idNDVI.ThemeIdentify = "CMA"; idNDVI.ProductIdentify = "BAG"; idNDVI.SubProductIdentify = "NDVITemp"; idNDVI.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); idNDVI.GenerateDateTime = DateTime.Now; //NDVISetValue setValue = new NDVISetValue(0.17f, 0.8f); //int size = sizeof(NDVISetValue); IInterestedRaster <float> iirNDVI = new InterestedRaster <float>(idNDVI, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope.Clone(), dataProvider.SpatialRef); //iirNDVI.SetExtHeader(setValue); iirNDVI.Put(ndvi); iirNDVI.Dispose(); }
private IExtractResult CompareDATFile(string backWaterPath, string binWater) { Dictionary <string, FilePrdMap> filePrdMap = new Dictionary <string, FilePrdMap>(); filePrdMap.Add("backWaterPath", new FilePrdMap(backWaterPath, 1, new VaildPra(Int16.MinValue, Int16.MaxValue), new int[] { 1 })); filePrdMap.Add("binWater", new FilePrdMap(binWater, 1, new VaildPra(Int16.MinValue, Int16.MaxValue), new int[] { 1 })); ITryCreateVirtualPrd tryVPrd = new TryCreateVirtualPrdByMultiFile(); IVirtualRasterDataProvider vrd = tryVPrd.CreateVirtualRasterPRD(ref filePrdMap); if (vrd == null) { PrintInfo("数据间无相交部分,无法进行泛滥缩小水体计算!"); if (filePrdMap != null && filePrdMap.Count > 0) { foreach (FilePrdMap value in filePrdMap.Values) { if (value.Prd != null) { value.Prd.Dispose(); } } } return(null); } try { ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <float> rpVisitor = new RasterPixelsVisitor <float>(ap); IPixelFeatureMapper <Int16> result = new MemPixelFeatureMapper <Int16>("FLOD", 1000, new Size(vrd.Width, vrd.Height), vrd.CoordEnvelope, vrd.SpatialRef); rpVisitor.VisitPixel(new int[] { filePrdMap["backWaterPath"].StartBand, filePrdMap["binWater"].StartBand }, (idx, values) => { if (values[0] == 1 && values[1] == 1) { result.Put(idx, 1); } else if (values[0] == 1 && values[1] == 0) { result.Put(idx, 5); } else if (values[0] == 0 && values[1] == 1) { result.Put(idx, 4); } }); RasterIdentify rid = new RasterIdentify(new string[] { backWaterPath, binWater }); rid.ProductIdentify = _subProductDef.ProductDef.Identify; rid.SubProductIdentify = _identify; rid.IsOutput2WorkspaceDir = true; IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(rid, result.Size, result.CoordEnvelope, result.SpatialRef); iir.Put(result); iir.Dispose(); return(new FileExtractResult("扩大缩小水体", iir.FileName)); } finally { vrd.Dispose(); } }
private string MAxValue(string[] fileNames, int bandNo, float zoom) { foreach (string f in fileNames) { if (!File.Exists(f)) { PrintInfo("所选择的数据:\"" + f + "\"不存在。"); return(null); } } Dictionary <string, FilePrdMap> filePrdMap = new Dictionary <string, FilePrdMap>(); for (int i = 0; i < fileNames.Length; i++) { FilePrdMap map = new FilePrdMap(fileNames[i], zoom, new VaildPra(float.MinValue, float.MaxValue), new int[] { bandNo }); if (map.BandCount < 1) { PrintInfo("请选择正确的数据进行最大值合成。"); return(null); } filePrdMap.Add("ndviFile" + i.ToString(), map); } ITryCreateVirtualPrd tryVPrd = new TryCreateVirtualPrdByMultiFile(); IVirtualRasterDataProvider prd = tryVPrd.CreateVirtualRasterPRD(ref filePrdMap); if (prd == null) { throw new Exception("数据间无相交部分,无法创建虚拟数据提供者!"); } IRasterPixelsVisitor <float> visitor = new RasterPixelsVisitor <float>(new ArgumentProvider(prd, null)); List <int> bands = new List <int>(); for (int i = 0; i < fileNames.Length; i++) { bands.Add(filePrdMap["ndviFile" + i.ToString()].StartBand); } PrintInfo("正在进行最大值合成,请稍后...!"); IPixelFeatureMapper <float> result = new MemPixelFeatureMapper <float>("0MAX", prd.Width * prd.Height, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); visitor.VisitPixel(bands.ToArray(), (idx, values) => { result.Put(idx, values.Max() * zoom); } ); RasterIdentify rid = new RasterIdentify(fileNames); IInterestedRaster <float> iir = new InterestedRaster <float>(rid, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); iir.Put(result); iir.Dispose(); return(iir.FileName); }
//public override void SetExtHeader(IExtHeaderSetter setter, object header) //{ // if (setter == null || header == null) // return; // setter.SetExtHeader<NDVISetValue>((NDVISetValue)header); //} private IPixelFeatureMapper <float> ComputeNDVIResult(IRasterDataProvider orbitDataProvider, IPixelIndexMapper result, int visiBandNo, int niBandNo) { //生成判识结果文件 IRasterDataProvider batDataProvider = null; IInterestedRaster <UInt16> iir = null; try { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "BAG"; id.SubProductIdentify = "DBLV"; id.Sensor = orbitDataProvider.DataIdentify.Sensor; id.Satellite = orbitDataProvider.DataIdentify.Satellite; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <UInt16>(id, new Size(orbitDataProvider.Width, orbitDataProvider.Height), orbitDataProvider.CoordEnvelope.Clone()); int[] idxs = result.Indexes.ToArray(); iir.Put(idxs, 1); batDataProvider = iir.HostDataProvider; //内存结果 IPixelFeatureMapper <float> memresult = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(batDataProvider.Width, batDataProvider.Height), batDataProvider.CoordEnvelope, batDataProvider.SpatialRef); //虚拟文件 //转换IRasterDataProvider!!!!! IVirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { batDataProvider, orbitDataProvider }); ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Int16> visitor = new RasterPixelsVisitor <Int16>(ap); visitor.VisitPixel(new int[] { 1, visiBandNo + 1, niBandNo + 1 }, (index, values) => { if (values[0] == 0) { memresult.Put(index, -9999); } else { memresult.Put(index, GetOnePixelNDVI(values[1], values[2])); } }); iir.Dispose(); return(memresult); } finally { if (batDataProvider != null) { batDataProvider.Dispose(); } if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } } }
private void button13_Click(object sender, EventArgs e) { //构造参数提供者 string fname = @"f:\\FY3A_Mersi_2010_06_24_10_00_1000M_L1B_PRJ_Whole.LDF"; fname = @"F:\MERSI\评审火情用\EI2040714.ldf"; Dictionary <string, object> args = new Dictionary <string, object>(); args.Add("a", 315); IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; ArgumentProvider argprd = new ArgumentProvider(prd, args); //构造判识表达式 string express = "(band3 / 10f > var_a)"; int[] bandNos = new int[] { 3 }; //构造基于阈值的判识器 IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 //result = PixelIndexMapperFactory.CreatePixelIndexMapper("Fire",prd.Width,prd.Height); //Stopwatch sw = new Stopwatch(); //sw.Start(); //extracter.Extract(result); //idxs = result.Indexes.ToArray(); //sw.Stop(); //Text = sw.ElapsedMilliseconds.ToString(); //判识结果生成二值位图 IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width, prd.Height); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.Transparent); builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("f:\\1.png", ImageFormat.Png); //判识结果永久保存 RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(idxs, 1); iir.Dispose(); //sw.Stop(); //Text = sw.ElapsedMilliseconds.ToString(); }
private void button14_Click(object sender, EventArgs e) { //构造参数提供者 string fname = @"f:\\FY3A_Mersi_2010_06_24_10_00_1000M_L1B_PRJ_Whole.LDF"; IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; ArgumentProvider argprd = new ArgumentProvider(prd, null); //构造判识表达式 //string express = "(band4 + band3) == 0? 0f : (band4 - band3) / (float)(band4 + band3)"; string express = "NDVI(band4,band3)"; int[] bandNos = new int[] { 4, 3 }; //构造栅格计算判识器 IRasterExtracter <UInt16, float> extracter = new SimpleRasterExtracter <UInt16, float>(); extracter.Reset(argprd, bandNos, express); //判识 resultNDVI = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); Stopwatch sw = new Stopwatch(); sw.Start(); extracter.Extract(resultNDVI); //sw.Stop(); //Text = sw.ElapsedMilliseconds.ToString(); //判识结果生成二值位图 //IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); //Size bmSize = new Size(prd.Width / 2, prd.Height / 2); //Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.Transparent); //builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); //bitmap.Save("f:\\1.png", ImageFormat.Png); //判识结果永久保存 RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "NDVI"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <float> iir = new InterestedRaster <float>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(resultNDVI); iir.Dispose(); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); int count = iir.Count(aoi, (v) => { return(v == 1); }); iir.Count(aoi, (v) => { return((int)v); }); }
//通过读取历史判识文件获取AOI private void 能见度计算file_Click(object sender, EventArgs e) { InitExIdentify(); _exPro.SubProductIdentify = "VISY"; _sub = _pro.GetSubProductDefByIdentify("VISY"); _exAlg.Satellite = "FY3A"; _exAlg.Sensor = "VIRR"; AlgorithmDef visiAlg = _sub.GetAlgorithmDefByIdentify("Visibility"); IArgumentProvider visiArg = MonitoringThemeFactory.GetArgumentProvider(_exPro, _exAlg); IRasterDataProvider prd = GetRasterDataProviderBinaryFile(); Dictionary <string, object> args = new Dictionary <string, object>(); IArgumentProvider argPrd = new ArgumentProvider(prd, args); RasterPixelsVisitor <UInt16> raster = new RasterPixelsVisitor <UInt16>(argPrd); List <int> idxs = new List <int>(); raster.VisitPixel(new int[] { 1 }, (index, value) => { if (value[0] != 0) { idxs.Add(index); } }); visiArg.DataProvider = GetRasterDataProviderVIRR(); visiArg.AOI = idxs.ToArray(); visiArg.SetArg("Visibility", visiAlg); SubProductRasterDst subraster = new SubProductRasterDst(_sub); IPixelFeatureMapper <UInt16> rasterResult = subraster.Make(null) as IPixelFeatureMapper <UInt16>; // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SAND"; id.SubProductIdentify = "VISIBILITY"; id.Satellite = "FY3A"; id.Sensor = "VIRRX"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(rasterResult); iir.Dispose(); MessageBox.Show("能见度计算完成!"); }
//通过实时判识结果获取AOI private void 能见度计算_Click(object sender, EventArgs e) { InitExIdentify(); _exAlg.CustomIdentify = "陆地"; _exAlg.Satellite = "FY3A"; _exAlg.Sensor = "VIRR"; AlgorithmDef alg = _sub.GetAlgorithmDefByIdentify("FY3Land"); IArgumentProvider arg = MonitoringThemeFactory.GetArgumentProvider(_exPro, _exAlg); IRasterDataProvider prd = GetRasterDataProviderVIRR(); arg.DataProvider = prd; arg.AOI = GetAOI(prd, true); arg.SetArg("FY3Land", alg); SubProductBinaryDst bin = new SubProductBinaryDst(_sub); IPixelIndexMapper result = bin.Make(null) as IPixelIndexMapper; int[] indxs = result.Indexes.ToArray(); _exPro.SubProductIdentify = "VISY"; _sub = _pro.GetSubProductDefByIdentify("VISY"); _exAlg.CustomIdentify = null; AlgorithmDef visiAlg = _sub.GetAlgorithmDefByIdentify("Visibility"); IArgumentProvider visiArg = MonitoringThemeFactory.GetArgumentProvider(_exPro, _exAlg); visiArg.DataProvider = prd; visiArg.AOI = indxs; visiArg.SetArg("Visibility", visiAlg); SubProductRasterDst raster = new SubProductRasterDst(_sub); IPixelFeatureMapper <UInt16> rasterResult = raster.Make(null) as IPixelFeatureMapper <UInt16>; // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SAND"; id.SubProductIdentify = "VISIBILITY"; id.Satellite = "FY3A"; id.Sensor = "VIRRX"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(rasterResult); iir.Dispose(); MessageBox.Show("能见度计算完成!"); }
private string CombineCloudAndWater(string cloudFile, string waterFile) { IInterestedRaster <Int16> iir = null; IRasterDataProvider waterPrd = null; IRasterDataProvider cloudPrd = null; try { RasterIdentify id = new RasterIdentify(waterFile); waterPrd = GeoDataDriver.Open(waterFile) as IRasterDataProvider; cloudPrd = GeoDataDriver.Open(cloudFile) as IRasterDataProvider; iir = new InterestedRaster <Int16>(id, new Size(waterPrd.Width, waterPrd.Height), waterPrd.CoordEnvelope.Clone()); //虚拟文件 //转换IRasterDataProvider!!!!! IVirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { waterPrd, cloudPrd }); ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Int16> visitor = new RasterPixelsVisitor <Int16>(ap); visitor.VisitPixel(new int[] { 1, 2 }, (index, values) => { if (values[0] == 1) { iir.Put(index, 1); } else if (values[1] == 1) { iir.Put(index, -9999); } }); return(iir.FileName); } finally { if (iir != null) { iir.Dispose(); } if (waterPrd != null) { waterPrd.Dispose(); } if (cloudPrd != null) { cloudPrd.Dispose(); } } }
private IExtractResult CompareAlgorithm() { string compareFile = _argumentProvider.GetArg("CompareFile").ToString(); string file = _argumentProvider.GetArg("MainFile").ToString(); if (file == null && string.IsNullOrEmpty(file)) { return(null); } string outFileIdentify = GetStringArgument("OutFileIdentify"); string productIdentify = _subProductDef.ProductDef.Identify; IPixelFeatureMapper <Int16> rasterResult = MakeCompareRaster <float, Int16>(productIdentify, compareFile, file, (fstFileValue, sedFileValue) => { if (fstFileValue > 0f && sedFileValue == 1f) { return(1); } else if (fstFileValue == 0f && sedFileValue == 1f) { return(4); } else if (fstFileValue > 0f && sedFileValue == 0f) { return(5); } else { return(0); } }, false); if (rasterResult == null) { return(null); } else { RasterIdentify rid = GetRasterIdentifyID(new RasterIdentify(new string[] { compareFile, file })); IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(rid, rasterResult.Size, rasterResult.CoordEnvelope, null); iir.Put(rasterResult); iir.Dispose(); FileExtractResult result = new FileExtractResult(outFileIdentify, iir.FileName); result.SetDispaly(false); return(result); } }
private IFileExtractResult SaveResultToFile(IRasterDataProvider dataProvider, IPixelIndexMapper result) { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "BAG"; id.SubProductIdentify = "WTGS"; id.Sensor = dataProvider.DataIdentify.Sensor; id.Satellite = dataProvider.DataIdentify.Satellite; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope.Clone()); int[] idxs = result.Indexes.ToArray(); iir.Put(idxs, 1); iir.Dispose(); return(new FileExtractResult("WTGS", iir.FileName)); }
private void btFogBB_Click(object sender, EventArgs e) { ExtractProductIdentify exPro = new ExtractProductIdentify(); exPro.ThemeIdentify = "CMA"; exPro.ProductIdentify = "FOG"; exPro.SubProductIdentify = "DBLV"; ExtractAlgorithmIdentify exAlg = new ExtractAlgorithmIdentify(); exAlg.CustomIdentify = null; exAlg.Satellite = "FY3A"; exAlg.Sensor = "MERSI"; exAlg.Resolution = null; //IArgumentProviderFactory fac = MifEnvironment.ActiveArgumentProviderFactory; ThemeDef theme = MonitoringThemeFactory.GetThemeDefByIdentify("CMA"); ProductDef pro = theme.GetProductDefByIdentify("FOG"); SubProductDef sub = pro.GetSubProductDefByIdentify("DBLV"); AlgorithmDef alg = sub.GetAlgorithmDefByIdentify("EasyAlgorithm"); IArgumentProvider arg = MonitoringThemeFactory.GetArgumentProvider(exPro, "EasyAlgorithm", "FY3A", "MERSI"); arg.SetArg("EasyAlgorithm", alg); IRasterDataProvider prd = GetRasterDataProvider("FOG"); arg.DataProvider = prd; IMonitoringSubProduct bin = new SubProductBinaryFOG(sub); IPixelIndexMapper result = bin.Make(null) as IPixelIndexMapper; RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FOG"; id.SubProductIdentify = "DBLV"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope); iir.Put(result.Indexes.ToArray(), 1); iir.Dispose(); }
private void SandExtructTest(string fname, Dictionary <string, object> args, string express, int[] bandNos, string saveName) { //构造参数提供者 IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; ArgumentProvider argprd = new ArgumentProvider(prd, args); //构造判识表达式 //构造基于阈值的判识器 IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 result = PixelIndexMapperFactory.CreatePixelIndexMapper("DST", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef); Stopwatch sw = new Stopwatch(); sw.Start(); extracter.Extract(result); idxs = result.Indexes.ToArray(); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); //判识结果生成二值位图 IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width / 2, prd.Height / 2); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White); builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save(saveName, ImageFormat.Png); //判识结果永久保存 RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SANDDUST"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(idxs, 1); iir.Dispose(); }
private void FY3陆地_Click(object sender, EventArgs e) { InitExIdentify(); _exAlg.CustomIdentify = "陆地"; _exAlg.Satellite = "FY3A"; _exAlg.Sensor = "VIRR"; AlgorithmDef alg = _sub.GetAlgorithmDefByIdentify("FY3Land"); IArgumentProvider arg = MonitoringThemeFactory.GetArgumentProvider(_exPro, _exAlg); IRasterDataProvider prd = GetRasterDataProviderVIRR(); // arg.DataProvider = prd; //arg.AOI = ApplyAOI(prd, true); // arg.SetArg("AlgorithmName","FY3Land"); SubProductBinaryDst bin = new SubProductBinaryDst(_sub); bin.ResetArgumentProvider("FY3Land", prd.DataIdentify.Satellite, prd.DataIdentify.Sensor, "陆地"); bin.ArgumentProvider.DataProvider = prd; bin.ArgumentProvider.SetArg("AlgorithmName", "FY3Land"); IPixelIndexMapper result = bin.Make(null) as IPixelIndexMapper; string saveName = @"E:\沙尘判识VIRR.png"; CreatBitmap(prd, result.Indexes.ToArray(), saveName); RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "DST"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "VIRR"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(result.Indexes.ToArray(), 1); iir.Dispose(); MessageBox.Show("判识完成,输出文件:E:\\data\\dst\\output\\沙尘判识VIRR.png"); }
private void button8_Click(object sender, EventArgs e) { string ndviFileName = @"E:\工程项目(台式服务器)\SMART\【控制】UI框架(新整理)\SMART\bin\Release\TEMP\BAG_NDVI_NULL_NULL_NULL_20120731101801_20120801101801_.dat"; ndviFileName = @"E:\工程项目(台式服务器)\SMART\【控制】UI框架(新整理)\SMART\bin\Release\Workspace\BAG\2012-08-01\栅格产品\BAG_DBLV_EOST_MODIS_NULL_20120505024500.dat_"; IRasterDataProvider ndviDataProvider = GeoDataDriver.Open(ndviFileName) as IRasterDataProvider; MemoryRasterDataProvider dataProvider = ndviDataProvider as MemoryRasterDataProvider; //NDVISetValue setValue1 = (dataProvider).GetExtHeader<NDVISetValue>(); //double minNDVI = setValue1.MinNDVI; //double maxNDVI = setValue1.MaxNDVI; //double dst = maxNDVI - minNDVI; double minNDVI = 0.17; double maxNDVI = 0.81; double dst = maxNDVI - minNDVI; IPixelFeatureMapper <float> memResult = new MemPixelFeatureMapper <float>("BPCD", 1000, new Size(ndviDataProvider.Width, ndviDataProvider.Height), ndviDataProvider.CoordEnvelope, ndviDataProvider.SpatialRef); ArgumentProvider ap = new ArgumentProvider(ndviDataProvider, null); RasterPixelsVisitor <float> visitor = new RasterPixelsVisitor <float>(ap); visitor.VisitPixel(new int[] { 1 }, (index, values) => { if (values[0] == -9999f) { memResult.Put(index, -9999); } else if (dst == 0) { memResult.Put(index, -9999); } else { memResult.Put(index, (float)((values[0] - minNDVI) / dst)); } }); RasterIdentify id = new RasterIdentify(ndviFileName); IInterestedRaster <float> iirNDVI = new InterestedRaster <float>(id, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope.Clone()); iirNDVI.Put(memResult); iirNDVI.Dispose(); ndviDataProvider.Dispose(); dataProvider.Dispose(); }
private void button16_Click(object sender, EventArgs e) { using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("贝尔湖")) //贝尔湖 { Size size; IRasterDataProvider prd; Envelope evp = GetEnvelope(out size, out prd); Stopwatch sw = new Stopwatch(); sw.Start(); aoi = v.GetAOI(evp, size); // int[] reverseAOI = AOIHelper.Reverse(aoi, size); IBinaryBitmapBuilder b = new BinaryBitmapBuilder(); Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black); b.Fill(reverseAOI, size, ref bm); // string express = "NDVI(band1,band2)"; int[] bandNos = new int[] { 1, 2 }; //构造栅格计算判识器 ArgumentProvider argprd = new ArgumentProvider(prd, null); argprd.AOI = aoi; IRasterExtracter <UInt16, float> extracter = new SimpleRasterExtracter <UInt16, float>(); extracter.Reset(argprd, bandNos, express); //判识 resultNDVI = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(resultNDVI); // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "NDVI"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <float> iir = new InterestedRaster <float>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(resultNDVI); iir.Dispose(); } }
private void button2_Click(object sender, EventArgs e) { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; // rst = new InterestedRaster <byte>(id, new Size(2000, 2000), new GeoDo.RSS.Core.DF.CoordEnvelope(110, 130, 24, 54), GeoDo.Project.SpatialReference.GetDefault()); // rst.Reset(); // rst.Dispose(); }
private IPixelIndexMapper GenerateHistoryResultByAOI(IPixelIndexMapper pixelMapper, int[] drawedAOI) { if (drawedAOI == null || drawedAOI.Length < 1) { return(null); } if (lstFiles.Items.Count < 1) { return(null); } foreach (string file in lstFiles.Items) { if (!File.Exists(file)) { return(null); } } using (IRasterDataProvider prd = GeoDataDriver.Open(_currentRasterFile) as IRasterDataProvider) { List <int> aoiList = new List <int>(); aoiList.AddRange(drawedAOI); IPixelIndexMapper result = PixelIndexMapperFactory.CreatePixelIndexMapper("FLD", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef); if (pixelMapper != null && pixelMapper.Indexes.Count() > 0) { foreach (int i in pixelMapper.Indexes) { if (aoiList.Contains(i)) { result.Put(i); } } } // IInterestedRaster <Int16> iir = null; try { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FLD"; id.SubProductIdentify = "DBLV"; iir = new InterestedRaster <Int16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); int[] idxs = result.Indexes.ToArray(); iir.Put(idxs, 1); } finally { iir.Dispose(); } Dictionary <string, FilePrdMap> filePrdMap = new Dictionary <string, FilePrdMap>(); filePrdMap.Add("currentDBLV", new FilePrdMap(iir.FileName, 1, new VaildPra(Int16.MinValue, Int16.MaxValue), new int[] { 1 })); int index = 0; foreach (string file in lstFiles.Items) { filePrdMap.Add("dblv" + index, new FilePrdMap(file, 1, new VaildPra(Int16.MinValue, Int16.MaxValue), new int[] { 1 })); index++; } ITryCreateVirtualPrd tryVPrd = new TryCreateVirtualPrdByMultiFile(); IVirtualRasterDataProvider vrd = tryVPrd.CreateVirtualRasterPRD(ref filePrdMap); if (vrd == null) { if (filePrdMap != null && filePrdMap.Count > 0) { foreach (FilePrdMap value in filePrdMap.Values) { if (value.Prd != null) { value.Prd.Dispose(); } } } return(null); } try { ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <float> rpVisitor = new RasterPixelsVisitor <float>(ap); int historyCount = lstFiles.Items.Count; int[] bandNos = new int[historyCount + 1]; for (int i = 0; i < bandNos.Length; i++) { bandNos[i] = i + 1; } int[] difArray = new int[historyCount]; rpVisitor.VisitPixel(new Rectangle(0, 0, prd.Width, prd.Height), drawedAOI, bandNos, (idx, values) => { for (int i = 0; i < historyCount; i++) { if (values[0] != values[i + 1]) { difArray[i]++; } } }); int min = difArray[0], minIndex = 0; for (int i = 1; i < difArray.Length; i++) { if (min > difArray[i]) { min = difArray[i]; minIndex = i; } } rpVisitor.VisitPixel(bandNos, (idx, values) => { if (values[minIndex + 1] == 1) { if (!aoiList.Contains(idx)) { result.Put(idx); } } }); return(result); } finally { vrd.Dispose(); if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } } } }
private IExtractResult CompareAlgorithm() { string[] files = GetStringArray("SelectedPrimaryFiles"); string file = _argumentProvider.GetArg("SelectedPrimaryFiles").ToString(); if (files == null && string.IsNullOrEmpty(file)) { return(null); } if (files != null && files.Length < 2) { return(null); } if (files == null && !string.IsNullOrEmpty(file)) { string[] fnames = file.Split('*'); if (fnames != null && fnames.Length > 1) { foreach (string item in fnames) { if (!File.Exists(item)) { return(null); } } files = fnames; } else { return(null); } } //文件列表排序 string[] dstFiles = SortFileName(files); string outFileIdentify = GetStringArgument("OutFileIdentify"); string productIdentify = _subProductDef.ProductDef.Identify; ExtractResultArray results = new ExtractResultArray(productIdentify + _identify); List <IPixelFeatureMapper <Int16> > rasterList = new List <IPixelFeatureMapper <short> >(); List <RasterIdentify> rstIdentifys = new List <RasterIdentify>(); for (int i = 0; i < dstFiles.Length - 1; i++) { IPixelFeatureMapper <Int16> rasterResult = MakeCompareRaster <float, Int16>(productIdentify, dstFiles[i], dstFiles[i + 1], (fstFileValue, sedFileValue) => { if (fstFileValue == 1f && sedFileValue == 1f) { return(1); } else if (fstFileValue == 0f && sedFileValue == 1f) { return(4); } else if (fstFileValue == 1f && sedFileValue == 0f) { return(5); } else { return(0); } }, true); if (rasterResult == null) { continue; } rasterList.Add(rasterResult); rstIdentifys.Add(new RasterIdentify(new string[] { dstFiles[i], dstFiles[i + 1] })); } if (rasterList.Count == 0) { return(null); } else { for (int i = 0; i < rasterList.Count; i++) { RasterIdentify rid = GetRasterIdentifyID(rstIdentifys[i]); IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(rid, rasterList[i].Size, rasterList[i].CoordEnvelope, null); iir.Put(rasterList[i]); iir.Dispose(); FileExtractResult res = new FileExtractResult(outFileIdentify, iir.FileName); res.SetDispaly(false); results.Add(res); } } return(results); }
public static bool DoElevationCorrections(TVDIUCArgs ucArgs, ref string error) { if (string.IsNullOrEmpty(ucArgs.LSTFile) || string.IsNullOrEmpty(ucArgs.DEMFile) || ucArgs.TVDIParas == null || ucArgs.TVDIParas.LstFile == null) { error = "陆表高温高程订正所需数据或参数设置不全."; return(false); } Dictionary <string, FilePrdMap> filePrdMap = new Dictionary <string, FilePrdMap>(); filePrdMap.Add("LSTFile", new FilePrdMap(ucArgs.LSTFile, ucArgs.TVDIParas.LstFile.Zoom, new VaildPra(ucArgs.TVDIParas.LstFile.Min, ucArgs.TVDIParas.LstFile.Max), new int[] { ucArgs.TVDIParas.LstFile.Band })); filePrdMap.Add("DemFile", new FilePrdMap(ucArgs.DEMFile, 1, new VaildPra(float.MinValue, float.MaxValue), new int[] { 1 })); ITryCreateVirtualPrd tryVPrd = new TryCreateVirtualPrdByMultiFile(); IVirtualRasterDataProvider vrd = null; IInterestedRaster <float> iir = null; try { vrd = tryVPrd.CreateVirtualRasterPRD(ref filePrdMap); if (vrd == null) { throw new Exception("数据间无相交部分,无法创建虚拟数据提供者!"); } ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <float> rpVisitor = new RasterPixelsVisitor <float>(ap); IPixelFeatureMapper <float> _result = new MemPixelFeatureMapper <float>("0LEC", 1000, new Size(vrd.Width, vrd.Height), vrd.CoordEnvelope, vrd.SpatialRef); ArgumentItem ai = ucArgs.TVDIParas.LstFile; rpVisitor.VisitPixel(new int[] { filePrdMap["LSTFile"].StartBand, filePrdMap["DemFile"].StartBand }, (index, values) => { if (values[1] == -9999) { _result.Put(index, 9999); //海洋 } else if (values[1] == -9000) { _result.Put(index, 9000); //非中国区域陆地 } else if (values[1] >= 6000) { _result.Put(index, 0); //6000之内的LST数据 } else if (values[0] == ucArgs.TVDIParas.LstFile.Cloudy) { _result.Put(index, 9998); //云区 } else if (values[0] == 12) { _result.Put(index, 9997); //无数据区域 } else if (values[0] == 0) { _result.Put(index, 0); } else if (values[1] == 0) { _result.Put(index, 0); } else { _result.Put(index, (float)(Math.Round((values[0] - 273f + 0.006f * values[1]) * ai.Zoom, 0))); } }); iir = new InterestedRaster <float>(CreateRID(ucArgs.LSTFile), new Size(vrd.Width, vrd.Height), vrd.CoordEnvelope, vrd.SpatialRef); iir.Put(_result); ucArgs.ECLstFile = iir.FileName; return(true); } finally { if (iir != null) { iir.Dispose(); } vrd.Dispose(); } }
private IPixelFeatureMapper <float> CreatPixelCoverRate(IPixelFeatureMapper <float> ndviResult) { if (ndviResult == null) { return(null); } //生成NDVI结果文件 IRasterDataProvider ndviDataProvider = null; IInterestedRaster <float> iir = null; try { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "BAG"; id.SubProductIdentify = "BPCD"; id.Sensor = _argumentProvider.DataProvider.DataIdentify.Sensor; id.Satellite = _argumentProvider.DataProvider.DataIdentify.Satellite; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <float>(id, new Size(_argumentProvider.DataProvider.Width, _argumentProvider.DataProvider.Height), _argumentProvider.DataProvider.CoordEnvelope.Clone()); iir.Put(ndviResult); ndviDataProvider = iir.HostDataProvider; double dst; dst = MaxNDVI - MinNDVI; //判断是否使用端元值计算 NDVISettingItem[] settings = _argumentProvider.GetArg("NDVISetting") as NDVISettingItem[]; if (settings != null) { ResetArgNDVIMaxMin(settings, ref MinNDVI, ref dst); } IPixelFeatureMapper <float> memresult = new MemPixelFeatureMapper <float>("BPCD", 1000, new Size(ndviDataProvider.Width, ndviDataProvider.Height), ndviDataProvider.CoordEnvelope, ndviDataProvider.SpatialRef); ArgumentProvider ap = new ArgumentProvider(ndviDataProvider, null); RasterPixelsVisitor <float> visitor = new RasterPixelsVisitor <float>(ap); visitor.VisitPixel(new int[] { 1 }, (index, values) => { if (values[0] == -9999f) { memresult.Put(index, -9999); } else if (dst == 0) { memresult.Put(index, -9999); } else { memresult.Put(index, (float)((values[0] - MinNDVI) / dst)); } }); iir.Dispose(); return(memresult); } finally { if (ndviDataProvider != null) { ndviDataProvider.Dispose(); } if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } } }
public override IExtractResult MakeExtProduct(IPixelIndexMapper piexd, Action <int, string> progressTracker) { if (piexd == null) { return(null); } Int16 levelNum = (Int16)_argumentProvider.GetArg("Level"); //生成判识结果文件 IInterestedRaster <Int16> iir = null; RasterIdentify id = new RasterIdentify(_argumentProvider.DataProvider.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "HAZ"; id.SubProductIdentify = _identify; id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <Int16>(id, new Size(_argumentProvider.DataProvider.Width, _argumentProvider.DataProvider.Height), _argumentProvider.DataProvider.CoordEnvelope.Clone()); int[] idxs = piexd.Indexes.ToArray(); iir.Put(idxs, 1); List <RasterMaper> rms = new List <RasterMaper>(); IRasterDataProvider LevelPrd = null; IRasterDataProvider CurrPrd = null; string lastLevelFile = null; string lastLevelTempFile = null; try { CurrPrd = iir.HostDataProvider; RasterMaper CurrRm = new RasterMaper(CurrPrd, new int[] { 1 }); rms.Add(CurrRm); bool lastLevelExist = false; lastLevelFile = id.ToWksFullFileName(".dat"); lastLevelTempFile = Path.Combine(Path.GetDirectoryName(lastLevelFile), Path.GetFileNameWithoutExtension(lastLevelFile) + "temp.dat"); if (File.Exists(lastLevelTempFile)) { LevelPrd = GeoDataDriver.Open(lastLevelTempFile) as IRasterDataProvider; if (LevelPrd != null) { lastLevelExist = true; RasterMaper lastLevelRm = new RasterMaper(LevelPrd, new int[] { 1 }); rms.Add(lastLevelRm); } } using (IRasterDataProvider outRaster = CreateOutRaster(lastLevelFile, rms.ToArray())) { RasterMaper[] fileIns = rms.ToArray(); RasterMaper[] fileOuts = new RasterMaper[] { new RasterMaper(outRaster, new int[] { 1 }) }; //创建处理模型 RasterProcessModel <Int16, Int16> rfr = null; rfr = new RasterProcessModel <Int16, Int16>(progressTracker); rfr.SetRaster(fileIns, fileOuts); rfr.RegisterCalcModel(new RasterCalcHandler <Int16, Int16>((rvInVistor, rvOutVistor, aoi) => { int dataLength = rvOutVistor[0].SizeY * rvOutVistor[0].SizeX; if (rvInVistor[0].RasterBandsData == null || (lastLevelExist && rvInVistor[1].RasterBandsData == null) || rvInVistor[0].RasterBandsData[0] == null || (lastLevelExist && rvInVistor[1].RasterBandsData[0] == null)) { return; } for (int index = 0; index < dataLength; index++) { if (rvInVistor[0].RasterBandsData[0][index] == 1) { rvOutVistor[0].RasterBandsData[0][index] = levelNum; } else if (lastLevelExist && rvInVistor[1].RasterBandsData[0] != null) { rvOutVistor[0].RasterBandsData[0][index] = rvInVistor[1].RasterBandsData[0][index]; } } })); //执行 rfr.Excute(); FileExtractResult res = new FileExtractResult(_identify, lastLevelFile, true); res.SetDispaly(false); return(res); } } finally { iir.Dispose(); if (File.Exists(iir.FileName)) { DelteAboutFile(iir.FileName); } if (LevelPrd != null) { LevelPrd.Dispose(); if (File.Exists(LevelPrd.fileName)) { DelteAboutFile(LevelPrd.fileName); } } if (File.Exists(lastLevelTempFile)) { DelteAboutFile(lastLevelTempFile); } } }
private void 海陆模板_Click(object sender, EventArgs e) { using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("海陆模版")) //贝尔湖 { Size size; IRasterDataProvider prd; Envelope evp = GetEnvelope(out size, out prd); Stopwatch sw = new Stopwatch(); sw.Start(); landAoi = v.GetAOI(evp, size); // int[] reverseAOI = AOIHelper.Reverse(landAoi, size); //IBinaryBitmapBuilder b = new BinaryBitmapBuilder(); //Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black); //b.Fill(reverseAOI, size, ref bm); //对陆地区域使用陆地判识算法 Dictionary <string, object> args = new Dictionary <string, object>(); //args.Add("a", 28); //args.Add("b", 78); //args.Add("c", 245); //args.Add("d", 293); //args.Add("f", 28); //args.Add("g", 0); //args.Add("h", 15); //args.Add("i", 250); //构造判识表达式 //string express = "((band2/10f) > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && " // + "(band6/10f > var_f) && ((band6 - band2)>var_g) && ((band6/10f - band5/10f + var_i)>var_h)"; ////band2:可见光,0.525~0.575(波长范围) ////band5:远红外,10.3~11.55 ////band6:短波红外,1.60~1.69 //int[] bandNos = new int[] { 2, 5, 6 }; ////构造栅格计算判识器 //ArgumentsProvider argprd = new ArgumentsProvider(prd, args); //argprd.AOI = reverseAOI; //IThresholdExtracter<UInt16> extracter = new SimpleThresholdExtracter<UInt16>(); //extracter.Reset(argprd, bandNos, express); ////判识 //landResult = new MemPixelIndexMapper("SAND", 1000); //extracter.Extract(landResult); //landInd = landResult.Indexes.ToArray(); //对海洋区域使用海洋判识算法 args.Clear(); args.Add("a", 8); args.Add("b", 26); args.Add("c", 265); args.Add("d", 283); args.Add("e", -10); args.Add("f", 0); string express = "(band2/10f > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && " + "(band6/10f > var_a)&& ((band6/10f - band4/10f)>var_e) &&((band2/10f - band4/10f )>var_f)"; int[] bandNos = new int[] { 2, 5, 6, 4 }; ArgumentProvider argprd = new ArgumentProvider(prd, args); argprd.AOI = reverseAOI; IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 seaResult = PixelIndexMapperFactory.CreatePixelIndexMapper("DST", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(seaResult); seaIdx = seaResult.Indexes.ToArray(); // IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width / 2, prd.Height / 2); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White); builder.Fill(landInd, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("h:\\陆地沙尘.png", ImageFormat.Png); builder.Fill(seaIdx, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("h:\\海洋沙尘.png", ImageFormat.Png); // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SAND"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(landInd, 1); iir.Put(seaIdx, 1); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); iir.Dispose(); } ////取海洋矢量作为AOI,使用海洋的判识算法 //Dictionary<string, object> seaargs = new Dictionary<string, object>(); //seaargs.Add("sa", 8); //seaargs.Add("sb", 26); //seaargs.Add("sc", 265); //seaargs.Add("sd", 283); //seaargs.Add("se", -10); //seaargs.Add("sf", 0); //string seaExpress = "(band2/10f > var_sa) && (band2/10f < var_sb) && (band5/10f > var_sc) && (band5/10f < var_sd) && " // + "(band6/10f > var_sa)&& ((band6/10f - band4/10f)>var_se) &&((band2/10f - band4/10f )>var_sf)"; //int[] seabandNos = new int[] { 2, 5, 6, 4 }; //ArgumentsProvider seaargprd = new ArgumentsProvider(prd, seaargs); ////构造判识表达式 ////构造基于阈值的判识器 //IThresholdExtracter<UInt16> seaextracter = new SimpleThresholdExtracter<UInt16>(); //seaextracter.Reset(seaargprd, seabandNos, seaExpress); ////判识 //IPixelIndexMapper searesult = new MemPixelIndexMapper("SAND", 1000); //seaextracter.Extract(searesult); //int[] seaidxs = searesult.Indexes.ToArray(); //将两者判识的idex合并 }
private void 沙尘能见度_Click(object sender, EventArgs e) { //首先进行沙尘判识,得出判识出的沙尘区域 string fname = @"E:\第二张盘\01_沙尘\2011年04月30日\FY3A_VIRRX_GBAL_L1_20110430_0305_1000M_MS_PRJ_DXX.LDF"; //Dictionary<string, object> args = new Dictionary<string, object>(); //args.Add("a", 28); //args.Add("b", 78); //args.Add("c", 245); //args.Add("d", 293); //args.Add("f", 0); //args.Add("g", 20); //args.Add("h", 15); //args.Add("i", 250); IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; //ArgumentsProvider argprd = new ArgumentsProvider(prd, args); //string extractExpress = "((band2/10f) > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && " // + "(band6/10f > var_a) && ((band6 - band2)>var_f) && ((band6/10f - band5/10f + var_i)>var_h)"; //band2:可见光,0.525~0.575(波长范围) //band5:远红外,10.3~11.55 //band6:短波红外,1.60~1.69 //int[] exBandNos = new int[] { 2, 5, 6 }; //IThresholdExtracter<UInt16> thrExtracter = new SimpleThresholdExtracter<UInt16>(); //thrExtracter.Reset(argprd, exBandNos, extractExpress); //extractResult = new MemPixelIndexMapper("SAND", 1000); //thrExtracter.Extract(extractResult); //idxs = extractResult.Indexes.ToArray(); //获取到判识结果 //将判识结果作为AOI传入进行能见度计算 string express = "(UInt16)Math.Round(1000 * Math.Pow(Math.E,(var_visibleA + var_visibleB * band1/10f + var_visibleC * band2/10f + var_visibleD * band6/10f + var_visibleE * band4/10f + var_visibleF *(band6/10f - band4/10f + var_shortFar))),0)"; //express = " 80 "; //string express = "1000*Math.Pow(Math.E,(44.7603 +0.181571 * band2/10f -0.332972 * band4/10f + 0.122736 * band6/10f -0.144287 * band5/10f -0.114465 *(band6/10f - band5/10f + 253)))"; Dictionary <string, object> args = new Dictionary <string, object>(); args.Add("visibleA", 44.7603); args.Add("visibleB", 0.181571); args.Add("visibleC", -0.332972); args.Add("visibleD", 0.122736); args.Add("visibleE", -0.144287); args.Add("visibleF", -0.114465); args.Add("shortFar", 253); int[] bandNos = new int[] { 1, 2, 6, 4 }; ArgumentProvider argProvider = new ArgumentProvider(prd, args); //argProvider.AOI = idxs; IRasterExtracter <UInt16, UInt16> extracter = new SimpleRasterExtracter <UInt16, UInt16>(); extracter.Reset(argProvider, bandNos, express); result = new MemPixelFeatureMapper <UInt16>("Visibility", 1000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); Stopwatch sw = new Stopwatch(); sw.Start(); extracter.Extract(result); RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SAND"; id.SubProductIdentify = "VISIBILITY"; id.Satellite = "FY3A"; id.Sensor = "VIRRX"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(result); iir.Dispose(); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); }
private string GetSNWDegree(string[] files) { double pixelArea = 0; IInterestedRaster <Int16> timeResult = null; IRasterOperator <Int16> roper = new RasterOperator <Int16>(); DataIdentify di = GetDataIdentify(); string outFileIdentify = GetStringArgument("OutFileIdentify"); string extinfo = GetStringArgument("extinfo"); timeResult = roper.Times(files, CreatRasterIndetifyId(files, "SNW", outFileIdentify, di, null, extinfo), (dstValue, srcValue) => { if (srcValue == 0) { return(dstValue); } else { return(++dstValue); } }); IRasterDataProvider dataProvider = timeResult.HostDataProvider; if (dataProvider != null) { ArgumentProvider ap = new ArgumentProvider(dataProvider, null); RasterPixelsVisitor <Int16> visitor = new RasterPixelsVisitor <Int16>(ap); IPixelFeatureMapper <double> memresult = new MemPixelFeatureMapper <double>("0SDC", 1000, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope, dataProvider.SpatialRef); IInterestedRaster <double> iir = null; try { visitor.VisitPixel(new int[] { 1 }, (index, values) => { if (values[0] == 0) { memresult.Put(index, 0); } else { pixelArea = RasterOperator <Int16> .ComputePixelArea(index / dataProvider.Width, dataProvider.CoordEnvelope.MaxY, dataProvider.ResolutionY); memresult.Put(index, pixelArea * values[0]); } }); RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SNW"; id.SubProductIdentify = "0SDC"; id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <double>(id, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope.Clone()); iir.Put(memresult); return(iir.FileName); } finally { if (iir != null) { iir.Dispose(); } if (visitor != null) { visitor.Dispose(); } if (timeResult != null) { timeResult.Dispose(); } if (File.Exists(timeResult.FileName)) { File.Delete(timeResult.FileName); } } } return(null); }
/// <summary> /// /// </summary> /// <param name="rasterFile">土地利用类型文件</param> /// <param name="dblvFile">二值图文件</param> /// <returns></returns> private unsafe string GenerateNetImageFile(string rasterFile, string dblvFile) { using (IRasterDataProvider rasterprd = GeoDataDriver.Open(rasterFile) as IRasterDataProvider) { using (IRasterDataProvider dblvprd = GeoDataDriver.Open(dblvFile) as IRasterDataProvider) { //step1:将文件转换为类型一致 IRasterDataProviderConverter converter = new RasterDataProviderConverter(); string dstFileName = MifEnvironment.GetFullFileName("1.dat"); using (IRasterDataProvider dstDataProvider = converter.ConvertDataType <UInt16, Byte>(dblvprd, enumDataType.Byte, dstFileName, (v) => { return((Byte)v); })) { //step2:裁切文件以保证大小一致 using (IRasterDataProvider sameSizeDataProvider = GetSameSizeDataProvider(rasterprd, dstDataProvider)) { byte[] dataBlock = new byte[sameSizeDataProvider.Width * sameSizeDataProvider.Height]; fixed(byte *buffer = dataBlock) { IntPtr ptr = new IntPtr(buffer); sameSizeDataProvider.GetRasterBand(1).Read(0, 0, sameSizeDataProvider.Width, sameSizeDataProvider.Height, ptr, enumDataType.Byte, sameSizeDataProvider.Width, sameSizeDataProvider.Height); sameSizeDataProvider.Read(0, 0, sameSizeDataProvider.Width, sameSizeDataProvider.Height, ptr, enumDataType.Byte, sameSizeDataProvider.Width, sameSizeDataProvider.Height, 1, new int[] { 1 }, enumInterleave.BSQ); } if (sameSizeDataProvider == null) { return(null); } //step3:生成虚拟文件 VirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { sameSizeDataProvider, dstDataProvider }); //step4:遍历虚拟文件生成结果 ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Byte> visitor = new RasterPixelsVisitor <Byte>(ap); //生成结果 MemPixelFeatureMapper <Byte> memresult = new MemPixelFeatureMapper <Byte>("NIMG", 1000, new Size(vrd.Width, vrd.Height), vrd.CoordEnvelope, vrd.SpatialRef); visitor.VisitPixel(new int[] { 1, 2 }, (index, values) => { if (values[0] == 0) { memresult.Put(index, 0); } else if (values[1] == 0) { memresult.Put(index, 100); } else if (values[1] == 1) { memresult.Put(index, (byte)(100 + values[0])); } }); //保存文件 RasterIdentify idNIMG = new RasterIdentify(dblvFile); idNIMG.ThemeIdentify = "CMA"; idNIMG.ProductIdentify = "SNW"; idNIMG.SubProductIdentify = "NIMG"; idNIMG.GenerateDateTime = DateTime.Now; idNIMG.Satellite = dblvprd.DataIdentify.Satellite; idNIMG.Sensor = dblvprd.DataIdentify.Sensor; string fileName = MifEnvironment.GetFullFileName(idNIMG.ToLongString() + ".dat"); if (File.Exists(fileName)) { idNIMG.GenerateDateTime = DateTime.Now.AddSeconds(1); } IInterestedRaster <Byte> iirNIMG = new InterestedRaster <Byte>(idNIMG, new Size(sameSizeDataProvider.Width, sameSizeDataProvider.Height), sameSizeDataProvider.CoordEnvelope.Clone(), sameSizeDataProvider.SpatialRef); iirNIMG.Put(memresult); iirNIMG.Dispose(); if (File.Exists(dstFileName)) { File.Delete(dstFileName); } return(iirNIMG.FileName); } } } } }
public override IExtractResult MakeExtProduct(IPixelIndexMapper piexd, Action <int, string> progressTracker) { if (piexd == null) { return(null); } object obj = _argumentProvider.GetArg("isAppCloud"); if (obj == null || !(bool)obj) { return(null); } string cloudFile = GetClmFile(_argumentProvider.DataProvider.fileName); if (string.IsNullOrEmpty(cloudFile) || !File.Exists(cloudFile)) { return(null); } Int16 defCloudy = (Int16)_argumentProvider.GetArg("defCloudy"); //生成判识结果文件 IInterestedRaster <Int16> iir = null; RasterIdentify id = new RasterIdentify(_argumentProvider.DataProvider.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SNW"; id.SubProductIdentify = _identify; id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <Int16>(id, new Size(_argumentProvider.DataProvider.Width, _argumentProvider.DataProvider.Height), _argumentProvider.DataProvider.CoordEnvelope.Clone()); int[] idxs = piexd.Indexes.ToArray(); iir.Put(idxs, 1); List <RasterMaper> rms = new List <RasterMaper>(); IRasterDataProvider snwPrd = null; IRasterDataProvider cloudPrd = GeoDataDriver.Open(cloudFile) as RasterDataProvider; try { snwPrd = iir.HostDataProvider; RasterMaper lakRm = new RasterMaper(snwPrd, new int[] { 1 }); rms.Add(lakRm); RasterMaper cloudRm = new RasterMaper(cloudPrd, new int[] { GetCloudCHNO() }); rms.Add(cloudRm); string outFileName = GetFileName(new string[] { _argumentProvider.DataProvider.fileName }, _subProductDef.ProductDef.Identify, _subProductDef.Identify, ".dat", null); using (IRasterDataProvider outRaster = CreateOutRaster(outFileName, rms.ToArray())) { RasterMaper[] fileIns = rms.ToArray(); RasterMaper[] fileOuts = new RasterMaper[] { new RasterMaper(outRaster, new int[] { 1 }) }; //创建处理模型 RasterProcessModel <Int16, Int16> rfr = null; rfr = new RasterProcessModel <Int16, Int16>(progressTracker); rfr.SetRaster(fileIns, fileOuts); rfr.SetFeatureAOI(_argumentProvider.AOIs); rfr.RegisterCalcModel(new RasterCalcHandler <Int16, Int16>((rvInVistor, rvOutVistor, aoi) => { int dataLength = rvOutVistor[0].SizeY * rvOutVistor[0].SizeX; if (rvInVistor[0].RasterBandsData == null || rvInVistor[1].RasterBandsData == null || rvInVistor[0].RasterBandsData[0] == null || rvInVistor[1].RasterBandsData[0] == null) { return; } for (int index = 0; index < dataLength; index++) { if (rvInVistor[1].RasterBandsData[0][index] == 1 && rvInVistor[0].RasterBandsData[0][index] == 0) { rvOutVistor[0].RasterBandsData[0][index] = defCloudy; } else { rvOutVistor[0].RasterBandsData[0][index] = rvInVistor[0].RasterBandsData[0][index]; } } })); //执行 rfr.Excute(); FileExtractResult res = new FileExtractResult("SNW", outFileName, true); res.SetDispaly(false); return(res); } } finally { iir.Dispose(); if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } cloudPrd.Dispose(); } }
/// <summary> /// 判识结果保存事件 /// </summary> /// <param name="piexd">判识结果</param> /// <param name="progressTracker"></param> /// <returns></returns> /// 原始影像和判识结果读取到一个结果集中,分为输入输出两个,输出的就是需要保存的结果 public override IExtractResult MakeExtProduct(IPixelIndexMapper piexd, Action <int, string> progressTracker) { //生成判识结果文件 IInterestedRaster <UInt16> iir = null; RasterIdentify id = new RasterIdentify(_argumentProvider.DataProvider.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FOG"; id.SubProductIdentify = _identify; id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <UInt16>(id, piexd.Size, piexd.CoordEnvelope); int[] idxs = piexd.Indexes.ToArray(); iir.Put(idxs, 1); //原始影像raster IRasterDataProvider sourceraster = _argumentProvider.DataProvider as IRasterDataProvider; List <RasterMaper> listRaster = new List <RasterMaper>(); RasterMaper rmsoure = new RasterMaper(sourceraster, GetBandArray(sourceraster.BandCount)); RasterMaper rmpiexd = new RasterMaper(iir.HostDataProvider, new int[] { 1 }); int totalbandcount = sourceraster.BandCount; listRaster.Add(rmpiexd); listRaster.Add(rmsoure); try { string outFileName = GetFileName(new string[] { _argumentProvider.DataProvider.fileName }, _subProductDef.ProductDef.Identify, "SRDA", ".ldf", null); using (IRasterDataProvider outRaster = CreateOutM_BandRaster(outFileName, listRaster.ToArray(), totalbandcount)) { //波段总数 RasterMaper[] fileIns = listRaster.ToArray(); RasterMaper[] fileOuts = new RasterMaper[] { new RasterMaper(outRaster, GetBandArray(totalbandcount)) }; //创建处理模型 RasterProcessModel <UInt16, UInt16> rfr = null; rfr = new RasterProcessModel <UInt16, UInt16>(progressTracker); rfr.SetRaster(fileIns, fileOuts); rfr.SetFeatureAOI(_argumentProvider.AOIs); rfr.RegisterCalcModel(new RasterCalcHandler <UInt16, UInt16>((rvInVistor, rvOutVistor, aoi) => { int dataLength = rvOutVistor[0].SizeY * rvOutVistor[0].SizeX; if (rvInVistor[0].RasterBandsData == null || rvInVistor[1].RasterBandsData == null || rvInVistor[0].RasterBandsData[0] == null || rvInVistor[1].RasterBandsData[0] == null) { return; } // if (_argumentProvider.AOIs == null) for (int index = 0; index < dataLength; index++) { if (rvInVistor[0].RasterBandsData[0][index] == 1) { for (int i = 0; i < totalbandcount; i++) { rvOutVistor[0].RasterBandsData[i][index] = rvInVistor[1].RasterBandsData[i][index]; } } } } )); //执行 rfr.Excute(0); } string dstfilename = outFileName.Replace(".ldf", ".dat"); if (File.Exists(dstfilename)) { File.Delete(dstfilename); } File.Move(outFileName, dstfilename); FileExtractResult res = new FileExtractResult("FOG", dstfilename, true); res.SetDispaly(false); return(res); } finally { iir.Dispose(); if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } } }
private static void DisplayPixelFeatureMapper(ISmartSession session, IMonitoringSubProduct subProduct, IExtractResult restult, bool openFile) { int extHeaderSize = 0; object header = null; GetExtHeader(subProduct, out extHeaderSize, out header); if (restult is IPixelFeatureMapper <float> ) { IPixelFeatureMapper <float> ifm = restult as IPixelFeatureMapper <float>; RasterIdentify rid = GetRasterIdentifyID(session); if (!string.IsNullOrEmpty(ifm.Name) && ifm.Name != rid.SubProductIdentify) { rid.SubProductIdentify = ifm.Name; } //文件已存在,并且使用感兴趣区域时,使用更新感兴趣区域值的方式。 IInterestedRaster <float> iir = new InterestedRaster <float>(rid, ifm.Size, ifm.CoordEnvelope, ifm.SpatialRef, extHeaderSize); subProduct.SetExtHeader(iir, header); iir.Put(ifm); iir.Dispose(); TryOrbitToWorkspace(session); //if (openFile && NeedOpenFile()) // TryOpenFile(session, iir.FileName); RecordFileForAfterProcess(iir.FileName); TrySaveFileToWorkspace(subProduct, session, iir.FileName, restult, null); } else if (restult is IPixelFeatureMapper <int> ) { IPixelFeatureMapper <int> ifm = restult as IPixelFeatureMapper <int>; RasterIdentify rid = GetRasterIdentifyID(session); IInterestedRaster <int> iir = new InterestedRaster <int>(rid, ifm.Size, ifm.CoordEnvelope, ifm.SpatialRef, extHeaderSize); iir.Put(ifm); iir.Dispose(); TryOrbitToWorkspace(session); if (openFile && NeedOpenFile()) { TryOpenFile(session, iir.FileName); } RecordFileForAfterProcess(iir.FileName); TrySaveFileToWorkspace(subProduct, session, iir.FileName, restult, null); } else if (restult is IPixelFeatureMapper <UInt16> ) { IPixelFeatureMapper <UInt16> ifm = restult as IPixelFeatureMapper <UInt16>; RasterIdentify rid = GetRasterIdentifyID(session); IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(rid, ifm.Size, ifm.CoordEnvelope, ifm.SpatialRef, extHeaderSize); iir.Put(ifm); iir.Dispose(); TryOrbitToWorkspace(session); //if (openFile && NeedOpenFile()) // TryOpenFile(session, iir.FileName); RecordFileForAfterProcess(iir.FileName); TrySaveFileToWorkspace(subProduct, session, iir.FileName, restult, null); } else if (restult is IPixelFeatureMapper <Int16> ) { IPixelFeatureMapper <Int16> ifm = restult as IPixelFeatureMapper <Int16>; RasterIdentify rid = GetRasterIdentifyID(session); IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(rid, ifm.Size, ifm.CoordEnvelope, ifm.SpatialRef, extHeaderSize); iir.Put(ifm); iir.Dispose(); TryOrbitToWorkspace(session); //if (openFile && NeedOpenFile()) // TryOpenFile(session, iir.FileName); RecordFileForAfterProcess(iir.FileName); TrySaveFileToWorkspace(subProduct, session, iir.FileName, restult, null); } ClearExtHeader(subProduct); }
public override IExtractResult MakeExtProduct(IPixelIndexMapper piexd, Action <int, string> progressTracker) { if (piexd == null || this.Tag == null) { return(null); } IPixelFeatureMapper <Int16> resultTag = this.Tag as MemPixelFeatureMapper <Int16>; if (resultTag == null) { return(null); } //生成判识结果文件 IInterestedRaster <Int16> iir = null; IInterestedRaster <Int16> iirFIFLT = null; RasterIdentify id = new RasterIdentify(_argumentProvider.DataProvider.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = _identify; id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <Int16>(id, new Size(_argumentProvider.DataProvider.Width, _argumentProvider.DataProvider.Height), _argumentProvider.DataProvider.CoordEnvelope.Clone()); int[] idxs = piexd.Indexes.ToArray(); iir.Put(idxs, 1); id.SubProductIdentify = "FIFLT"; id.GenerateDateTime = DateTime.Now; iirFIFLT = new InterestedRaster <Int16>(id, new Size(_argumentProvider.DataProvider.Width, _argumentProvider.DataProvider.Height), _argumentProvider.DataProvider.CoordEnvelope.Clone()); iirFIFLT.Put(resultTag); List <RasterMaper> rms = new List <RasterMaper>(); IRasterDataProvider FIRLPrd = null; IRasterDataProvider FIFLTPrd = null; try { FIRLPrd = iir.HostDataProvider; RasterMaper fiflRm = new RasterMaper(FIRLPrd, new int[] { 1 }); rms.Add(fiflRm); FIFLTPrd = iirFIFLT.HostDataProvider; RasterMaper fifltRm = new RasterMaper(FIFLTPrd, new int[] { 1 }); rms.Add(fifltRm); string outFileName = GetFileName(new string[] { _argumentProvider.DataProvider.fileName }, _subProductDef.ProductDef.Identify, "FIFL", ".dat", null); using (IRasterDataProvider outRaster = CreateOutRaster(outFileName, rms.ToArray())) { RasterMaper[] fileIns = rms.ToArray(); RasterMaper[] fileOuts = new RasterMaper[] { new RasterMaper(outRaster, new int[] { 1 }) }; //创建处理模型 RasterProcessModel <Int16, Int16> rfr = null; rfr = new RasterProcessModel <Int16, Int16>(progressTracker); rfr.SetRaster(fileIns, fileOuts); rfr.SetFeatureAOI(_argumentProvider.AOIs); rfr.RegisterCalcModel(new RasterCalcHandler <Int16, Int16>((rvInVistor, rvOutVistor, aoi) => { int dataLength = rvOutVistor[0].SizeY * rvOutVistor[0].SizeX; if (rvInVistor[0].RasterBandsData == null || rvInVistor[1].RasterBandsData == null || rvInVistor[0].RasterBandsData[0] == null || rvInVistor[1].RasterBandsData[0] == null) { return; } // if (_argumentProvider.AOIs == null) for (int index = 0; index < dataLength; index++) { if (rvInVistor[0].RasterBandsData[0][index] == 0) { rvOutVistor[0].RasterBandsData[0][index] = (Int16)0; } else { rvOutVistor[0].RasterBandsData[0][index] = rvInVistor[1].RasterBandsData[0][index]; } } //else if (_argumentProvider.AOIs != null && aoi != null && aoi.Length != 0) //{ // for (int i = 0; i < aoi.Length; i++) // if (rvInVistor[0].RasterBandsData[0][aoi[i]] == 0) // rvOutVistor[0].RasterBandsData[0][aoi[i]] = (Int16)0; // else // rvOutVistor[0].RasterBandsData[0][aoi[i]] = rvInVistor[1].RasterBandsData[0][aoi[i]]; //} })); //执行 rfr.Excute(); FileExtractResult res = new FileExtractResult("FIFL", outFileName, true); res.SetDispaly(false); return(res); } } finally { iir.Dispose(); if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } iirFIFLT.Dispose(); if (File.Exists(iirFIFLT.FileName)) { File.Delete(iirFIFLT.FileName); } } }