示例#1
0
        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();
        }
示例#2
0
        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();
            }
        }
示例#3
0
        /// <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;
            }
        }
示例#4
0
 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);
 }
示例#5
0
        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);
        }
示例#6
0
        //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);
                }
            }
        }
示例#7
0
        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);
        }
示例#8
0
        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();
        }
示例#9
0
        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); });
        }
示例#10
0
        //通过读取历史判识文件获取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("能见度计算完成!");
        }
示例#11
0
        //通过实时判识结果获取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("能见度计算完成!");
        }
示例#12
0
        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);
            }
        }
示例#13
0
        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);
            }
        }
示例#14
0
        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();
                }
            }
        }
示例#15
0
        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);
            }
        }
示例#16
0
        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));
        }
示例#17
0
        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);
        }
示例#19
0
        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();
        }
示例#20
0
        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");
        }
示例#21
0
 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();
     }
 }
示例#22
0
        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();
        }
示例#23
0
        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));
            }
        }
示例#24
0
 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);
         }
     }
 }
示例#25
0
        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();
        }
示例#26
0
        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);
        }
示例#27
0
        /// <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);
                }
            }
        }
示例#28
0
        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);
        }
示例#29
0
        /// <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);
                        }
                    }
                }
            }
        }
示例#30
0
        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);
                }
            }
        }