public Dictionary <string, Dictionary <string, double> > StatArea(string rasterFile, int[] aoi, Func <T, bool> filter)
 {
     using (IRasterDataProvider dataProvider = GeoDataDriver.Open(rasterFile) as IRasterDataProvider)
     {
         return(StatArea(dataProvider, aoi, filter));
     }
 }
 private void DoSession(IRasterDataProvider srcRaster, IRasterDataProvider locationRaster, ISpatialReference dstSpatialRef, FY3_MERSI_PrjSettings prjSettings, Action <int, string> progressCallback)
 {
     if (_curSession == null || _curSession != srcRaster || _isBeginSession)
     {
         Size srcImgSize = new Size(srcRaster.Width, srcRaster.Height);
         ReadyLocations(srcRaster, dstSpatialRef, prjSettings, out _srcLocationSize, out _maxPrjEnvelope, progressCallback);
         if (progressCallback != null)
         {
             progressCallback(4, "准备其他参数");
         }
         if (prjSettings.IsRadiation)
         {
             ReadyRadiationArgs(srcRaster);
         }
         if (prjSettings.IsSolarZenith) //&& prjSettings.IsRadiation
         {
             _szDataFilename = GetSolarZenithCacheFilename(locationRaster.fileName);
             if (!File.Exists(_szDataFilename))
             {
                 ReadySolarZenithArgsToFile(locationRaster);
             }
             else
             {
                 _solarZenithCacheRaster = GeoDataDriver.Open(_szDataFilename) as IRasterDataProvider;
             }
             if (prjSettings.IsSensorZenith)
             {
                 ReadySensorZenith(locationRaster);
             }
         }
         _rasterDataBands = TryCreateRasterDataBands(srcRaster, prjSettings, progressCallback);//待投影的波段
         _isBeginSession  = false;
     }
 }
Beispiel #3
0
        private IRasterDataProvider CreatOutputRaster(string outputFName, IRasterDataProvider inRaster, int bandCount, Action <int, string> progressCallback)
        {
            if (inRaster == null)
            {
                return(null);
            }
            if (progressCallback != null)
            {
                progressCallback(1, "开始创建目标文件...");
            }
            IRasterDataDriver driver  = GeoDataDriver.GetDriverByName("GDAL") as IRasterDataDriver;
            List <string>     options = new List <string>();

            options.AddRange(new string[] { "DRIVERNAME=GTiff",
                                            "TFW=YES",
                                            "TILED=YES" });
            if (inRaster.SpatialRef != null)
            {
                options.Add("WKT=" + inRaster.SpatialRef.ToWKTString());
            }
            if (inRaster.CoordEnvelope != null)
            {
                options.Add("GEOTRANSFORM=" + string.Format("{0},{1},{2},{3},{4},{5}", 0, inRaster.ResolutionX, 0, inRaster.CoordEnvelope.MaxY, 0, -inRaster.ResolutionY));
            }
            IRasterDataProvider prdWrite = driver.Create(outputFName, inRaster.Width, inRaster.Height, bandCount, enumDataType.Byte, options.ToArray()) as IRasterDataProvider;

            if (progressCallback != null)
            {
                progressCallback(20, "目标文件创建完成.");
            }
            return(prdWrite);
        }
Beispiel #4
0
        public string MutiRegionsClip(string file, GeoDo.RSS.Core.VectorDrawing.AOIContainerLayer aoiContainer, string savePath)
        {
            _aoiContainer = aoiContainer;

            using (IRasterDataProvider raster = GeoDataDriver.Open(file) as IRasterDataProvider)
            {
                _resolutionX      = raster.ResolutionX;
                _resolutionY      = raster.ResolutionY;
                _fileSize         = new Size(raster.Width, raster.Height);
                _fileEnvelope     = raster.CoordEnvelope;
                _activeSpatialRef = raster.SpatialRef;
                _activeCoordType  = raster.CoordType;
                raster.Dispose();
            }
            GeoDo.RSS.Core.DrawEngine.CoordEnvelope corEnvelope = null;
            corEnvelope = GetGeoRect();      //获取多个aoi的外接矩形
            evp.MaxX    = corEnvelope.MaxX;
            evp.MaxY    = corEnvelope.MaxY;
            evp.MinX    = corEnvelope.MinX;
            evp.MinY    = corEnvelope.MinY;
            BlockDefWithAOI        outEnvelope;
            Size                   size;
            List <BlockDefWithAOI> blockList = new List <BlockDefWithAOI>();

            GetArgs(out outEnvelope, out size);
            envelopes = new BlockDefWithAOI[] { outEnvelope };
            blockList.AddRange(envelopes);
            blockList[0].AOIIndexes = GetIndexes();     //获得多个aoi的Index
            OutDir = savePath;
            string[] put = RasterClipT(file, blockList.ToArray(), OutDir, "Cut");
            return(put[0]);
        }
