コード例 #1
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);
        }
コード例 #2
0
        public unsafe void CopyBlockToEmptyFile()
        {
            int                 xSize     = 512;
            int                 ySize     = 512;
            int                 bandCount = 20;
            string              fname     = "d:\\Ldf_Write_GeoDo.ldf";
            IRasterDataDriver   drv       = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            IRasterDataProvider dstPrd    = CreateEmptyFile(fname, drv, xSize, ySize, bandCount);
            IRasterDataProvider srcPrd    = OpenLdfFile(_originalFname);

            UInt16[] buffer   = new UInt16[xSize * ySize];
            long     lostTime = 0;

            fixed(UInt16 *ptr = buffer)
            {
                IntPtr butterPtr = new IntPtr(ptr);

                for (int b = 1; b <= bandCount; b++)
                {
                    srcPrd.GetRasterBand(b).Read(200, 200, xSize, ySize, butterPtr, enumDataType.UInt16, xSize, ySize);
                    Stopwatch sw = new Stopwatch();
                    sw.Start();
                    dstPrd.GetRasterBand(b).Write(0, 0, xSize, ySize, butterPtr, enumDataType.UInt16, xSize, ySize);
                    sw.Stop();
                    lostTime += sw.ElapsedMilliseconds;
                }
            }

            srcPrd.Dispose();
            dstPrd.Dispose();
            Console.WriteLine("Time Only Write:" + lostTime.ToString());
        }
コード例 #3
0
        public unsafe void ReadMvgFile_noOffset_Bigger()
        {
            IGeoDataDriver      drv = GeoDataDriver.GetDriverByName("MVG");
            IRasterDataProvider prd = drv.Open(_fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;

            Assert.NotNull(prd);
            IRasterBand band = prd.GetRasterBand(1);

            Assert.NotNull(band);
            Int16[] data = new Int16[prd.Width * 2 * prd.Height];
            Console.WriteLine("prd.Width = " + prd.Width);
            Console.WriteLine("prd.Height = " + prd.Height);
            Console.WriteLine("band.Width = " + band.Width);
            Console.WriteLine("band.Height= " + band.Height);
            fixed(Int16 *ptr = data)
            {
                IntPtr buffer = new IntPtr(ptr);

                band.Read(0, 0, prd.Width, prd.Height, buffer, enumDataType.Int16, prd.Width * 2, prd.Height);
            }

            string dstFname = @"e:\mvg";//@"C:\工作\3.13\read";

            WriteBandToFile(data, dstFname + "_bigger" + "_read" + ".dat");
            prd.Dispose();
            drv.Dispose();
        }
コード例 #4
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);
        }
コード例 #5
0
        public void GetBandData()
        {
            string              fname = "d:\\NOAA18_AVHRR_CHINA_L1_20090806_N3_1000M.dat";
            IRasterDataDriver   drv   = GeoDataDriver.GetDriverByName("GDAL") as IRasterDataDriver;
            IRasterDataProvider prd   = drv.Open(fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;// GeoDataDriver.Open(fname) as IRasterDataProvider;

            IRasterBand rb = prd.GetRasterBand(3);

            UInt16[] buffer = new UInt16[prd.Width * prd.Height];
            unsafe
            {
                fixed(UInt16 *ptr = buffer)
                {
                    IntPtr bufferPtr = new IntPtr(ptr);

                    //prd.Read(0, 0, prd.Width, prd.Height, bufferPtr, enumDataType.UInt16, prd.Width, prd.Height, 1, new int[] { 1 }, enumInterleave.BSQ);
                    rb.Read(0, 0, prd.Width, prd.Height, bufferPtr, enumDataType.UInt16, prd.Width, prd.Height);
                }
            }
            string       filename = "d:\\d.dat";
            FileStream   fs       = new FileStream(filename, FileMode.Create);
            BinaryWriter bw       = new BinaryWriter(fs);

            for (int i = 0; i < buffer.Length; i++)
            {
                bw.Write(buffer[i]);
            }
            fs.Close();
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
ファイル: ToChinaCenter.cs プロジェクト: windygu/hispeed
        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);
        }
