Example #1
0
        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);
            }
        }
Example #2
0
 public bool Add(IExtractResultBase pixelMapper)
 {
     if (_pixelMappers == null)
     {
         _pixelMappers = new List <IExtractResultBase>();
     }
     _pixelMappers.Add(pixelMapper);
     return(true);
 }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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();
                }
            }
        }