Beispiel #5
0
        private int GetMicapsWidth(string micapsfile, string rasterfile)
        {
            int width           = 0;
            MicapsDataReader dr = MicapsDataReaderFactory.GetVectorFeatureDataReader(micapsfile, new object[1] {
                _datatype
            }) as MicapsDataReader;
            Envelope env = null;

            if (StatRegionSet.UseRegion)
            {
                env = StatRegionSet.Envelope;
            }
            else if (rasterfile != null && Path.GetExtension(rasterfile) != ".000")
            {
                using (IRasterDataProvider datap = GeoDataDriver.Open(rasterfile) as IRasterDataProvider)
                {
                    CoordEnvelope cenv = datap.CoordEnvelope;
                    env = new Envelope(cenv.MinX, cenv.MinY, cenv.MaxX, cenv.MaxY);
                }
            }
            if (env == null)
            {
                width = dr.Length;
            }
            else
            {
                width = dr.GetFeatures(env).Length;
            }
            return(width);
        }
Beispiel #6
0
        public void OpenFile()
        {
            string fname = "d:\\1110910.1a5";

            fname = @"H:\测试\测试数据\1a5\1110908.1a5";
            IRasterDataDriver driver = GeoDataDriver.GetDriverByName("NOAA_1A5") as IRasterDataDriver;

            Assert.NotNull(driver);
            //IRasterDataProvider prd = driver.Open(fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;
            IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider;

            Assert.NotNull(prd);
            Console.WriteLine(prd.BandCount.ToString());
            Console.WriteLine(prd);
            //PrintHeaderInfo(prd);

            ID1A5DataProvider noaaPrd = prd as ID1A5DataProvider;

            Assert.NotNull(noaaPrd);
            D1A5Header header = noaaPrd.Header as D1A5Header;

            Assert.NotNull(header);
            Console.WriteLine(header.SatelliteIdentify);
            Console.WriteLine(header.BitErrorRatio);
            Console.WriteLine(header.DataBeginDayNums);
            Console.WriteLine(header.DataBeginMilliSecond);
        }
Beispiel #7
0
        private void BuildInternalBuffer(string _fileName)
        {
            IRasterDataDriver drv = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;

            _dataProvider = drv.Create(_fileName, _size.Width, _size.Height, 1, GetDataType(), GetOptions());
            _rasterValues = _dataProvider.GetRasterBand(1);
        }
Beispiel #8
0
        private void SetDefaultPara(string filename)
        {
            ProParas.SrcRaster = GeoDataDriver.Open(_fileNames[0]) as IRasterDataProvider;
            IBandProvider bandprovider             = ProParas.SrcRaster.BandProvider;
            Dictionary <string, string> _fileAttrs = bandprovider.GetAttributes();

            _fileAttrs.TryGetValue("File Alias Name", out _sensorName);
            ucSelectBands.InitTreeView(ProParas.SrcRaster);
            ucSelectBands.AddAll();
            SetBandsInfo();
            switch (_sensorName)
            {
            case "VIRR_L1":
                ProParas.VirrPrjSetting = new  FY3_VIRR_PrjSettings();
                ProParas.VirrPrjSetting.OutPathAndFileName = _fileNames[0] + "_WHOLE.ldf";
                //_WHOLE_LW.
                //_DXX_LW.
                //_EF_LW.
                ProParas.VirrPrjSetting.OutResolutionX = 0.01F;
                ProParas.VirrPrjSetting.OutResolutionY = 0.01F;
                ProParas.VirrPrjSetting.OutFormat      = "LDF";
                ProParas.VirrPrjSetting.OutEnvelope    = null;
                ucSelectBands.InitTreeView(ProParas.SrcRaster);
                ucSelectBands.AddAll();
                //ProParas.VirrPrjSetting.BandMapTable = ucSelectBands.GetBandMapList();
                break;
            }
        }
