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(); } }
/// <summary> /// 全球火点LDF转换Dat /// </summary> public void writeGFR() { IRasterDataProvider dp = RasterDataDriver.Open(@"L:\新演示数据\01_火情\全球火点\FIR_FREQ_FY3B_VIRR_1D_GBAL_PXXX_1000KM_201304250941.ldf") as IRasterDataProvider; Size size = new Size(dp.Width, dp.Height); IPixelFeatureMapper <Int16> result = new MemPixelFeatureMapper <Int16>("FIR", dp.Width * dp.Height, size, dp.CoordEnvelope, dp.SpatialRef); RasterIdentify id = new RasterIdentify(dp.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "GFRF"; id.IsOutput2WorkspaceDir = true; IArgumentProvider ap = new ArgumentProvider(dp, null); RasterPixelsVisitor <UInt16> visitor = new RasterPixelsVisitor <UInt16>(ap); visitor.VisitPixel(new int[] { 1 }, (index, values) => { result.Put(index, (Int16)values[0]); }); using (IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(id, size, dp.CoordEnvelope.Clone(), dp.SpatialRef)) { iir.Put(result); string filename = iir.FileName; } }
private static string WriteInterestedRaster(IPixelIndexMapper result, IRasterDataProvider prd, RasterIdentify rstIdentify, string fname) { using (IInterestedRaster <Int16> rst = new InterestedRaster <Int16>(rstIdentify, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone(), prd.SpatialRef)) { rst.Put(result.Indexes.ToArray(), 1); fname = rst.FileName; } return(fname); }
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); } } }
public string AddToWorkspace(IWorkspace wks) { if (_currentProduct == null || _currentSubProduct == null || wks == null) { return(null); } ICatalog c = wks.GetCatalog("CurrentExtracting"); string name = GetName(_currentProduct, _currentSubProduct); IPixelIndexMapper result = _resultObjects[name].BinaryValues; IRasterDataProvider prd = GetRasterDataProvider(_canvasViewer); if (prd == null) { return(null); } RasterIdentify rstIdentify = GetRasterIdentify(prd); string fname = InterestedRaster <Int16> .GetWorkspaceFileName(rstIdentify); if (File.Exists(fname)) { //GeoDo.RSS.UI.AddIn.Theme.AutoGeneratorSettings.enumActionOfExisted action = GetActionOfFileIsExisted(fname); //if (action == AutoGeneratorSettings.enumActionOfExisted.Overide) //{ try { fname = WriteInterestedRaster(result, prd, rstIdentify, fname); } catch (Exception e) { MsgBox.ShowError(e.Message); } //} //else if (action == AutoGeneratorSettings.enumActionOfExisted.ReName) //{ // fname = fname.Replace(".dat", DateTime.Now.ToString("_yyyyMMddHHmmss") + ".dat"); // using (IInterestedRaster<Int16> rst = new InterestedRaster<Int16>(fname, // new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone())) // { // rst.Put(result.Indexes.ToArray(), 1); // } //} //else if (action == AutoGeneratorSettings.enumActionOfExisted.Skip) //{ //} } else { fname = WriteInterestedRaster(result, prd, rstIdentify, fname); } // c.AddItem(new CatalogItem(fname, wks.GetCatalogByIdentify(rstIdentify.SubProductIdentify).Definition as SubProductCatalogDef)); return(fname); }
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("能见度计算完成!"); }
protected string FindCloudExtractResult(string inputFileName) { string dirName = Path.Combine(MifEnvironment.GetWorkspaceDir(), "VGT"); RasterIdentify rstIdentify = GetRasterIdentify(inputFileName); string fname = InterestedRaster <Int16> .GetWorkspaceFileName(rstIdentify); string[] cloudFiles = Directory.GetFiles(dirName, Path.GetFileName(fname), SearchOption.AllDirectories); if (cloudFiles != null && cloudFiles.Length > 0) { return(cloudFiles[0]); } else { return(null); } }
private IFileExtractResult GenrateIInterested(MemPixelFeatureMapper <UInt16> result, IRasterDataProvider currPrd, string subProductIndentify) { RasterIdentify id = new RasterIdentify(currPrd.fileName.ToUpper()); id.ThemeIdentify = "CMA"; id.ProductIdentify = "UHE"; id.SubProductIdentify = subProductIndentify; id.IsOutput2WorkspaceDir = true; using (IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(currPrd.Width, currPrd.Height), currPrd.CoordEnvelope.Clone(), currPrd.SpatialRef)) { iir.Put(result); IFileExtractResult fileResult = new FileExtractResult(subProductIndentify, iir.FileName); fileResult.SetDispaly(false); return(fileResult); } }
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(); }
internal Dictionary <int, FireAreaFeature> GetFireArea(IArgumentProvider argProvider, IPixelIndexMapper pixelMapper, Dictionary <int, PixelFeature> features) { RasterIdentify rid = new RasterIdentify(); Size size = new Size(argProvider.DataProvider.Width, argProvider.DataProvider.Height); string iir = string.Empty; using (InterestedRaster <int> result = new InterestedRaster <int>(rid, size, argProvider.DataProvider.CoordEnvelope)) { foreach (int index in pixelMapper.Indexes) { result.Put(index, index); } iir = result.FileName; } List <int> aoiIndexs = new List <int>(); foreach (int keys in features.Keys) { if (features[keys].IsVertified) { aoiIndexs.Add(features[keys].PixelIndex); } } int[] aoi = aoiIndexs.ToArray(); Rectangle aoiRect = AOIHelper.ComputeAOIRect(aoi, size); IRasterDataProvider dataProvider = GeoDataDriver.Open(iir) as IRasterDataProvider; PixelWndAccessor <int> wndVisitor = new PixelWndAccessor <int>(dataProvider); wndVisitor.Reset(new int[] { 1 }, aoiRect); int fAreaNum = -1; Dictionary <int, FireAreaFeature> fireAreaFeatures = new Dictionary <int, FireAreaFeature>(); foreach (int index in aoi) { if (features[index].FireAreaNum == -1) { fAreaNum++; features[index].FireAreaNum = fAreaNum; fireAreaFeatures.Add(fAreaNum, GetFireAreaInfo(features[index], fAreaNum, argProvider.DataProvider)); GetFireAreaNum(wndVisitor, index, features, fAreaNum, fireAreaFeatures, argProvider.DataProvider); } } return(fireAreaFeatures); }
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 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 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(); }
public IFileExtractResult Generate(IArgumentProvider argProvider, Dictionary <int, PixelFeature> features) { if (argProvider == null || features == null) { return(null); } Size size = new Size(argProvider.DataProvider.Width, argProvider.DataProvider.Height); IPixelFeatureMapper <Int16> result = new MemPixelFeatureMapper <Int16>("0FPG", features.Count, size, argProvider.DataProvider.CoordEnvelope, argProvider.DataProvider.SpatialRef); foreach (int idx in features.Keys) { //if (features[idx].IsVertified) // result.Put(idx, features[idx].FirIntensity); if (features[idx].IsVertified) { result.Put(idx, (Int16)Math.Round(features[idx].SecondPixelArea * 1000)); } } RasterIdentify id = new RasterIdentify(argProvider.DataProvider.fileName); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "0FPG"; id.IsOutput2WorkspaceDir = true; DataIdentify dataId = argProvider.DataProvider.DataIdentify; if (dataId == null) { dataId = new DataIdentify(); } id.Satellite = dataId.Satellite ?? "Unknow"; id.Sensor = dataId.Sensor ?? "Unknow"; id.OrbitDateTime = dataId.OrbitDateTime; //writeGFR(); using (IInterestedRaster <Int16> iir = new InterestedRaster <Int16>(id, size, argProvider.DataProvider.CoordEnvelope.Clone(), argProvider.DataProvider.SpatialRef)) { iir.Put(result); return(new FileExtractResult("火点强度", iir.FileName)); } }
private IExtractResultBase ComputeSingleFile(string fname, IRasterExtracter <ushort, short> extracter, int[] bandNos, string express) { using (IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider) { if (prd == null) { return(null); } int bandCount = prd.BandCount; foreach (int band in bandNos) { if (bandCount == 0 || bandCount == 1) { PrintInfo("请选择正确的局地文件进行计算。"); return(null); } if (bandCount < band) { PrintInfo("获取波段序号失败,可能是波段映射表配置错误或判识算法波段参数配置错误!"); return(null); } } IArgumentProvider aPrd = new ArgumentProvider(prd, null); extracter.Reset(aPrd, bandNos, express); string filename = string.Empty; using (IPixelFeatureMapper <Int16> resultNDVI = new MemPixelFeatureMapper <Int16>(_identify, prd.Width * prd.Height, new System.Drawing.Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef)) { extracter.Extract(resultNDVI); RasterIdentify rid = GetRasterIdentify(fname); using (InterestedRaster <Int16> iir = new InterestedRaster <Int16>(rid, new System.Drawing.Size(prd.Width, prd.Height), prd.CoordEnvelope)) { iir.Put(resultNDVI); filename = iir.FileName; } IFileExtractResult ndviResult = new FileExtractResult(_identify, filename); ndviResult.SetDispaly(false); return(ndviResult); } } }
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 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); }
/// <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 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); }
/// <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); } 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); } } }