Esempio n. 1
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);
                }
            }
        }
Esempio n. 2
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();
                }
            }
        }
Esempio n. 3
0
        private void button17_Click(object sender, EventArgs e)
        {
            IVirtualRasterDataProvider    prd     = new VirtualRasterDataProvider(null);
            IRasterPixelsVisitor <UInt16> visitor = new RasterPixelsVisitor <UInt16>(new ArgumentProvider(prd, null));
            IPixelFeatureMapper <float>   result  = new MemPixelFeatureMapper <float>("NVI", 10000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef);

            visitor.VisitPixel(new int[] { 1, 11, 21 },
                               (idx, values) =>
            {
                result.Put(idx, values[0] * values[1] * values[2]);
            }
                               );
            //
            //IInterestedRaster<float> rst = new InterestedRaster<float>(null, Size.Empty, null);
            //rst.Put(result);
            //rst.Dispose();
        }
Esempio n. 4
0
        private IExtractResult ERADAlgorithm()
        {
            int    optdCH   = (int)_argumentProvider.GetArg("OPTDBandNo");
            double OptdZoom = (float)_argumentProvider.GetArg("OPTDZoom");
            int    lwpCH    = (int)_argumentProvider.GetArg("LWPBandNo");
            double LwpZoom  = (float)_argumentProvider.GetArg("LWPZoom");

            if (_argumentProvider.GetArg("mainfiles") == null || _argumentProvider.GetArg("LWPFile") == null)
            {
                return(null);
            }
            string optdFile = _argumentProvider.GetArg("mainfiles").ToString();
            string lwpFile  = _argumentProvider.GetArg("LWPFile").ToString();

            if (optdCH == -1 || lwpCH == -1 || !File.Exists(optdFile) || !File.Exists(lwpFile))
            {
                //errorStr = "雾滴尺度产品生产所用通道未设置完全,请检查!";
                return(null);
            }

            IRasterDataProvider        optdPrd = null;
            IRasterDataProvider        lwpPrd  = null;
            IVirtualRasterDataProvider vrd     = null;

            try
            {
                optdPrd = GeoDataDriver.Open(optdFile) as IRasterDataProvider;
                lwpPrd  = GeoDataDriver.Open(lwpFile) as IRasterDataProvider;
                vrd     = new VirtualRasterDataProvider(new IRasterDataProvider[] { optdPrd, lwpPrd });
                return(CalcOPTDByOneFile(vrd, optdPrd, optdCH, OptdZoom, lwpCH, LwpZoom));
            }
            finally
            {
                optdPrd.Dispose();
                lwpPrd.Dispose();
                vrd.Dispose();
            }
        }
Esempio n. 5
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);
                        }
                    }
                }
            }
        }