Beispiel #9
0
 private void btnInputFile_Click(object sender, EventArgs e)
 {
     using (OpenFileDialog dlg = new OpenFileDialog())
     {
         dlg.Filter = "LDF files(*.ldf)|*.ldf";
         if (dlg.ShowDialog() == DialogResult.OK)
         {
             txtInputFile.Text = dlg.FileName;
             string extname = Path.GetExtension(dlg.FileName).ToUpper();
             if (!string.IsNullOrEmpty(txtInputFile.Text))
             {
                 using (IRasterDataProvider raster = GeoDataDriver.Open(dlg.FileName) as IRasterDataProvider)
                 {
                     _resolutionX      = raster.ResolutionX;
                     _resolutionY      = raster.ResolutionY;
                     _fileSize         = new Size(raster.Width, raster.Height);
                     _fileEnvelope     = raster.CoordEnvelope;
                     _activeSpatialRef = raster.SpatialRef;
                     _activeCoordType  = raster.CoordType;
                 }
                 _outsizeRegion = new CoordEnvelope(_fileEnvelope.MinX, _fileEnvelope.MaxX, _fileEnvelope.MinY, _fileEnvelope.MaxY);
                 FillControlsValuesByFileArgs();
                 SetInputFilename(txtInputFile.Text);
             }
         }
     }
 }
Beispiel #10
0
        /// <summary>
        /// 插值处理
        /// </summary>
        public void AndBiliNear(string srcFilename, Int16 zoom, string savepathname)
        {
            using (IRasterDataProvider inRaster1 = GeoDataDriver.Open(srcFilename) as IRasterDataProvider)
            {
                enumDataType type = inRaster1.DataType;
                switch (type)
                {
                case enumDataType.Byte: Bilinear <Byte>(srcFilename, zoom, savepathname); break;

                case enumDataType.Double: Bilinear <Double>(srcFilename, zoom, savepathname); break;

                case enumDataType.Float: Bilinear <Single>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int16: Bilinear <Int16>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int32: Bilinear <Int32>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int64: Bilinear <Int64>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt16: Bilinear <UInt16>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt32: Bilinear <UInt32>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt64: Bilinear <UInt64>(srcFilename, zoom, savepathname); break;

                default: break;
                }
            }
        }
        /// <summary>
        /// 创建目标tif文件读取驱动
        /// </summary>
        /// <returns></returns>
        private IRasterDataProvider GetOutFileProvider(IRasterDataProvider srcRaster, Size outimg, string outfilename)
        {
            string[] options   = null;
            string   driver    = string.Empty;
            string   dstwktstr = string.Empty;

            dstwktstr = "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137,298.257223563]],PRIMEM['Greenwich',0],UNIT['Degree',0.0174532925199433]]";
            dstwktstr = dstwktstr.Replace('\'', '"');
            double minx        = srcRaster.CoordEnvelope.MinX;
            double maxy        = srcRaster.CoordEnvelope.MaxY;
            double resolutionX = srcRaster.ResolutionX;
            double resolutionY = srcRaster.ResolutionY;

            driver  = "GDAL";
            options = new string[] {
                "DRIVERNAME=GTiff",
                "TFW=NO",
                "WKT=" + dstwktstr,
                "GEOTRANSFORM=" + string.Format("{0},{1},{2},{3},{4},{5}", minx, resolutionX, 0, maxy, 0, -resolutionY)
            };
            int    bandCount = srcRaster.BandCount == 1 ? 1 : 3;
            string outdir    = Path.GetDirectoryName(outfilename);

            if (!Directory.Exists(outdir))
            {
                Directory.CreateDirectory(outdir);
            }
            IRasterDataDriver outdrv = GeoDataDriver.GetDriverByName(driver) as IRasterDataDriver;

            return(outdrv.Create(outfilename, outimg.Width, outimg.Height, bandCount, enumDataType.Byte, options) as IRasterDataProvider);
        }
