private IExtractResult SITIAlgorithm(Action <int, string> progressTracker) { // string rasterFile = _argumentProvider.GetArg("SelectedPrimaryFiles") as string; if (string.IsNullOrWhiteSpace(rasterFile)) { ISmartSession session = _argumentProvider.GetArg("SmartSession") as ISmartSession; IMonitoringSession ms = session.MonitoringSession as IMonitoringSession; IWorkspace wks = ms.GetWorkspace(); if (wks.ActiveCatalog != null) { string[] fs = wks.ActiveCatalog.GetSelectedFiles("0SIT"); if (fs != null && fs.Length != 0) { rasterFile = fs[0]; _argumentProvider.SetArg("SelectedPrimaryFiles", rasterFile); } } } if (string.IsNullOrEmpty(rasterFile) || !File.Exists(rasterFile)) { return(null); } //栅格统计 Dictionary <string, Func <short, bool> > filters = new Dictionary <string, Func <short, bool> >(); //海冰厚度中四个标记值 float[] rasterValues = new float[] { -1, 1, 5, 10 }; for (int i = 0; i < rasterValues.Length; i++) { float min = rasterValues[i]; string filterKey = min.ToString(); filters.Add(filterKey, (v) => { return(v == min); }); } Dictionary <string, SortedDictionary <string, double> > dic = RasterStatFactory.Stat(rasterFile, null, filters, progressTracker); if (dic == null || dic.Count < 1) { return(null); } SortedDictionary <string, double> statAreas = dic[dic.Keys.First()]; _statAreas = new List <double>(); double total = 0; foreach (string item in statAreas.Keys) { _statAreas.Add(statAreas[item]); total += statAreas[item]; } _statAreas.Add(total); return(ThemeGraphyResult(null)); }
private IStatResult[] StatProcentRasterToStatResult(string fname, string statVector, Dictionary <string, Func <short, bool> > filters, Action <int, string> progressTracker, out string title, out string[] colDescs, bool fullZeroAdd, bool weight, float weightZoom) { IStatResult[] results = null; title = ""; colDescs = null; string statString = AreaStatProvider.GetAreaStatItemFileName(statVector); IRasterDataProvider rdp = GeoDataDriver.Open(fname) as IRasterDataProvider; SortedDictionary <string, double[][]> srcResult = RasterStatFactory.StatPercent <Int16>(fname, statString, filters, progressTracker, weight, weightZoom); //删除为空的AOI区域以及计算百分比 SortedDictionary <string, double[][]> statResult = new SortedDictionary <string, double[][]>(); //区间个数 int regionCount = filters.Keys.Count; foreach (string key in srcResult.Keys) { if (srcResult[key] == null) { continue; } else { int zeroCount = 0; double[][] value = new double[regionCount][]; for (int i = 0; i < regionCount; i++) { value[i] = new double[] { srcResult[key][i][0], srcResult[key][i][0] / srcResult[key][i][1] * 100 }; if (value[i][0] == 0) { zeroCount++; } } //如果全为0 if (fullZeroAdd || (!fullZeroAdd && zeroCount < regionCount)) { statResult.Add(key, value); } } } if (statResult.Count == 0) { return(null); } string productName = _subProductDef.ProductDef.Name; title = productName + statVector; string subTitle = GetSubTitle(fname); colDescs = new string[] { "面积", "百分比" }; results = DicToStatResult(statResult, filters.Keys.ToArray(), subTitle, colDescs); if (results == null) { return(null); } return(results); }
private IExtractResult StatProcentRaster <T>(string fname, Dictionary <string, Func <short, bool> > filters, Action <int, string> progressTracker) { string statString = AreaStatProvider.GetAreaStatItemFileName("行政区划"); SortedDictionary <string, double[][]> srcResult = RasterStatFactory.StatPercent <short>(fname, statString, filters, progressTracker); //删除为空的AOI区域以及计算百分比 SortedDictionary <string, double[][]> statResult = new SortedDictionary <string, double[][]>(); //区间个数 int regionCount = filters.Keys.Count; foreach (string key in srcResult.Keys) { if (srcResult[key] == null) { continue; } else { int zeroCount = 0; double[][] value = new double[regionCount][]; for (int i = 0; i < regionCount; i++) { value[i] = new double[] { srcResult[key][i][0], srcResult[key][i][0] / srcResult[key][i][1] * 100 }; if (value[i][0] == 0) { zeroCount++; } } //如果全为0,也不添加 if (zeroCount < regionCount) { statResult.Add(key, value); } } } if (statResult.Count == 0) { return(null); } string productName = _subProductDef.ProductDef.Name; string title = productName + "行政区划" + "植被指数统计"; string subTitle = GetSubTitle(fname); IStatResult results = DicToStatResult(statResult, filters.Keys.ToArray(), subTitle); if (results == null) { return(null); } string outFileIdentify = GetStringArgument("OutFileIdentify"); string productIdentify = _subProductDef.ProductDef.Identify; string filename = StatResultToFile(new string[] { fname }, results, productIdentify, outFileIdentify, title, null, 1, false, 1); return(new FileExtractResult(outFileIdentify, filename)); }
private IExtractResult StatRasterByVector(string instanceName, string aoiTemplate, Dictionary <string, Func <float, bool> > filters, Action <int, string> progressTracker) { object aioObj = _argumentProvider.GetArg("AOI"); string title = GetStringArgument("title"); string[] files = GetStringArray("SelectedPrimaryFiles"); string extInfos = GetStringArgument("extinfo"); string outFileIdentify = GetStringArgument("OutFileIdentify");//outfileidentify string statname = GetStringArgument("statname"); string productName = _subProductDef.ProductDef.Name; string productIdentify = _subProductDef.ProductDef.Identify; Dictionary <string, SortedDictionary <string, double> > dic = null; if (files == null || files.Length == 0) { return(null); } foreach (string file in files) { dic = RasterStatFactory.Stat(files[0], aoiTemplate, filters, progressTracker); } dic = RasterStatFactory.Stat(files[0], aoiTemplate, filters, progressTracker); if (dic == null || dic.Count == 0) { return(null); } title = productName + statname + instanceName; string subTitle = GetSubTitle(files); IStatResult results = DicToStatResult(dic, filters.Keys.ToArray(), subTitle); if (results == null) { return(null); } string filename = StatResultToFile(files, results, productIdentify, outFileIdentify, title, extInfos, 1, true, 1); return(new FileExtractResult(outFileIdentify, filename)); }
public override IExtractResult Make(Action <int, string> progressTracker, IContextMessage contextMessage) { _contextMessage = contextMessage; if (_argumentProvider == null) { return(null); } if (_argumentProvider.GetArg("SelectedPrimaryFiles") == null) { ISmartSession session = _argumentProvider.GetArg("SmartSession") as ISmartSession; IMonitoringSession ms = session.MonitoringSession as IMonitoringSession; IWorkspace wks = ms.GetWorkspace(); if (wks.ActiveCatalog != null) { string[] fs = wks.ActiveCatalog.GetSelectedFiles("NDVI"); if (fs != null && fs.Length != 0) { _argumentProvider.SetArg("SelectedPrimaryFiles", fs); } } if (_argumentProvider.GetArg("SelectedPrimaryFiles") == null) { PrintInfo("请选择统计文件!"); return(null); } } string[] fname = GetStringArray("SelectedPrimaryFiles"); if (fname == null || fname.Length <= 0) { PrintInfo("请选择统计文件!"); return(null); } if (_argumentProvider.GetArg("AlgorithmName") == null) { PrintInfo("参数\"AlgorithmName\"为空。"); return(null); } string algorith = _argumentProvider.GetArg("AlgorithmName").ToString(); if (algorith != "AVGAlgorithm") { PrintInfo("指定的算法\"" + algorith + "\"没有实现。"); return(null); } short validMin = (short)_argumentProvider.GetArg("ValidMin"); short validMax = (short)_argumentProvider.GetArg("ValidMax"); if (validMin > validMax) { return(null); } string statString = AreaStatProvider.GetAreaStatItemFileName("行政区划"); SortedDictionary <string, double[]> srcResults = RasterStatFactory.SumAndCountByVector <short>(fname[0], statString, (v) => { return(v < validMax && v > validMin); }, progressTracker); if (srcResults == null || srcResults.Count < 1) { return(null); } SortedDictionary <string, double[]> statResults = new SortedDictionary <string, double[]>(); //去除无效值 foreach (string key in srcResults.Keys) { if (srcResults[key] == null) { continue; } statResults.Add(key, srcResults[key]); } if (statResults.Count <= 0) { return(null); } string title = _subProductDef.ProductDef.Name + "平均值统计"; string subTitle = GetSubTitle(fname[0]); string outFileIdentify = _argumentProvider.GetArg("OutFileIdentify").ToString(); IStatResult results = DicToStatResult(statResults, subTitle); if (results == null) { return(null); } string filename = StatResultToFile(fname, results, _subProductDef.ProductDef.Identify, outFileIdentify, title, null, 1, true, 1); return(new FileExtractResult(outFileIdentify, filename)); }