コード例 #8
0
        public unsafe void ReadMvgFileNormal()
        {
            // _fname = @"C:\工作\3.13\SNW_DBLV_FY3A_VIRR_1000M_NULL_P001_200911131356.mvg";
            IGeoDataDriver      drv = GeoDataDriver.GetDriverByName("MVG");
            IRasterDataProvider prd = drv.Open(_fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;

            Assert.NotNull(prd);
            IRasterBand band = prd.GetRasterBand(1);

            Assert.NotNull(band);
            Int16[] data = new Int16[prd.Width * prd.Height];
            Console.WriteLine("prd.Width = " + prd.Width);
            Console.WriteLine("prd.Height = " + prd.Height);
            Console.WriteLine("band.Width = " + band.Width);
            Console.WriteLine("band.Height= " + band.Height);
            fixed(Int16 *ptr = data)
            {
                IntPtr buffer = new IntPtr(ptr);

                band.Read(0, 0, prd.Width, prd.Height, buffer, enumDataType.Int16, prd.Width, prd.Height);
            }

            string dstFname = @"e:\mvg";//@"C:\工作\3.13\read";

            WriteBandToFile(data, dstFname + "_normal" + "_read" + ".dat");
            prd.Dispose();
            drv.Dispose();
        }
コード例 #9
0
ファイル: Main.cs プロジェクト: windygu/hispeed
        private IRasterDataProvider CreateOutRaster(string outdir, IRasterDataProvider raster, ISpatialReference dstSpatial, PrjEnvelope envelope, double resolutionX, double resolutionY, string bandNames)
        {
            IRasterDataProvider outRaster = null;

            if (raster.Driver.Name == "MEM")    //smart 产品数据,输出也用MEM驱动,目前数据纠正这里不存在。
            {
                string[] options = new string[]
                {
                    "INTERLEAVE=BSQ",
                    "VERSION=MEM",
                    "SPATIALREF=" + dstSpatial.ToProj4String(),
                    "MAPINFO={" + 1 + "," + 1 + "}:{" + envelope.MinX + "," + envelope.MaxY + "}:{" + resolutionX + "," + resolutionY + "}",
                    string.IsNullOrWhiteSpace(bandNames)?"": "BANDNAMES=" + bandNames
                };
                string outfilename = Path.Combine(outdir, Path.GetFileNameWithoutExtension(raster.fileName) + ".DAT");
                outRaster = (raster.Driver as IRasterDataDriver).Create(outfilename, raster.Width, raster.Height, 1, enumDataType.Int16, options);
            }
            else//ldf
            {
                string[] options = new string[]
                {
                    "INTERLEAVE=BSQ",
                    "VERSION=LDF",
                    "SPATIALREF=" + dstSpatial.ToProj4String(),
                    "MAPINFO={" + 1 + "," + 1 + "}:{" + envelope.MinX + "," + envelope.MaxY + "}:{" + resolutionX + "," + resolutionY + "}",
                    "DATETIME=" + raster.DataIdentify.OrbitDateTime,
                    string.IsNullOrWhiteSpace(bandNames)?"": "BANDNAMES=" + bandNames
                };
                string            outfilename = Path.Combine(outdir, Path.GetFileNameWithoutExtension(raster.fileName) + ".LDF");
                IRasterDataDriver driver      = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
                outRaster = driver.Create(outfilename, raster.Width, raster.Height, 1, enumDataType.Int16, options);
            }
            return(outRaster);
        }
コード例 #10
0
        public static IRasterDataProvider CreateVirtureData(VirtualRasterHeader vHeader, string filename, enumDataType enumDataType)
        {
            IRasterDataDriver dr = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;

            return(dr.Create(filename, vHeader.Width, vHeader.Height, 1, enumDataType,
                             vHeader.CoordEnvelope.ToMapInfoString(new Size(vHeader.Width, vHeader.Height))));
        }
コード例 #11
0
        public unsafe void WriteWithSample()
        {
            int                 xSize     = 512;
            int                 ySize     = 512;
            int                 bandCount = 20;
            int                 dstWith   = 2000;
            int                 dstHeight = 2000;
            string              fname     = "d:\\Ldf_Write_GeoDo_Sample.ldf";
            IRasterDataDriver   drv       = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            IRasterDataProvider dstPrd    = CreateEmptyFile(fname, drv, dstWith, dstHeight, bandCount);
            IRasterDataProvider srcPrd    = OpenLdfFile(_originalFname);

            UInt16[] buffer = new UInt16[xSize * ySize];
            fixed(UInt16 *ptr = buffer)
            {
                IntPtr butterPtr = new IntPtr(ptr);

                for (int b = 1; b <= bandCount; b++)
                {
                    srcPrd.GetRasterBand(b).Read(200, 200, xSize, ySize, butterPtr, enumDataType.UInt16, xSize, ySize);
                    dstPrd.GetRasterBand(b).Write(0, 0, dstWith, dstHeight, butterPtr, enumDataType.UInt16, xSize, ySize);
                }
            }

            srcPrd.Dispose();
            dstPrd.Dispose();
        }
コード例 #12
0
        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;
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        private void BuildInternalBuffer(string fileName)
        {
            IRasterDataDriver drv = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;

            _dataProvider = drv.Create(fileName, vData.Width, vData.Height, 1, vData.DataType, GetOptions());
            _rasterBand   = _dataProvider.GetRasterBand(1);
        }
コード例 #15
0
        public IRasterBand[] Clip(IRasterBand srcBand, BlockDef[] blockDefs, int samplePercent, string driver, Action <int, string> progressCallback, params object[] options)
        {
            if (blockDefs.Length == 0 || blockDefs == null || srcBand == null)
            {
                return(null);
            }
            IRasterBand[] targetBands = new IRasterBand[blockDefs.Length];
            int           blockNums   = 0;

            foreach (BlockDef it in blockDefs)
            {
                int           tBeginRow = -1, tEndRow = -1, tBeginCol = -1, tEndCol = -1;
                int           oBeginRow = -1, oEndRow = -1, oBeginCol = -1, oEndCol = -1;
                CoordEnvelope oEnvelope  = srcBand.CoordEnvelope;
                CoordEnvelope tEnvelope  = it.ToEnvelope();
                Size          oSize      = new Size(srcBand.Width, srcBand.Height);
                Size          tSize      = ClipCutHelper.GetTargetSize(it, srcBand.ResolutionX, srcBand.ResolutionY);
                bool          isInternal = new RasterMoasicClipHelper().ComputeBeginEndRowCol(oEnvelope, oSize, tEnvelope, tSize, ref oBeginRow, ref oBeginCol, ref oEndRow, ref oEndCol,
                                                                                              ref tBeginRow, ref tBeginCol, ref tEndRow, ref tEndCol);
                IRasterDataDriver rasterDriver = GeoDataDriver.GetDriverByName(driver) as IRasterDataDriver;
                //targetBands[blockNums] = ;
                blockNums++;
            }
            return(targetBands);
        }
コード例 #16
0
        public void Compute(IRasterDataProvider dataProvider, string expression, string outDriver, string outFile, Action <int, string> progressTracker)
        {
            if (dataProvider == null || string.IsNullOrWhiteSpace(expression) || string.IsNullOrWhiteSpace(outDriver) || string.IsNullOrWhiteSpace(outFile))
            {
                throw new ArgumentNullException();
            }
            IGeoDataDriver driver = GeoDataDriver.GetDriverByName(outDriver);

            if (driver == null)
            {
                throw new Exception("driver '" + outDriver + "' is not existed.");
            }
            IRasterDataProvider dstProvider = CreateDstDataProvider(driver as IRasterDataDriver, outFile, dataProvider);

            if (dataProvider == null)
            {
                throw new Exception("use '" + outDriver + "'create RasterDataProvider is failed.");
            }
            try
            {
                Compute(dataProvider, expression, dstProvider.GetRasterBand(1), progressTracker);
            }
            finally
            {
                dstProvider.Dispose();
                driver.Dispose();
            }
        }
コード例 #17
0
ファイル: LdfDriver_Create.cs プロジェクト: configare/hispeed
        public void DeleteFile()
        {
            IRasterDataDriver drv      = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            string            dstfname = "d:\\CreateCopy.ldf";

            drv.Delete(dstfname);
            Assert.True(!File.Exists(dstfname));
        }
コード例 #18
0
ファイル: LdfDriver_Create.cs プロジェクト: configare/hispeed
        public void CreateEmptyLdfFile()
        {
            Assert.That(_newFileName != null);
            IGeoDataDriver driver = GeoDataDriver.GetDriverByName("LDF");

            Assert.NotNull(driver);
            ILdfDriver drv = driver as ILdfDriver;

            Assert.NotNull(drv);
            int            width      = 2048;
            int            height     = 3390;
            int            bandCount  = 10;
            enumDataType   dataType   = enumDataType.UInt16;
            enumInterleave interleave = enumInterleave.BSQ;
            string         version    = "LDF";
            //string proj4 = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137";
            string           mapInfo = "{1,1}:{110,35}:{0.01,0.01}";
            bool             withHdr = true;
            ILdfDataProvider prd     = drv.Create(_newFileName, width, height, bandCount, dataType,
                                                  "INTERLEAVE=" + interleave.ToString(),
                                                  "VERSION=" + version,
                                                  //"SPATIALREF=" + proj4,
                                                  "MAPINFO=" + mapInfo, "WITHHDR=" + withHdr.ToString()) as ILdfDataProvider;

            Assert.NotNull(prd);
            Assert.That(prd.Width == width && prd.Height == height);
            Assert.That(prd.BandCount == bandCount);
            Assert.That(prd.DataType == dataType);
            ILdfHeader header = prd.Header;

            Assert.NotNull(header);
            HdrFile hdr = header.ToHdrFile();

            PrintHdrInfo(hdr);
            Ldf1Header ldfheader = header as Ldf1Header;

            Assert.NotNull(ldfheader);
            Assert.That(ldfheader._width == width && ldfheader._height == height);
            Assert.That(ldfheader.DataType == dataType);
            Assert.NotNull(prd.SpatialRef);
            for (int i = 0; i < bandCount; i++)
            {
                IRasterBand band = prd.GetRasterBand(i + 1);
                Assert.NotNull(band);
                Assert.That(band.Width == width && band.Height == height);
                Assert.That(band.DataType == dataType);
            }
            prd.Dispose();
            drv.Dispose();
            Assert.True(File.Exists(_newFileName));
            FileInfo fInfo = new FileInfo(_newFileName);

            Assert.True(width * height * bandCount * 2 + header.HeaderSize == fInfo.Length);
            ISpatialReference spatialRef = prd.SpatialRef;

            Assert.NotNull(spatialRef);
            Console.Out.WriteLine(spatialRef.ToString());
        }
コード例 #19
0
        public void ReadAngleInfo()
        {
            string            fname  = "d:\\0111d2.n16.1bd";
            IRasterDataDriver driver = GeoDataDriver.GetDriverByName("NOAA_1BD") as IRasterDataDriver;

            Assert.NotNull(driver);
            IRasterDataProvider prd = driver.Open(fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;
            D1BDDataProvider    dp  = prd as D1BDDataProvider;
        }
コード例 #20
0
        /// <summary>
        /// 0、先生成目标文件,以防止目标空间不足。
        /// 1、计算查找表
        /// 2、对所有波段执行投影
        /// </summary>
        private void ProjectToLDF(IRasterDataProvider srcRaster, FY3_VIRR_PrjSettings prjSettings, ISpatialReference dstSpatialRef, Action <int, string> progressCallback)
        {
            string         outFormat    = prjSettings.OutFormat;
            string         outfilename  = prjSettings.OutPathAndFileName;
            string         dstProj4     = dstSpatialRef.ToProj4String();
            List <BandMap> bandMaps     = prjSettings.BandMapTable;
            int            dstBandCount = bandMaps.Count;
            Size           srcSize      = new Size(srcRaster.Width, srcRaster.Height);
            Size           dstSize      = prjSettings.OutSize;

            using (IRasterDataDriver drv = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver)
            {
                PrjEnvelope dstEnvelope = prjSettings.OutEnvelope;
                string      mapInfo     = "MAPINFO={" + 1 + "," + 1 + "}:{" + dstEnvelope.MinX + "," + dstEnvelope.MaxY + "}:{" + prjSettings.OutResolutionX + "," + prjSettings.OutResolutionY + "}";
                using (IRasterDataProvider prdWriter = drv.Create(outfilename, dstSize.Width, dstSize.Height, dstBandCount,
                                                                  enumDataType.UInt16, "INTERLEAVE=BSQ", "VERSION=LDF", "SPATIALREF=" + dstProj4, mapInfo, "WITHHDR=TRUE") as IRasterDataProvider)
                {
                    //计算查找表
                    //ISpatialReference srcSpatialRef = srcRaster.SpatialRef;
                    UInt16[] dstRowLookUpTable = new UInt16[dstSize.Width * dstSize.Height];
                    UInt16[] dstColLookUpTable = new UInt16[dstSize.Width * dstSize.Height];
                    _rasterProjector.ComputeIndexMapTable(_xs, _ys, srcSize, dstSize, dstEnvelope, _maxPrjEnvelope,
                                                          out dstRowLookUpTable, out dstColLookUpTable, progressCallback);
                    //执行投影
                    UInt16[] srcBandData = new UInt16[srcSize.Width * srcSize.Height];
                    UInt16[] dstBandData = new UInt16[dstSize.Width * dstSize.Height];
                    int      progress    = 0;
                    for (int i = 0; i < dstBandCount; i++)      //读取原始通道值,投影到目标区域
                    {
                        if (progressCallback != null)
                        {
                            progress = (int)((i + 1) * 100 / dstBandCount);
                            progressCallback(progress, string.Format("投影第{0}共{1}通道", i + 1, dstBandCount));
                        }
                        BandMap bandMap = bandMaps[i];
                        ReadBandData(srcBandData, bandMap.File, bandMap.DatasetName, bandMap.BandIndex, srcSize);
                        if (prjSettings.IsRadiation)
                        {
                            DoRadiation(srcBandData, srcSize, bandMap.DatasetName, bandMap.BandIndex, prjSettings.IsSolarZenith);
                        }
                        _rasterProjector.Project <UInt16>(srcBandData, srcSize, dstRowLookUpTable, dstColLookUpTable, dstSize, dstBandData, 0, progressCallback);
                        using (IRasterBand band = prdWriter.GetRasterBand(i + 1))
                        {
                            unsafe
                            {
                                fixed(UInt16 *ptr = dstBandData)
                                {
                                    IntPtr bufferPtr = new IntPtr(ptr);

                                    band.Write(0, 0, band.Width, band.Height, bufferPtr, enumDataType.UInt16, band.Width, band.Height);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #21
0
        public void OpenBSQFile_GDAL_FullSize()
        {
            IRasterDataDriver   drv = GeoDataDriver.GetDriverByName("GDAL") as IRasterDataDriver;
            IRasterDataProvider prd = drv.Open(_fnameBSQ, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;// OpenLdfFile(_fnameBSQ);

            Assert.Greater(prd.BandCount, 0);
            ReadOneBandByFullSize(prd, 1, "D:\\GDAL_LDF");
            prd.Dispose();
        }
コード例 #22
0
        private void BuildInternalBuffer(string fileName)
        {
            IRasterDataDriver drv = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;

            _outputDataProvider = drv.Create(fileName, vData.Width, vData.Height, vData.BandCount, vData.DataType, GetOptions());
            _outputRasterBands  = new IRasterBand[vData.BandCount];
            for (int i = 0; i < vData.BandCount; i++)
            {
                _outputRasterBands[i] = _outputDataProvider.GetRasterBand(i + 1);
            }
        }
コード例 #23
0
ファイル: Smooth.NET.cs プロジェクト: windygu/hispeed
 private bool InitOutFile(IRasterDataProvider rasterIn, string[] inFiles, string outDir, int defaultValue, out IRasterDataProvider[] rasterOuts)
 {
     rasterOuts = null;
     try
     {
         string            fileExt      = "";
         IRasterDataDriver driver       = null;
         string[]          optionString = null;
         if (rasterIn.Driver.Name == "MEM")//判识结果
         {
             optionString = new string[] {
                 "SPATIALREF=" + rasterIn.SpatialRef == null?"":("SPATIALREF=" + rasterIn.SpatialRef.ToProj4String()),
                 "MAPINFO={" + 1 + "," + 1 + "}:{" + rasterIn.CoordEnvelope.MinX + "," + rasterIn.CoordEnvelope.MaxY + "}:{" + rasterIn.ResolutionX + "," + rasterIn.ResolutionY + "}"
             };
             driver  = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;
             fileExt = ".DAT";
         }
         else
         {
             optionString = new string[] {
                 "INTERLEAVE=BSQ",
                 "VERSION=LDF",
                 "WITHHDR=TRUE",
                 "SPATIALREF=" + rasterIn.SpatialRef == null?"":("SPATIALREF=" + rasterIn.SpatialRef.ToProj4String()),
                 "MAPINFO={" + 1 + "," + 1 + "}:{" + rasterIn.CoordEnvelope.MinX + "," + rasterIn.CoordEnvelope.MaxY + "}:{" + rasterIn.ResolutionX + "," + rasterIn.ResolutionY + "}"
             };
             driver  = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
             fileExt = ".LDF";
         }
         string[] fileOuts = new string[inFiles.Length];
         for (int i = 0; i < inFiles.Length; i++)
         {
             fileOuts[i] = Path.Combine(Path.GetDirectoryName(inFiles[0]) + "/out", Path.ChangeExtension(Path.GetFileName(inFiles[i]), fileExt));
         }
         rasterOuts = new IRasterDataProvider[inFiles.Length];
         for (int i = 0; i < inFiles.Length; i++)
         {
             IRasterDataProvider rasterOut = driver.Create(fileOuts[i], rasterIn.Width, rasterIn.Height, 1, rasterIn.DataType, optionString);
             if (rasterOut == null)
             {
                 return(false);
             }
             rasterOuts[i] = rasterOut;
             double nodata = 0d;
             double.TryParse(defaultValue.ToString(), out nodata);
             rasterOut.GetRasterBand(1).Fill(nodata);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }
コード例 #24
0
 public FY3_MERSIFileProjector()
     : base()
 {
     _name            = "FY3_MERSI";
     _fullname        = "FY3_MERSI轨道数据投影";
     _rasterProjector = new RasterProjector();
     _srcSpatialRef   = new SpatialReference(new GeographicCoordSystem());
     _outLdfDriver    = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
     _left            = 10;
     _right           = 10;
 }
コード例 #25
0
ファイル: RasterCut.cs プロジェクト: configare/hispeed
        private IRasterDataProvider CreateDstDataProvider(IRasterDataProvider srcDataProvider, RasterCut.CutArgument args, RasterCut.BlockItem item)
        {
            string        extName;
            CoordEnvelope evp = GetDstEnvelope(srcDataProvider, item);

            object[]          options = GetOptions(srcDataProvider, args, item, out extName, evp);
            IRasterDataDriver drv     = GeoDataDriver.GetDriverByName(args.Driver, args.DriverOptions) as IRasterDataDriver;
            string            fname   = GetOutFileName(args.OutFileName, item, extName);

            return(drv.Create(fname, item.Width, item.Height, args.BandNos.Length, srcDataProvider.DataType,
                              options));
        }
コード例 #26
0
        internal IRasterDataProvider CreateOutFile(string outfilename, int dstBandCount, Size outSize, enumDataType dataType, string[] options)
        {
            string dir = Path.GetDirectoryName(outfilename);

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            IRasterDataDriver outdrv = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;

            return(outdrv.Create(outfilename, outSize.Width, outSize.Height, dstBandCount, dataType, options) as IRasterDataProvider);
        }
コード例 #27
0
ファイル: MvgDriver_Create.cs プロジェクト: configare/hispeed
        public void CreateCopy()
        {
            string              fname   = "E:\\DST_DBLV_FY3A_VIRR_1000M_DXX_P001_200911131352.MVG";
            IRasterDataDriver   drv     = GeoDataDriver.GetDriverByName("MVG") as IRasterDataDriver;
            string              dstName = "E:\\Copy.MVG";
            IRasterDataProvider srcprd  = drv.Open(fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;
            IRasterDataProvider dstprd  = drv.CreateCopy(dstName, srcprd);

            Assert.True(File.Exists(dstName));
            dstprd.Dispose();
            srcprd.Dispose();
        }
コード例 #28
0
        public void ProcessVectorToRaster(Feature[] features, string shpPrimaryField, enumDataType dataType, double resolution, CoordEnvelope envelope, string rasterFileName)
        {
            //创建目标文件
            if (string.IsNullOrEmpty(rasterFileName))
            {
                return;
            }
            if (envelope == null)
            {
                return;
            }
            int height = (int)Math.Ceiling((envelope.MaxY - envelope.MinY) / resolution);
            int width  = (int)Math.Ceiling((envelope.MaxX - envelope.MinX) / resolution);
            IRasterDataProvider dataPrd = null;

            try
            {
                string extension = Path.GetExtension(rasterFileName).ToUpper();
                switch (extension)
                {
                case ".LDF":
                {
                    IRasterDataDriver driver  = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
                    string            mapInfo = envelope.ToMapInfoString(new Size(width, height));
                    dataPrd = driver.Create(rasterFileName, width, height, 1, dataType, mapInfo);
                    break;
                }

                case ".DAT":
                {
                    IRasterDataDriver driver  = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;
                    string            mapInfo = envelope.ToMapInfoString(new Size(width, height));
                    dataPrd = driver.Create(rasterFileName, width, height, 1, dataType, mapInfo);
                    break;
                }

                default:
                    return;
                }
                if (features == null || features.Length < 1)
                {
                    return;
                }
                ProcessVectorToRaster(features, shpPrimaryField, dataPrd);
            }
            finally
            {
                if (dataPrd != null)
                {
                    dataPrd.Dispose();
                }
            }
        }
コード例 #29
0
ファイル: LdfDriver_Create.cs プロジェクト: configare/hispeed
        public void CreateCopy()
        {
            string              fname    = @"D:\\FY3A_Mersi_2010_06_24_10_00_1000M_L1B_PRJ_Whole.LDF";
            IRasterDataDriver   drv      = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            string              dstfname = "d:\\CreateCopy.ldf";
            IRasterDataProvider srcprd   = drv.Open(fname, enumDataProviderAccess.ReadOnly) as IRasterDataProvider;
            IRasterDataProvider dstprd   = drv.CreateCopy(dstfname, srcprd);

            Assert.True(File.Exists(dstfname));
            dstprd.Dispose();
            srcprd.Dispose();
        }
コード例 #30
0
 public FY3C_MERSIFileProjector()
     : base()
 {
     _name                = "FY3C_MERSI";
     _fullname            = "FY3C_MERSI轨道数据投影";
     _rasterProjector     = new RasterProjector();
     _srcSpatialRef       = new SpatialReference(new GeographicCoordSystem());
     _outLdfDriver        = GeoDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
     _left                = 10;
     _right               = 10;
     _supportExtBandNames = new string[] { "DEM", "LandCover", "LandSeaMask" };
 }