Beispiel #12
0
        public void SmoothComputer(string srcFilename, Int16 smoothwindow, string savepathname)
        {
            using (IRasterDataProvider inRaster1 = GeoDataDriver.Open(srcFilename) as IRasterDataProvider)
            {
                enumDataType type = inRaster1.DataType;
                switch (type)
                {
                case enumDataType.Byte: ComputerMid <Byte>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Double: ComputerMid <Double>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Float: ComputerMid <Single>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int16: ComputerMid <Int16>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int32: ComputerMid <Int32>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int64: ComputerMid <Int64>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt16: ComputerMid <UInt16>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt32: ComputerMid <UInt32>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt64: ComputerMid <UInt64>(srcFilename, smoothwindow, savepathname); break;

                default: break;
                }
            }
        }
Beispiel #13
0
        private bool FileSpatialReferenceSupport(string[] fnames)
        {
            ISpatialReference sr;

            using (IRasterDataProvider prd = GeoDataDriver.Open(fnames[0]) as IRasterDataProvider)
                sr = prd.SpatialRef;
            for (int i = 1; i < fnames.Length; i++)
            {
                using (IRasterDataProvider prd = GeoDataDriver.Open(fnames[i]) as IRasterDataProvider)
                {
                    if (sr == null)
                    {
                        if (prd.SpatialRef != null)
                        {
                            throw new ArgumentException("选择的文件空间参考类型不同,无法生成动画。");
                        }
                    }
                    if (prd.SpatialRef == null)
                    {
                        throw new ArgumentException("选择的文件空间参考类型不同,无法生成动画。");
                    }
                    if (!sr.IsSame(prd.SpatialRef))
                    {
                        throw new ArgumentException("选择的文件空间参考不同,无法生成动画。");
                    }
                }
            }
            return(true);
        }
