public static void TrySaveFileToWorkspace(IMonitoringSubProduct subProduct, IMonitoringSession mession, string fname, IExtractResult restult) { if (string.IsNullOrEmpty(fname)) { return; } IWorkspace wks = mession.GetWorkspace(); RasterIdentify rst = new RasterIdentify(fname); ICatalog c = wks.GetCatalog("CurrentExtracting"); if (c != null) { c.AddItem(new CatalogItem(fname, c.Definition as SubProductCatalogDef)); } if (_contextEnvironment != null && subProduct != null) { rst.SubProductIdentify = subProduct.Identify; IExtractResultBase erb = restult as IExtractResultBase; if (erb != null && !string.IsNullOrEmpty(erb.OutIdentify)) { rst.SubProductIdentify = erb.OutIdentify; } GetOutFileIdentify(ref rst, subProduct); if (!string.IsNullOrEmpty(restult.Name) && restult.Name != rst.SubProductIdentify) { rst.SubProductIdentify = restult.Name; } _contextEnvironment.PutContextVar(rst.SubProductIdentify, fname); } }
public bool Add(IExtractResultBase pixelMapper) { if (_pixelMappers == null) { _pixelMappers = new List <IExtractResultBase>(); } _pixelMappers.Add(pixelMapper); return(true); }
public IExtractResult ComputeByFiles(string[] fnames) { if (_arg == null) { return(null); } IExtractResultArray resultAry = new ExtractResultArray(_identify); IRasterExtracter <UInt16, Int16> extracter = new SimpleRasterExtracter <UInt16, Int16>(); foreach (string fname in fnames) { if (!IsSameTypeFile(fname)) { continue; } IExtractResultBase result = ComputeSingleFile(fname, extracter, _arg.BandNos, _arg.Express); if (result != null) { resultAry.Add(result); } } return(resultAry); }
public override IExtractResult Make(Action <int, string> progressTracker, IContextMessage contextMessage) { _contextMessage = contextMessage; if (_argumentProvider == null || _argumentProvider.DataProvider == null) { return(null); } string algname = _argumentProvider.GetArg("AlgorithmName").ToString(); if (algname == "BAGExtract_New") { //return GetBAG(); return(GetCloudBAG()); } if (!string.IsNullOrEmpty(algname)) { double visiBandRoom = (double)_argumentProvider.GetArg("Visible_Zoom"); double niBandRoom = (double)_argumentProvider.GetArg("NearInfrared_Zoom"); if (algname == "BAGExtract") { MinNDVI = (double)_argumentProvider.GetArg("NDVIMin"); MaxNDVI = (double)_argumentProvider.GetArg("NDVIMax"); } else if (algname == "BAGExtract_Test") { UCSetNDVITool uccontrl = _argumentProvider.GetArg("ucSetNDVITool") as UCSetNDVITool; if (uccontrl.ckbaoi.Checked) { uccontrl.btnGetAOIIndex(null, null); } else { MinNDVI = uccontrl.txtndvimin.Value; MaxNDVI = uccontrl.txtndvimax.Value; } } IRasterDataProvider prd = _argumentProvider.DataProvider; if (prd == null) { PrintInfo("未能获取当前影像数据。"); return(null); } IBandNameRaster bandNameRaster = prd as IBandNameRaster; int visiBandNo = TryGetBandNo(bandNameRaster, "Visible"); int niBandNo = TryGetBandNo(bandNameRaster, "NearInfrared"); if (visiBandNo == -1 || niBandNo == -1 || visiBandRoom == -1 || niBandRoom == -1) { PrintInfo("获取波段序号失败,可能是波段映射表配置错误或判识算法波段参数配置错误。"); return(null); } string express = string.Format(@"({0}==0||{1}==0 )? false :((float)(band{3}/{1}f - band{2}/{0}f) / (band{2}/{0}f+ band{3}/{1}f) < {5}) && ((float)(band{3} /{1}f- band{2}/{0}f) / (band{3}/{1}f + band{2}/{0}f) > {4})", visiBandRoom, niBandRoom, visiBandNo, niBandNo, MinNDVI, MaxNDVI); int[] bandNos = new int[] { visiBandNo, niBandNo }; IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(_argumentProvider, bandNos, express); int width = prd.Width; int height = prd.Height; IPixelIndexMapper memResult = PixelIndexMapperFactory.CreatePixelIndexMapper("BAG", width, height, prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(memResult); memResult.Tag = new BagFeatureCollection("蓝藻辅助信息", GetDisplayInfo(memResult, visiBandNo, niBandNo)); //计算NDVI文件 IPixelFeatureMapper <float> ndvi = null; try { ndvi = ComputeNDVIResult(_argumentProvider.DataProvider, memResult, visiBandNo, niBandNo); IExtractResultBase bPCDResult = CreatPixelCoverRate(ndvi); ExtractResultArray results = new ExtractResultArray("BAG_BINS"); results.Add(memResult); //results.Add(ndvi); results.Add(bPCDResult); return(results); } finally { if (ndvi != null) { ndvi.Dispose(); } } } else { PrintInfo("指定的算法\"" + algname + "\"没有实现。"); return(null); } }
public IExtractResult GetBAG() { double visiBandRoom = (double)_argumentProvider.GetArg("Visible_Zoom"); double niBandRoom = (double)_argumentProvider.GetArg("NearInfrared_Zoom"); bool needcloud = (bool)_argumentProvider.GetArg("isAppCloud"); UCSetNearTool uccontrl = _argumentProvider.GetArg("UCSetNearTool") as UCSetNearTool; if (uccontrl.ckbone.Checked) { uccontrl.btnGetAOIIndex(null, null); } MinNear = double.Parse(uccontrl.txtnearmin.Text) * 100;//放大调节 跟界面参数设置有关 IRasterDataProvider prd = _argumentProvider.DataProvider; if (prd == null) { PrintInfo("未能获取当前影像数据。"); return(null); } IBandNameRaster bandNameRaster = prd as IBandNameRaster; int visiBandNo = TryGetBandNo(bandNameRaster, "Visible"); int niBandNo = TryGetBandNo(bandNameRaster, "NearInfrared"); int shortBandNo = TryGetBandNo(bandNameRaster, "ShortInfrared"); if (visiBandNo == -1 || niBandNo == -1 || visiBandRoom == -1 || niBandRoom == -1) { PrintInfo("获取波段序号失败,可能是波段映射表配置错误或判识算法波段参数配置错误。"); return(null); } string express = string.Format("band{0}/{1}f" + " >= " + MinNear, niBandNo, niBandRoom); string cloudexpress = GetCloudExpress(); if (needcloud) { express = string.Format("{0} && ({1})", express, cloudexpress); } int[] bandNos = new int[] { visiBandNo, niBandNo, shortBandNo }; IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(_argumentProvider, bandNos, express); int width = prd.Width; int height = prd.Height; IPixelIndexMapper memResult = PixelIndexMapperFactory.CreatePixelIndexMapper("BAG", width, height, prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(memResult); memResult.Tag = new BagFeatureCollection("蓝藻辅助信息", GetDisplayInfo(memResult, visiBandNo, niBandNo)); //计算NDVI文件 IPixelFeatureMapper <float> ndvi = null; try { ndvi = ComputeNDVIResult(_argumentProvider.DataProvider, memResult, visiBandNo, niBandNo); IExtractResultBase bPCDResult = CreatPixelCoverRate(ndvi); ExtractResultArray results = new ExtractResultArray("BAG_BINS"); results.Add(memResult); //results.Add(ndvi); results.Add(bPCDResult); return(results); } finally { if (ndvi != null) { ndvi.Dispose(); } } }