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 (string.IsNullOrEmpty(algname)) { PrintInfo("参数\"AlgorithmName\"为空。"); return(null); } if (algname == "SNWExtract") { IBandNameRaster bandNameRaster = _argumentProvider.DataProvider as IBandNameRaster; int visiBandNo = TryGetBandNo(bandNameRaster, "Visible"); int sIBandNo = TryGetBandNo(bandNameRaster, "ShortInfrared"); int fIBandNo = TryGetBandNo(bandNameRaster, "FarInfrared"); double visiBandZoom = (double)_argumentProvider.GetArg("Visible_Zoom"); double siBandZoom = (double)_argumentProvider.GetArg("ShortInfrared_Zoom"); double fiBandZoom = (double)_argumentProvider.GetArg("FarInfrared_Zoom"); if (visiBandNo <= 0 || sIBandNo <= 0 || fIBandNo <= 0 || visiBandZoom <= 0 || siBandZoom <= 0 || fiBandZoom <= 0) { PrintInfo("获取波段序号失败,可能是波段映射表配置错误或判识算法波段参数配置错误。"); return(null); } string express = string.Format(@"(band{1}/{4}f > var_ShortInfraredMin) && (band{1}/{4}f< var_ShortInfraredMax) && (band{2}/{5}f< var_FarInfraredMax) && (band{2}/{5}f > var_FarInfraredMin) && (band{0}/{3}f> var_VisibleMin) && ((float)(band{0}/{3}f-band{1}/{4}f)/(band{0}/{3}f+band{1}/{4}f)> var_NDSIMin) && ((float)(band{0}/{3}f-band{1}/{4}f)/(band{0}/{3}f+band{1}/{4}f)< var_NDSIMax)&& (band{0}/{3}f< var_VisibleMax)", visiBandNo, sIBandNo, fIBandNo, visiBandZoom, siBandZoom, fiBandZoom); int[] bandNos = new int[] { visiBandNo, sIBandNo, fIBandNo }; IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(_argumentProvider, bandNos, express); int width = _argumentProvider.DataProvider.Width; int height = _argumentProvider.DataProvider.Height; IPixelIndexMapper result = PixelIndexMapperFactory.CreatePixelIndexMapper("SNW", width, height, _argumentProvider.DataProvider.CoordEnvelope, _argumentProvider.DataProvider.SpatialRef); try { SnwFeatureCollection featureInfo = SnwDisplayInfo.GetDisplayInfo(_argumentProvider, visiBandNo, sIBandNo, fIBandNo); result.Tag = featureInfo; } catch { result.Tag = new SnwFeatureCollection("积雪辅助信息计算失败", null); } extracter.Extract(result); return(result); } else { PrintInfo("指定的算法\"" + algname + "\"没有实现。"); return(null); } }
public static SnwFeatureCollection GetDisplayInfo(IArgumentProvider argumentProvider, int visiBandNo, int sIBandNo, int fIBandNo) { if (argumentProvider == null || argumentProvider.DataProvider == null) { return(null); } if (_sinfo == null || _perArgumentProvider != argumentProvider || pervisiBandNo != visiBandNo || persIBandNo != sIBandNo || perfIBandNo != fIBandNo) { pervisiBandNo = visiBandNo; persIBandNo = sIBandNo; perfIBandNo = fIBandNo; _perArgumentProvider = argumentProvider; _sinfo = new SnwDisplayInfo(argumentProvider); _sinfo.UpdateDisplayInfo(visiBandNo, sIBandNo, fIBandNo); return(_sinfo.DisplayInfo); } else { return(_sinfo.DisplayInfo); } }