Beispiel #14
0
        private CoordEnvelope CalcOutRegion(List <string> moasicFileNames)
        {
            CoordEnvelope dstCoordEnvelope = null;

            try
            {
                foreach (string fileName in moasicFileNames)
                {
                    CheckFile(fileName);
                    using (IRasterDataProvider rasterprd = GeoDataDriver.Open(fileName) as IRasterDataProvider)
                    {
                        if (dstCoordEnvelope != null)
                        {
                            dstCoordEnvelope = dstCoordEnvelope.Union(rasterprd.CoordEnvelope);
                        }
                        else
                        {
                            dstCoordEnvelope = rasterprd.CoordEnvelope;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            return(dstCoordEnvelope);
        }
Beispiel #15
0
 private bool IsSameTypeFile(string fileName)
 {
     using (IRasterDataProvider prd = GeoDataDriver.Open(fileName) as IRasterDataProvider)
     {
         if (_isFirst)
         {
             _satellite = prd.DataIdentify.Satellite;
             _sensor    = prd.DataIdentify.Sensor;
             _bandCount = prd.BandCount;
             _isFirst   = false;
             return(true);
         }
         else
         {
             if (prd.DataIdentify.Satellite != _satellite || prd.DataIdentify.Sensor != _sensor ||
                 prd.BandCount != _bandCount)
             {
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
     }
 }
Beispiel #16
0
        private void WriteAboutFile(string dstFilename)
        {
            //写出dat文件的相关信息
            IRasterDataProvider rd = GeoDataDriver.Open(dstFilename) as IRasterDataProvider;

            try
            {
                if (rd != null)
                {
                    MemoryRasterDataProvider mrd = rd as MemoryRasterDataProvider;
                    if (mrd == null)
                    {
                        return;
                    }
                    HdrFile hdr = mrd.ToHdrFile();
                    if (hdr != null)
                    {
                        string hdrfile = Path.Combine(Path.GetDirectoryName(dstFilename), Path.GetFileNameWithoutExtension(dstFilename) + ".hdr");
                        HdrFile.SaveTo(hdrfile, hdr);
                    }
                }
            }
            finally
            {
                if (rd != null)
                {
                    rd.Dispose();
                }
            }
        }
Beispiel #17
0
 public static string OverView(string prdFilename, int maxSize)
 {
     try
     {
         using (IRasterDataProvider prd = GeoDataDriver.Open(prdFilename) as IRasterDataProvider)
         {
             int[] bands = new int[] { 1, 2, 3 };
             for (int i = 0; i < 3; i++)
             {
                 if (bands[i] > prd.BandCount)
                 {
                     bands[i] = 1;
                 }
             }
             string overViewFilename = Path.ChangeExtension(prdFilename, ".overview.png");
             using (Bitmap bmp = GenerateOverview(prd, bands, maxSize))
             {
                 bmp.MakeTransparent(Color.Black);
                 bmp.Save(overViewFilename, ImageFormat.Png);
                 bmp.Dispose();
             }
             return(overViewFilename);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("生成缩略图失败" + ex.Message);
         return(null);
     }
 }
Beispiel #18
0
        public IRasterDataProvider Add(string file)
        {
            IRasterDataProvider prd = null;

            try
            {
                prd = GeoDataDriver.Open(file) as IRasterDataProvider;
                if (Add(prd))
                {
                    return(prd);
                }
                if (prd != null)
                {
                    prd.Dispose();
                }
                return(null);
            }
            catch
            {
                if (prd != null)
                {
                    prd.Dispose();
                }
                throw;
            }
        }
Beispiel #19
0
        private void BuildCalcBuffer(string fileName)
        {
            IRasterDataDriver drv = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;

            _outputCalcDataProvider = drv.Create(fileName, vData.Width, vData.Height, 1, CalcType, GetOptions());
            _outputCalcRasterBand   = _outputCalcDataProvider.GetRasterBand(1);
        }
        private void WriteData(float[] data, string fileName, int width, int height)
        {
            string[] options = new string[] {
                "INTERLEAVE=BSQ",
                "VERSION=LDF",
                "WITHHDR=TRUE",
            };
            if (_outLdfDriver == null)
            {
                _outLdfDriver = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            }
            IRasterDataProvider cacheWriter = _outLdfDriver.Create(fileName, width, height, 1, enumDataType.Float, options) as IRasterDataProvider;

            {
                using (IRasterBand band = cacheWriter.GetRasterBand(1))
                {
                    unsafe
                    {
                        fixed(float *ptr = data)
                        {
                            IntPtr bufferPtr = new IntPtr(ptr);

                            band.Write(0, 0, width, height, bufferPtr, enumDataType.Float, width, height);
                        }
                    }
                }
            }
            _solarZenithCacheRaster = cacheWriter;
        }
Beispiel #21
0
        public IRasterDataProvider Add(string file, out string errorMsg)
        {
            errorMsg = "";
            IRasterDataProvider prd = null;

            try
            {
                prd = GeoDataDriver.Open(file) as IRasterDataProvider;
                if (prd != null)
                {
                    IRasterDataProvider newprd = ProjectionFactory.CheckPrjArg(prd);
                    if (newprd != prd)
                    {
                        prd.Dispose();
                    }
                    if (Add(newprd, out errorMsg))
                    {
                        return(newprd);
                    }
                }
                if (prd != null)
                {
                    prd.Dispose();
                }
                return(null);
            }
            catch
            {
                if (prd != null)
                {
                    prd.Dispose();
                }
                throw;
            }
        }
        private IRasterBand WriteCacheFile(double[] data, string fileName, int width, int height, out IRasterDataProvider cacheWriter)
        {
            string[] options = new string[]
            {
                "INTERLEAVE=BSQ",
                "VERSION=LDF",
                "WITHHDR=TRUE",
            };
            if (_outLdfDriver == null)
            {
                _outLdfDriver = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            }
            cacheWriter = _outLdfDriver.Create(fileName, width, height, 1, enumDataType.Double, options) as IRasterDataProvider;
            IRasterBand band = cacheWriter.GetRasterBand(1);

            {
                unsafe
                {
                    fixed(double *ptr = data)
                    {
                        IntPtr bufferPtr = new IntPtr(ptr);

                        band.Write(0, 0, width, height, bufferPtr, enumDataType.Double, width, height);
                    }
                }
            }
            return(band);
        }
Beispiel #23
0
        private IRasterDataProvider GetRasterDataProvider()
        {
            //byte[] buffer = new byte[] { 3,20,19,14,20,
            //                              17,16,1,17,5,
            //                              20,11,6,21,8,
            //                              5,18,20,30,27,
            //                              30,31,25,8,30
            //                            };
            //int w = 5;
            //int h = 5;
            ////IArrayRasterBand<byte> band = new ArrayRasterBand<byte>(1, buffer, w, h, null);
            ////return new ArrayRasterDataProvider<byte>("", new byte[][] { buffer }, w, h);
            //IRasterDataDriver drv = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            //IRasterDataProvider prd = drv.Create("f:\\1.ldf", 5, 5, 1, enumDataType.Byte);
            //GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
            //prd.GetRasterBand(1).Write(0, 0, 5, 5, handle.AddrOfPinnedObject(), enumDataType.Byte, 5, 5);
            //handle.Free();
            //return prd;

            using (OpenFileDialog dlg = new OpenFileDialog())
            {
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    return(GeoDataDriver.Open(dlg.FileName, "ComponentID=0000000") as IRasterDataProvider);
                }
            }
            return(null);
        }
Beispiel #24
0
        public void ProcessArrayToRaster(string dstFileName, int[,] arrayValue)
        {
            CoordEnvelope       envelope = new CoordEnvelope(-180, 180, -90, 90);
            IRasterDataProvider dataPrd  = null;
            enumDataType        dataType = enumDataType.Int16;

            try
            {
                if (Path.GetExtension(dstFileName).ToUpper() == ".DAT")
                {
                    IRasterDataDriver driver  = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;
                    string            mapInfo = envelope.ToMapInfoString(new Size(_datwidth, _datheight));
                    dataPrd = driver.Create(dstFileName, _datwidth, _datheight, 1, dataType, mapInfo);
                }
                else
                {
                    return;
                }
                if (arrayValue == null)
                {
                    return;
                }
                ProcessArrayToRaster(arrayValue, dataPrd);
            }
            finally
            {
                if (dataPrd != null)
                {
                    dataPrd.Dispose();
                }
            }
        }
Beispiel #25
0
        internal IRasterDataProvider CreateOutFile(string driver, string outfilename, int dstBandCount, Size outSize, enumDataType dataType, string[] options)
        {
            CheckAndCreateDir(Path.GetDirectoryName(outfilename));
            IRasterDataDriver outdrv = GeoDataDriver.GetDriverByName(driver) as IRasterDataDriver;

            return(outdrv.Create(outfilename, outSize.Width, outSize.Height, dstBandCount, dataType, options) as IRasterDataProvider);
        }
Beispiel #26
0
        public static bool PrjTransf(string srcFile, PrjEnvelope srcEnvelope, Dictionary <string, H5T.H5Type> dataSets, string dstFile, PrjEnvelope dstEnvelope, float dstResoultion)
        {
            Action <int, string> progressTracker = null;

            string[] args       = new string[3];
            string   datasetstr = string.Empty;

            foreach (string itemdest in dataSets.Keys)
            {
                datasetstr += itemdest + ",";
            }
            datasetstr = datasetstr.Remove(datasetstr.LastIndexOf(','));
            args[0]    = string.Format("datasets ={0}", datasetstr);
            args[1]    = string.Format("geoinfo={0},{1},{2},{3},1000.000,1000.000", srcEnvelope.MinX, srcEnvelope.MaxX, srcEnvelope.MinY, srcEnvelope.MaxY);
            args[2]    = "proj4 = +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs";
            ISpatialReference dstSpatialRef = SpatialReference.GetDefault();
            FilePrjSettings   prjSetting    = new FilePrjSettings();

            IRasterDataProvider prd = GeoDataDriver.Open(srcFile, args) as IRasterDataProvider;

            if (prd != null)
            {
                prjSetting.OutEnvelope        = dstEnvelope;
                prjSetting.OutResolutionX     = dstResoultion;
                prjSetting.OutResolutionY     = dstResoultion;
                prjSetting.OutPathAndFileName = dstFile;
                ProjectedFileTransform proj = new ProjectedFileTransform();
                proj.ProjectNew(prd, prjSetting, dstSpatialRef, progressTracker, dataSets);
                prd.Dispose();
                return(true);
            }
            return(false);
        }
Beispiel #27
0
        public void Tran()
        {
            int    center        = 180;
            string inputFileName = @"E:\fy3c\FY3C_VIRR_20131015_1000M_global_CH6.tiff";

            using (IRasterDataProvider inRaster = GeoDataDriver.Open(inputFileName) as IRasterDataProvider)
            {
                int    bandCount   = inRaster.BandCount;
                string outputFName = Path.ChangeExtension(inputFileName, ".180.tiff");
                using (IRasterDataProvider outRaster = CreatOutputRaster(outputFName, inRaster, bandCount, null))
                {
                    int off = 18;//左右丢失的数据(黑边)
                    //0-15000,18000
                    int      leftPiex  = 18000;
                    int      rightPiex = 18000;//
                    byte[]   band      = new byte[(leftPiex - off) * 18000];
                    GCHandle handle    = GCHandle.Alloc(band, GCHandleType.Pinned);
                    for (int b = 0; b < bandCount; b++)
                    {
                        inRaster.GetRasterBand(b + 1).Read(off, 0, leftPiex - off, 18000, handle.AddrOfPinnedObject(), enumDataType.Byte, leftPiex - off, 18000);
                        outRaster.GetRasterBand(b + 1).Write(rightPiex - off, 0, leftPiex - off, 18000, handle.AddrOfPinnedObject(), enumDataType.Byte, leftPiex - off, 18000);
                    }
                    handle.Free();
                    band   = new byte[(rightPiex - off) * 18000];
                    handle = GCHandle.Alloc(band, GCHandleType.Pinned);
                    for (int b = 0; b < bandCount; b++)
                    {
                        inRaster.GetRasterBand(b + 1).Read(leftPiex - off, 0, rightPiex - off, 18000, handle.AddrOfPinnedObject(), enumDataType.Byte, rightPiex - off, 18000);
                        outRaster.GetRasterBand(b + 1).Write(off, 0, rightPiex - off, 18000, handle.AddrOfPinnedObject(), enumDataType.Byte, rightPiex - off, 18000);
                    }
                    handle.Free();
                }
            }
        }
Beispiel #28
0
        private IRasterDataProvider GetSrcRaster()
        {
            string srcFilename = @"D:\mas数据\virr\FY3A_VIRRX_GBAL_L1_20090107_0220_1000M_MS.HDF";

            //srcFilename = @"E:\gov\FY3B_VIRRX_GBAL_L1_20120308_0830_1000M_MS.HDF";
            return(GeoDataDriver.Open(srcFilename) as IRasterDataProvider);
        }
Beispiel #29
0
        private IRasterDataProvider GetSrcRaster()
        {
            string srcFilename = @"D:\masData\noaa_1bd\NOAA18_AVHRR_CHINA_L1_20090806_N3_1000M.1bd";

            //srcFilename = @"D:\mas数据\NOAA18_1BD\NA18_AVHRR_HRPT_L1_ORB_MLT_NUL_20120319_0618_1100M_PJ.L1B";
            return(GeoDataDriver.Open(srcFilename) as IRasterDataProvider);
        }
 public Dictionary <string, Dictionary <string, double> > StatArea(string rasterFile, Func <T, int, int> weight)
 {
     using (IRasterDataProvider dataProvider = GeoDataDriver.Open(rasterFile) as IRasterDataProvider)
     {
         return(StatArea(dataProvider, null, weight));
     }
 }