コード例 #1
0
ファイル: Form1.cs プロジェクト: liubin888/GetDataTools
 private void labDSMin_TextChanged(object sender, EventArgs e)
 {
     if (labDSMin.Text != "")
     {
         OSGeo.GDAL.Gdal.AllRegister();
         OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(labDSMin.Text, OSGeo.GDAL.Access.GA_ReadOnly);
         double[]           a  = new double[6];
         ds.GetGeoTransform(a);
         double xx    = a[0];
         double yy    = a[3];
         double size  = a[1];
         double xSixe = ds.RasterXSize;
         double ySixe = ds.RasterYSize;
         labInFileInfo.Text += labDSMin.Text + ":\r" + "\r\n"
                               + "左上角X坐标:" + xx.ToString() + "\r"
                               + "左上角Y坐标:" + yy.ToString() + "\r"
                               + "像元尺寸:" + size.ToString() + "\r"
                               + "图像大小:" + xSixe.ToString() + "*" + ySixe.ToString();
         ds.Dispose();
     }
     else
     {
         labInFileInfo.Text = "";
     }
 }
コード例 #2
0
ファイル: BaseProcess.cs プロジェクト: TianChun525/RSImage
        /// <summary>
        /// 距离倒数权重插值。
        /// </summary>
        /// <param name="ds">要重采样到的数据集。</param>
        /// <param name="band">要重采样到数据集的波段。</param>
        /// <param name="x">被插值的像元在数据集中的x坐标。</param>
        /// <param name="y">被插值的像元在数据集中的y坐标。</param>
        /// <returns>插值结果</returns>
        public double IDW(OSGeo.GDAL.Dataset ds, int band, double x, double y)
        {
            int Width  = ds.RasterXSize;
            int Height = ds.RasterYSize;

            if (x < 0 || x > Width - 1 || y < 0 || y > Height - 1)
            {
                throw new IndexOutOfRangeException("待计算像元的行列号超出影像边界。期望的参数为:0<=x<=" + (Width - 1).ToString() + ",0<=y<=" + (Height - 1).ToString() + ",输入的参数为:x=" + x.ToString() + ",y=" + y.ToString());
            }
            double tmpDistance = 0.0, sumPiZi = 0.0, sumPi = 0.0;

            tmpDistance = Distanse(x, y, Math.Ceiling(x), Math.Ceiling(y));
            sumPi      += 1.0 / tmpDistance;
            sumPiZi    += GetDN(ds, band, (int)Math.Ceiling(x), (int)Math.Ceiling(y)) / tmpDistance;

            tmpDistance = Distanse(x, y, Math.Ceiling(x), Math.Floor(y));
            sumPi      += 1.0 / tmpDistance;
            sumPiZi    += GetDN(ds, band, (int)Math.Ceiling(x), (int)Math.Floor(y)) / tmpDistance;

            tmpDistance = Distanse(x, y, Math.Floor(x), Math.Ceiling(y));
            sumPi      += 1.0 / tmpDistance;
            sumPiZi    += GetDN(ds, band, (int)Math.Floor(x), (int)Math.Ceiling(y)) / tmpDistance;

            tmpDistance = Distanse(x, y, Math.Floor(x), Math.Floor(y));
            sumPi      += 1.0 / tmpDistance;
            sumPiZi    += GetDN(ds, band, (int)Math.Floor(x), (int)Math.Floor(y)) / tmpDistance;

            return(sumPiZi / sumPi);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        /// <summary>
        /// 获取Feature的最大值和最小值 范围不准
        /// </summary>
        /// <param name="dsmDs"></param>
        /// <param name="oriFeat"></param>
        /// <param name="bufFeat"></param>
        /// <param name="subRasterOff_Size"></param>
        private static void getMaxMinValue(OSGeo.GDAL.Dataset dsmDs, OSGeo.OGR.Feature oriFeat, OSGeo.OGR.Feature bufFeat, int[] subRasterOff_Size)
        {
            //拿到当前Feature对应的栅格值(数组)
            double[] rastValue = new double[subRasterOff_Size[2] * subRasterOff_Size[3]];

            //把SUBimg的值读进数组
            lock (dsmDs)
            {
                dsmDs.GetRasterBand(1).ReadRaster(
                    subRasterOff_Size[0],
                    subRasterOff_Size[1],
                    subRasterOff_Size[2],
                    subRasterOff_Size[3],
                    rastValue,
                    subRasterOff_Size[2],
                    subRasterOff_Size[3],
                    0, 0);
            }
            double max = rastValue.Max();
            double min = rastValue.Min();
            double cay = max - min;

            oriFeat.SetField("TEMP", max - min);
            oriFeat.SetField("MIN", 0);
            oriFeat.SetField("MAX", min);
            oriFeat.SetField("HIGHT", max);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        /// <summary>
        /// 创建slopeMap,设置无效值
        /// </summary>
        /// <param name="DemPath"></param>
        /// <param name="OutSlpPath"></param>
        static void CreateSlopeMap()
        {
            double dsm_NoDataValue; int dsm_HasNoDataValue;

            OSGeo.GDAL.Band dsmBand = dsmDataset.GetRasterBand(1);
            dsmBand.GetNoDataValue(out dsm_NoDataValue, out dsm_HasNoDataValue);

            //调用GDal创建slope影像
            if (File.Exists(slopePath))
            {
                gdalDriver.Delete(slopePath);
            }
            slopeDataSet = gdalDriver.Create(slopePath, dsm_Xsize, dsm_Ysize, 1, OSGeo.GDAL.DataType.GDT_Float32, null);
            slopeDataSet.SetProjection(dsmDataset.GetProjection());
            slopeDataSet.SetGeoTransform(dsm_Transform);
            OSGeo.GDAL.Band slopeBand = slopeDataSet.GetRasterBand(1);

            //设置无效值
            if (dsm_HasNoDataValue == 0)            //dsm没有无效值
            {
                //把DSM和SLOPE全设置成用户指定的值
                dsmBand.SetNoDataValue(imgNodata);
                slopeBand.SetNoDataValue(imgNodata);
            }
            else                        //DSM有无效值时
            {
                //把SLOPE和全局变量设置成DSM的无效值
                imgNodata = dsm_NoDataValue;
                slopeBand.SetNoDataValue(dsm_NoDataValue);
            }
            // BufferOnePixel(slopeBand);
        }
コード例 #5
0
 /// <summary>
 /// Initialise ImageStore with a GDAL dataset
 /// </summary>
 /// <param name="dataset">Dataset in EPSG:4326</param>
 public GDALImageStore(
     string dataSetName,
     string sourcefilename,
     OSGeo.GDAL.Dataset dataset,
     string format)
 {
     //TODO: Allow serialization and deserialization of this class for persistency
     m_dataSetName    = dataSetName;
     m_dataset        = dataset;
     m_sourcefilename = sourcefilename;
     dataset.GetGeoTransform(m_transform);
     m_lines              = dataset.RasterYSize;
     m_pixels             = dataset.RasterXSize;
     m_imageFileExtension = "png";
     m_bands              = dataset.RasterCount;
     if (format.Equals("jpg"))
     {
         m_imageFileExtension = "jpg";
         //m_tileformat = ImageFileFormat.Jpg;
     }
     else if (format.Equals("bmp"))
     {
         m_imageFileExtension = "bmp";
         //m_tileformat = ImageFileFormat.Bmp;
     }
     else if (format.Equals("dds"))
     {
         m_imageFileExtension = "dds";
         //m_tileformat = ImageFileFormat.Dds;
     }
 }
コード例 #6
0
 /// <summary>
 /// 是否被释放
 /// </summary>
 /// <param name="myDS"></param>
 /// <returns></returns>
 public static bool IsDispose(this OSGeo.GDAL.Dataset myDS)
 {
     try
     {
         int e = myDS.RasterCount;
         return(false);
     }
     catch { return(true); }
 }
コード例 #7
0
 public void Dispose()
 {
     GC.SuppressFinalize(this);
     if (_gDS != null)
     {
         _gDS.Dispose();
         _gDS = null;
     }
 }
コード例 #8
0
        /// <summary>
        /// Gdal to DotSpatial at Raster Level
        /// </summary>
        /// <param name="dataset">Gdal Dataset</param>
        /// <param name="bandIndex">Index of Band</param>
        /// <returns>Dotspatial Raster</returns>
        public static DotSpatial.Data.IRaster Gdal2DSRaster(OSGeo.GDAL.Dataset dataset, int bandIndex)
        {
            DotSpatial.Data.IRaster result = null;
            OSGeo.GDAL.Band         band   = dataset.GetRasterBand(bandIndex);
            if (dataset != null)
            {
                switch (band.DataType)
                {
                case OSGeo.GDAL.DataType.GDT_Byte:
                    result = new GdalRaster <byte>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_CFloat32:
                case OSGeo.GDAL.DataType.GDT_CFloat64:
                case OSGeo.GDAL.DataType.GDT_CInt16:
                case OSGeo.GDAL.DataType.GDT_CInt32:
                    break;

                case OSGeo.GDAL.DataType.GDT_Float32:
                    result = new GdalRaster <float>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_Float64:
                    result = new GdalRaster <double>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_Int16:
                    result = new GdalRaster <short>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_UInt16:
                case OSGeo.GDAL.DataType.GDT_Int32:
                    result = new GdalRaster <int>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_TypeCount:
                    break;

                case OSGeo.GDAL.DataType.GDT_UInt32:
                    result = new GdalRaster <long>(dataset, band);
                    break;

                case OSGeo.GDAL.DataType.GDT_Unknown:
                    break;

                default:
                    break;
                }
            }

            if (result != null)
            {
                (result as DotSpatial.Data.Raster).Open();
            }

            return(result);
        }
コード例 #9
0
        /************************************   生成等值线  **********************************************/

        public static string dzx(string filePath)
        {
            Console.WriteLine("开始创建等值线!");
            OSGeo.OGR.Ogr.RegisterAll();
            OSGeo.GDAL.Gdal.AllRegister();
            //无效值
            double noDataValue;

            //0不使用无效值,1使用无效值
            int hasDataValue;

            //读入数据源
            OSGeo.GDAL.Dataset inData = OSGeo.GDAL.Gdal.Open(filePath, OSGeo.GDAL.Access.GA_ReadOnly);

            //分析数据源
            inData.GetRasterBand(1).GetNoDataValue(out noDataValue, out hasDataValue);

            double min, max, mean, std;

            inData.GetRasterBand(1).GetStatistics(0, 1, out min, out max, out mean, out std);

            int jianG = 2;

            int count = Convert.ToInt32((max - min) / jianG + 0.5);

            double[] shu = new double[count];

            for (int i = 0; i < count; i++)
            {
                shu[i] = min + jianG * i;
            }

            //创建空的SHP
            OSGeo.OGR.Ogr.RegisterAll();
            OSGeo.OGR.Driver dr = OSGeo.OGR.Ogr.GetDriverByName("ESRI shapefile");
            string           a  = StaticTools.tempFilePath("shp", "原始等值线");

            OSGeo.OGR.DataSource ds       = dr.CreateDataSource(a, null);
            OSGeo.OGR.Layer      dzxLayer = ds.CreateLayer("", null, OSGeo.OGR.wkbGeometryType.wkbMultiLineString, null);
            OSGeo.OGR.FieldDefn  fieldDf0 = new OSGeo.OGR.FieldDefn("LID", OSGeo.OGR.FieldType.OFTInteger);
            OSGeo.OGR.FieldDefn  fieldDf1 = new OSGeo.OGR.FieldDefn("EVE", OSGeo.OGR.FieldType.OFTReal);
            dzxLayer.CreateField(fieldDf0, 1); //ID
            dzxLayer.CreateField(fieldDf1, 1); //Value
            //Band(1), 间隔, 起始高度, 分段数量, 分段值数组, 是否有无效值, 无效值, 预置图层. ID字段, 高度值字段, null , null
            OSGeo.GDAL.Gdal.ContourGenerate(inData.GetRasterBand(1), jianG, min, count, shu, hasDataValue, noDataValue, dzxLayer, 0, 1, null, null);
            if (dzxLayer.GetFeatureCount(0) > 0)
            {
                Console.WriteLine("等值线创建完成!");
            }
            else
            {
                Console.WriteLine("等值线创建失败!");
            }
            ds.Dispose();
            inData.Dispose();
            return(a);
        }
コード例 #10
0
 /// <summary>
 /// 和GetData功能相同,但是使用GDAL直接从文件中读取数据。
 /// </summary>
 /// <param name="fileName">文件名字</param>
 /// <param name="width">ref用于返回数据的宽度</param>
 /// <param name="height">ref用于返回数据的高度</param>
 /// <returns>一维数据数组,按行优先</returns>
 private double[] GdalGetData(string fileName, ref int width, ref int height)
 {
     OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(fileName, OSGeo.GDAL.Access.GA_ReadOnly);
     width  = dataset.RasterXSize;
     height = dataset.RasterYSize;
     double[]        imageBuffer = new double[width * height];
     OSGeo.GDAL.Band b           = dataset.GetRasterBand(1);
     b.ReadRaster(0, 0, width, height, imageBuffer, width, height, 0, 0);
     return(imageBuffer);
 }
コード例 #11
0
ファイル: GeoTransform.cs プロジェクト: noFuckToSay/SharpMap
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="gdalDataSet">The gdal data set</param>
        public GeoTransform(OSGeo.GDAL.Dataset gdalDataSet)
        {
            if (gdalDataSet == null)
            {
                throw new ArgumentException("GeoTransform constructor invoked with null dataset.", nameof(gdalDataSet));
            }

            gdalDataSet.GetGeoTransform(_transform);
            ComputeInverse();
        }
コード例 #12
0
        //返回值是函数的系数
        //例如:y=a0+a1*x 返回值则为a0 a1
        //例如:y=a0+a1*x+a2*x*x 返回值则为a0 a1 a2
        #endregion

        /*************************************************************************************************/


        /************************************   生成等值线  **********************************************/

        public static string dzxPath(string filePath)
        {
            OSGeo.OGR.Ogr.RegisterAll();
            OSGeo.GDAL.Gdal.AllRegister();

            //无效值
            double noDataValue;

            //0不使用无效值,1使用无效值
            int hasDataValue;

            //读入数据源
            OSGeo.GDAL.Dataset inData = OSGeo.GDAL.Gdal.Open(filePath, OSGeo.GDAL.Access.GA_ReadOnly);

            //分析数据源
            inData.GetRasterBand(1).GetNoDataValue(out noDataValue, out hasDataValue);

            double min, max, mean, std;

            inData.GetRasterBand(1).GetStatistics(0, 1, out min, out max, out mean, out std);

            int jianG = 2;

            int count = Convert.ToInt32((max - min) / jianG + 0.5);

            double[] shu = new double[count];

            for (int i = 0; i < count; i++)
            {
                shu[i] = min + jianG * i;
            }

            //创建空的SHP
            string dzSavePath = filePath.Substring(0, filePath.LastIndexOf(".")) + "_dzx.shp";

            OSGeo.OGR.Driver dr = OSGeo.OGR.Ogr.GetDriverByName("ESRI shapefile");
            if (System.IO.File.Exists(dzSavePath))
            {
                System.IO.File.Delete(dzSavePath);
            }
            OSGeo.OGR.DataSource ds       = dr.CreateDataSource(dzSavePath, null);
            OSGeo.OGR.Layer      dzxLayer = ds.CreateLayer("等值线", null, OSGeo.OGR.wkbGeometryType.wkbMultiLineString, null);
            OSGeo.OGR.FieldDefn  fieldDf0 = new OSGeo.OGR.FieldDefn("LID", OSGeo.OGR.FieldType.OFTInteger);
            OSGeo.OGR.FieldDefn  fieldDf1 = new OSGeo.OGR.FieldDefn("EVE", OSGeo.OGR.FieldType.OFTReal);
            dzxLayer.CreateField(fieldDf0, 1); //ID
            dzxLayer.CreateField(fieldDf1, 1); //Value

            //Band(1), 间隔, 起始高度, 分段数量, 分段值数组, 是否有无效值, 无效值, 预置图层. ID字段, 高度值字段, null , null
            OSGeo.GDAL.Gdal.ContourGenerate(inData.GetRasterBand(1), jianG, min, count, shu, hasDataValue, noDataValue, dzxLayer, 0, 1, null, null);

            dzxLayer.Dispose();
            ds.Dispose();

            return(dzSavePath);
        }
コード例 #13
0
        public static bool FT(OSGeo.GDAL.Dataset InputDS, OSGeo.GDAL.DataType OutDataType, string OutPath)
        {
            try
            {
                if (InputDS == null)
                {
                    throw new ArgumentNullException("输入数据集为空。");
                }
                if (String.IsNullOrWhiteSpace(OutPath.Trim()))
                {
                    throw new ArgumentNullException("输出路径为空或非法。");
                }
                OSGeo.GDAL.Driver Dri = OSGeo.GDAL.Gdal.GetDriverByName("Gtiff");
                if (Dri == null)
                {
                    throw new Exception("无法获取GDAL Driver。");
                }

                int xSize             = InputDS.RasterXSize;
                int ySize             = InputDS.RasterYSize;
                OSGeo.GDAL.Dataset DS = Dri.Create(OutPath, xSize, ySize, InputDS.RasterCount, OutDataType, null);
                Tools.Common.CopyMetadata(InputDS, DS);
                //Matrix<Complex32> M = new Matrix<Complex32>;
                //for (int i = 0; i < InputDS.RasterCount; i++)
                //{
                for (int Row = 0; Row < ySize; Row++)
                {
                    float[]     Values = new float[xSize];
                    Complex32[] c      = new Complex32[xSize];

                    //读取DN到数组
                    InputDS.GetRasterBand(1).ReadRaster(0, Row, xSize, 1, Values, xSize, 1, 0, 0);
                    for (int Col = 0; Col < xSize; Col++)
                    {
                        c[Col] = new Complex32(Values[Col], 0);
                    }
                    //M.Add(c);
                    //写结果到新栅格
                    //DS.GetRasterBand(1).WriteRaster(0, Row, xSize, 1, Values, xSize, 1, 0, 0);
                    DS.FlushCache();
                    Thread.Sleep(1);
                }
                //}
                Dri.Dispose();
                DS.Dispose();
                return(true);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
                return(false);
            }
        }
コード例 #14
0
ファイル: GeoTransform.cs プロジェクト: swordjock/FTAnalyzer
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="gdalDataset">The gdal dataset</param>
        public GeoTransform(OSGeo.GDAL.Dataset gdalDataset)
        {
            if (gdalDataset == null)
            {
                throw new ArgumentException("GeoTransform constructor invoked with null dataset.", "gdalDataset");
            }

            var array = new double[6];

            gdalDataset.GetGeoTransform(array);
            _transform = array;
            ComputeInverse();
        }
コード例 #15
0
        /// <summary>
        /// 模拟结束事件监听辅助函数
        /// </summary>
        protected void SimulateEndHelper(BaseCa ca)
        {
            // 将模拟结果添加到系统中
            double[] buffer = ca.BeginBuffer;

            int width  = ca.Width;
            int height = ca.Height;
            //var map = GIS.FrameWork.Application.App.Map;

             
            // 保存输出结果
            var path = Application.StartupPath + @"\log";

            if (!Directory.Exists(path))         //如果不存在就创建file文件夹                 
            {
                Directory.CreateDirectory(path); //创建该文件夹 
            }
            var outputPath = path + @"\" + (dateNow.ToString("MMddyyhhmmss")) + (this.uuid++) + ".tif";

            OSGeo.GDAL.Driver  driverSave  = OSGeo.GDAL.Gdal.GetDriverByName("GTiff");
            OSGeo.GDAL.Dataset datasetSave = driverSave.Create(outputPath, width, height, 1, OSGeo.GDAL.DataType.GDT_Byte, null);
            datasetSave.WriteRaster(0, 0, width, height, buffer, width, height, 1, new int[1] {
                1
            }, 0, 0, 0);
            datasetSave.SetProjection(ca.projStr);
            datasetSave.SetGeoTransform(ca.geoTransform);
            datasetSave.GetRasterBand(1).SetNoDataValue(ca.noDataVal);
            datasetSave.FlushCache();
            datasetSave.Dispose();
            driverSave.Dispose();

            //// 翻转图像 ?
            //buffer = InvertImage(buffer, width, height);

            MessageBox.Show("模拟结束, 输出文件:" + outputPath);


            //// 新建 GDAL dataset
            //OSGeo.GDAL.Driver driver = OSGeo.GDAL.Gdal.GetDriverByName("MEM");
            //OSGeo.GDAL.Dataset dataset = driver.Create("", width, height, 1, OSGeo.GDAL.DataType.GDT_Float64, null);
            //dataset.WriteRaster(0, 0, width, height, buffer, width, height, 1, new int[1] { 1 }, 0, 0, 0);


            //// 将GDAL dataset转化为IRaster数据集
            //DotSpatial.Data.IRaster raster = GIS.GDAL.RasterConverter.Gdal2DSRaster(dataset, 1);
            //raster.Name = "Result";

            //map.Layers.Add(raster);
        }
コード例 #16
0
        public override void Run()
        {
            OpenFileDialog openTiffDialog = new OpenFileDialog();

            if (openTiffDialog.ShowDialog() == DialogResult.OK)
            {
                var tiffName = openTiffDialog.FileName;
                OSGeo.GDAL.Dataset      tiffDataset = OSGeo.GDAL.Gdal.Open(tiffName, OSGeo.GDAL.Access.GA_ReadOnly);
                OSGeo.GDAL.Band         band        = tiffDataset.GetRasterBand(1);
                DotSpatial.Data.IRaster raster      = GIS.GDAL.RasterConverter.Gdal2DSRaster(tiffDataset, 1);
                FileInfo fileInfo = new FileInfo(tiffName);
                raster.Name = fileInfo.Name;
                GIS.FrameWork.Application.App.Map.Layers.Add(raster);
            }
        }
コード例 #17
0
        public void LoadAffineTransform(string filename)
        {
            using (OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(filename, OSGeo.GDAL.Access.GA_ReadOnly))
            {
                AffineTransform = new double[6];
                dataset.GetGeoTransform(AffineTransform);

                string targetProjection = "GEOGCS[\"Moon 2000\", DATUM[\"D_Moon_2000\", SPHEROID[\"Moon_2000_IAU_IAG\",1737400.0,0.0]], PRIMEM[\"Greenwich\",0], UNIT[\"Decimal_Degree\",0.0174532925199433]]";

                var src = new OSGeo.OSR.SpatialReference(dataset.GetProjectionRef());
                var dst = new OSGeo.OSR.SpatialReference(targetProjection);

                pixelToLatLon = new OSGeo.OSR.CoordinateTransformation(src, dst);
                latLonToPixel = new OSGeo.OSR.CoordinateTransformation(dst, src);
            }
        }
コード例 #18
0
        public MemoryMappedInt16Terrain(string referenceImage)
        {
            Open(TerrainImageFile);

            using (OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(referenceImage, OSGeo.GDAL.Access.GA_ReadOnly))
            {
                _affineTransform = new double[6];
                dataset.GetGeoTransform(_affineTransform);

                string projection = dataset.GetProjectionRef();

                var src = new OSGeo.OSR.SpatialReference(projection);
                var dst = new OSGeo.OSR.SpatialReference(PolarStereographic);
                _pixelToLineSample = new OSGeo.OSR.CoordinateTransformation(src, dst);
            }
        }
コード例 #19
0
        private IRasterSet GetRasterSet(string fileName, OSGeo.GDAL.Dataset dataset)
        {
            IRasterSet rasterSet = null;

            if (dataset != null && dataset.RasterCount > 0)
            {
                using var band = dataset.GetRasterBand(1);
                if (band == null)
                {
                    return(null);
                }
                switch (band.DataType)
                {
                case OSGeo.GDAL.DataType.GDT_Byte:
                    rasterSet = new GdalRasterSet <byte>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_Int16:
                    rasterSet = new GdalRasterSet <short>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_UInt16:
                    rasterSet = new GdalRasterSet <ushort>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_Int32:
                    rasterSet = new GdalRasterSet <int>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_UInt32:
                    rasterSet = new GdalRasterSet <uint>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_CFloat32:
                    rasterSet = new GdalRasterSet <float>(fileName, dataset);
                    break;

                case OSGeo.GDAL.DataType.GDT_CFloat64:
                    rasterSet = new GdalRasterSet <double>(fileName, dataset);
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            return(rasterSet);
        }
コード例 #20
0
        IRasterSet IRasterDriver.Open(string fileName, bool update)
        {
            OSGeo.GDAL.Dataset dataset = null;
            var access = update ? OSGeo.GDAL.Access.GA_Update : OSGeo.GDAL.Access.GA_ReadOnly;

            try
            {
                dataset = OSGeo.GDAL.Gdal.Open(fileName, access);
            }
            catch (Exception e)
            {
                Debug.WriteLine($"打开“{fileName}”失败,错误信息:{e}");
            }
            IRasterSet rasterSet = GetRasterSet(fileName, dataset);

            return(rasterSet);
        }
コード例 #21
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            string output = "";

            try
            {
                GdalConfiguration.ConfigureOgr();

                GdalConfiguration.ConfigureGdal();

                output = "It works!";
            }

            catch (Exception e)
            {
                output = "{0} Exception caught. " + e;
            }

            string input = "";

            DA.GetData(0, ref input);

            string file = input;

            int pickBand = 1;

            DA.GetData(1, ref pickBand);

            OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(file, OSGeo.GDAL.Access.GA_ReadOnly);

            var band = ds.GetRasterBand(pickBand);

            var bandXSize = band.XSize;
            var bandYSize = band.YSize;

            var data = new float[bandXSize * bandYSize];

            band.ReadRaster(0, 0, bandXSize, bandYSize, data, bandXSize, bandYSize, 0, 0);

            ds.GetMetadata(output);

            ds = null;

            DA.SetData(0, output);
            DA.SetDataList(1, data);
        }
コード例 #22
0
ファイル: GdalRasterLayer.cs プロジェクト: cigannnb/SharpMap
 private void Dispose(bool disposing)
 {
     if (!disposed)
     {
         if (disposing)
         {
             if (_GdalDataset != null)
             {
                 try
                 {
                     _GdalDataset.Dispose();
                 }
                 finally { _GdalDataset = null; }
             }
         }
         disposed = true;
     }
 }
コード例 #23
0
ファイル: Form1.cs プロジェクト: liubin888/GetDataTools
        private void openFileDSM_FileOk(object sender, CancelEventArgs e)
        {
            labDSMin.Text = openFileDSM.FileName;
            OSGeo.GDAL.Gdal.AllRegister();
            OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(openFileDSM.FileName, OSGeo.GDAL.Access.GA_ReadOnly);
            double[]           a  = new double[6];
            ds.GetGeoTransform(a);
            double xx    = a[0];
            double yy    = a[3];
            double size  = a[1];
            double xSixe = ds.RasterXSize;
            double ySixe = ds.RasterYSize;

            labInFileInfo.Text += openFileDSM.SafeFileName + ":\r" + "\r\n"
                                  + "左上角X坐标:" + xx.ToString() + "\r"
                                  + "左上角Y坐标:" + yy.ToString() + "\r"
                                  + "像元尺寸:" + size.ToString() + "\r"
                                  + "图像大小:" + xSixe.ToString() + "*" + ySixe.ToString();
            ds.Dispose();
        }
コード例 #24
0
ファイル: GdalRasterLayer.cs プロジェクト: cigannnb/SharpMap
        /// <summary>
        /// initialize a Gdal based raster layer
        /// </summary>
        /// <param name="strLayerName">Name of layer</param>
        /// <param name="imageFilename">location of image</param>
        public GdalRasterLayer(string strLayerName, string imageFilename)
        {
            this.LayerName = strLayerName;
            this.Filename  = imageFilename;
            disposed       = false;

            OSGeo.GDAL.Gdal.AllRegister();
            try
            {
                _GdalDataset = OSGeo.GDAL.Gdal.Open(_Filename, OSGeo.GDAL.Access.GA_ReadOnly);
                imagesize    = new Size(_GdalDataset.RasterXSize, _GdalDataset.RasterYSize);

                _Envelope = this.GetExtent();
            }
            catch (Exception ex)
            {
                _GdalDataset = null;
                throw new Exception("Couldn't load dataset. " + ex.Message + ex.InnerException);
            }
        }
コード例 #25
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GdalConfiguration.ConfigureOgr();

            GdalConfiguration.ConfigureGdal();

            string input = "";

            DA.GetData(0, ref input);

            string file = @"C:\Users\Paula\Desktop\Felipe\New\multi_1.20181031.grb2";

            OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(file, OSGeo.GDAL.Access.GA_ReadOnly);

            //string output = ds.GetProjectionRef();

            string output = file;

            DA.SetData(0, output);
        }
コード例 #26
0
ファイル: GdalRasterLayer.cs プロジェクト: lishxi/_SharpMap
        /// <summary>
        /// initialize a Gdal based raster layer
        /// </summary>
        /// <param name="strLayerName">Name of layer</param>
        /// <param name="imageFilename">location of image</param>
        public GdalRasterLayer(string strLayerName, string imageFilename)
        {
            this.LayerName = strLayerName;
            this.Filename = imageFilename;
            disposed = false;

            OSGeo.GDAL.Gdal.AllRegister();
            try
            {
                _GdalDataset = OSGeo.GDAL.Gdal.Open(_Filename, OSGeo.GDAL.Access.GA_ReadOnly);
                imagesize = new Size(_GdalDataset.RasterXSize, _GdalDataset.RasterYSize);

                _Envelope = this.GetExtent();
            }
            catch (Exception ex)
            {
                _GdalDataset = null;
                throw new Exception("Couldn't load dataset. " + ex.Message + ex.InnerException);
            }

        }
コード例 #27
0
        private List <double[]> readImageCoordinatesBoundsInLonLat(OSGeo.GDAL.Dataset imageDataset)
        {
            var band = imageDataset.GetRasterBand(1);

            if (band == null)
            {
                return(null);
            }

            var width  = band.XSize;
            var height = band.YSize;

            double[] geoTransformerData = new double[6];
            imageDataset.GetGeoTransform(geoTransformerData);


            SpatialReference         currentReference = new SpatialReference(imageDataset.GetProjectionRef());
            SpatialReference         newReference     = GdalUtilities.getWgs84Reference();
            CoordinateTransformation ct = new CoordinateTransformation(currentReference, newReference);

            double[] northWestPoint = new double[2] {
                geoTransformerData[0], geoTransformerData[3]
            };
            ct.TransformPoint(northWestPoint);

            double[] southEastPoint = new double[2] {
                geoTransformerData[0] + geoTransformerData[1] * width,
                geoTransformerData[3] + geoTransformerData[5] * height
            };
            ct.TransformPoint(southEastPoint);


            return(new List <double[]> {
                northWestPoint, southEastPoint
            });
        }
コード例 #28
0
        //𝐿_𝑇=𝑎+𝑏*cos⁡(𝑖)
        //𝐿_𝐻=𝐿_𝑇+(cos⁡(𝜃𝑠)+𝑎/𝑏)/(cos⁡(𝑖)+𝑎/𝑏)
        //cos⁡𝑖=cos⁡(𝜃𝑠)*cos⁡𝑆+sin⁡(𝜃𝑠) cos⁡(𝜑𝑠−𝐴)

        public static OSGeo.GDAL.Dataset CCorrectionn(OSGeo.GDAL.Dataset InputDS, OSGeo.GDAL.DataType OutputDataType, string OutPath)
        {
            return(null);
        }
コード例 #29
0
        public RasterClass(IRasterDataset dataset, string filename, IPolygon polygon)
        {
            try
            {
                FileInfo fi = new FileInfo(filename);
                _title    = fi.Name;
                _filename = filename;
                _dataset  = dataset;

                OSGeo.GDAL.Gdal.AllRegister();
                _gDS = OSGeo.GDAL.Gdal.Open(fi.FullName, 0);
                if (_gDS == null && _gDS.RasterCount == 0)
                {
                    _valid = false;
                    return;
                }

                _iWidth  = _gDS.RasterXSize;
                _iHeight = _gDS.RasterYSize;

                switch (fi.Extension.ToLower())
                {
                case ".adf":
                case ".gsd":
                    _type = RasterType.grid;
                    break;
                    //case ".jp2":
                    //    _type = RasterType.wavelet;
                    //    break;
                }

                using (OSGeo.GDAL.Band band = _gDS.GetRasterBand(1))
                {
                    if (_gDS.RasterCount == 1)
                    {
                        if (band.DataType != OSGeo.GDAL.DataType.GDT_Byte)
                        {
                            _type = RasterType.grid;
                        }
                    }
                    band.GetMinimum(out _min, out _hasNoDataVal);
                    band.GetMaximum(out _max, out _hasNoDataVal);
                    band.GetNoDataValue(out _nodata, out _hasNoDataVal);
                }
                OSGeo.GDAL.Driver driver = _gDS.GetDriver();

                double[] tfw = new double[6];
                _gDS.GetGeoTransform(tfw);

                string tfwFilename = fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length);
                switch (fi.Extension.ToLower())
                {
                case ".jpg":
                case ".jpeg":
                    tfwFilename += ".jgw";
                    break;

                case ".jp2":
                    tfwFilename += ".j2w";
                    break;

                case ".tif":
                case ".tiff":
                    tfwFilename += ".tfw";
                    break;

                case ".ecw":
                    tfwFilename += ".eww";
                    break;

                default:
                    break;
                }

                FileInfo tfwInfo = new FileInfo(tfwFilename);

                _tfw = new TFWFile(tfw[0], tfw[3], tfw[1], tfw[2], tfw[4], tfw[5]);
                if (tfwInfo.Exists)
                {
                    _tfw.Filename = tfwFilename;
                }

                if (_tfw.X == 0.0 && _tfw.Y == 0.0 &&
                    Math.Abs(_tfw.dx_X) == 1.0 && _tfw.dx_Y == 0.0 &&
                    Math.Abs(_tfw.dy_Y) == 1.0 && _tfw.dy_X == 0.0 && driver != null)
                {
                    if (tfwInfo.Exists)
                    {
                        _tfw = new TFWFile(tfwFilename);
                    }
                    else
                    {
                        _tfw.isValid = false;
                    }
                }
                else
                {
                    // Bei dem Driver schein es nicht Pixelmitte sein, oder ist das bei GDAL generell
                    //if (driver.ShortName.ToLower() == "jp2openjpeg")
                    {
                        _tfw.X += (_tfw.dx_X / 2.0D + _tfw.dx_Y / 2.0D);
                        _tfw.Y += (_tfw.dy_X / 2.0D + _tfw.dy_Y / 2.0D);
                    }
                }


                FileInfo fiPrj = new FileInfo(fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length) + ".prj");
                if (fiPrj.Exists)
                {
                    StreamReader sr  = new StreamReader(fiPrj.FullName);
                    string       wkt = sr.ReadToEnd();
                    sr.Close();

                    _sRef = gView.Framework.Geometry.SpatialReference.FromWKT(wkt);
                }
                else
                {
                    fiPrj = new FileInfo(fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length) + ".wkt");
                    if (fiPrj.Exists)
                    {
                        StreamReader sr  = new StreamReader(fiPrj.FullName);
                        string       wkt = sr.ReadToEnd();
                        sr.Close();

                        _sRef = gView.Framework.Geometry.SpatialReference.FromWKT(wkt);
                    }
                }
                if (polygon != null)
                {
                    _polygon = polygon;
                }
                else
                {
                    calcPolygon();
                }
            }
            catch (Exception ex)
            {
                string errMsg = ex.Message;
                _valid = false;
            }
        }
コード例 #30
0
        /// <summary>
        /// 辐射定标。
        /// </summary>
        /// <param name="InputDS">输入的栅格数据集。</param>
        /// <param name="OutDataType">输出的数据类型。</param>
        /// <param name="Gain">增益倍数。</param>
        /// <param name="Offset">偏移量。</param>
        /// <param name="OutPath">输出栅格数据集的位置。</param>
        /// <returns>返回操作成功或失败。</returns>
        public static bool ApplyGainAndOffset(OSGeo.GDAL.Dataset InputDS, OSGeo.GDAL.DataType OutDataType, List <double> Gain, List <double> Offset, string OutPath)
        {
            try
            {
                if (InputDS == null)
                {
                    throw new ArgumentNullException("输入数据集为空。");
                }
                if (String.IsNullOrWhiteSpace(OutPath.Trim()))
                {
                    throw new ArgumentNullException("输出路径为空或非法。");
                }
                if ((Gain.Count != InputDS.RasterCount) || (Offset.Count != InputDS.RasterCount))
                {
                    throw new IndexOutOfRangeException("增益数据或偏移数据与输入数据集波段数不符。");
                }
                OSGeo.GDAL.Driver Dri = OSGeo.GDAL.Gdal.GetDriverByName("Gtiff");
                if (Dri == null)
                {
                    throw new Exception("无法获取GDAL Driver。");
                }

                FrmProgress FP = new FrmProgress()
                {
                    Text = "正在进行辐射定标...",
                };

                Thread t = new Thread(() =>
                {
                    FP.ShowDialog();
                });
                t.SetApartmentState(ApartmentState.STA);
                t.Start();

                int xSize             = InputDS.RasterXSize;
                int ySize             = InputDS.RasterYSize;
                OSGeo.GDAL.Dataset DS = Dri.Create(OutPath, xSize, ySize, InputDS.RasterCount, OutDataType, null);
                FP.Output("已创建输出数据集\"" + OutPath + "\",数据类型为" + OutDataType.ToString() + "。");
                Tools.Common.CopyMetadata(InputDS, DS);

                for (int i = 0; i < InputDS.RasterCount; i++) //遍历每个波段
                {
                    FP.SetProgress2("正在处理波段:", i + 1, InputDS.RasterCount, "");
                    for (int Row = 0; Row < ySize; Row++)   //遍历每一行(y)
                    {
                        FP.SetProgress1("正在处理:", Row + 1, ySize, "行");
                        double[] Values = new double[xSize];

                        //读取DN到数组
                        InputDS.GetRasterBand(i + 1).ReadRaster(0, Row, xSize, 1, Values, xSize, 1, 0, 0);
                        for (int Col = 0; Col < xSize; Col++)   //对每一个值进行计算
                        {
                            Values[Col] = GainOffset(Values[Col], Gain[i], Offset[i]);
                        }
                        //写结果到新栅格
                        DS.GetRasterBand(i + 1).WriteRaster(0, Row, xSize, 1, Values, xSize, 1, 0, 0);
                        DS.FlushCache();
                        Thread.Sleep(1);
                        if (FP.Canceled)
                        {
                            Thread.Sleep(500);

                            FP.Finish();
                            throw new OperationCanceledException("操作被用户取消。");
                        }
                    }
                }

                FP.Finish();
                Dri.Dispose();
                DS.Dispose();
                return(true);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
                return(false);
            }
        }
コード例 #31
0
ファイル: GdalRasterLayer.cs プロジェクト: cigannnb/SharpMap
        private void GetPreview(OSGeo.GDAL.Dataset dataset, System.Drawing.Size size, Graphics g, SharpMap.Geometries.BoundingBox bbox)
        {
            double[] geoTrans = new double[6];
            dataset.GetGeoTransform(geoTrans);
            GeoTransform GT = new GeoTransform(geoTrans);

            int DsWidth  = dataset.RasterXSize;
            int DsHeight = dataset.RasterYSize;

            Bitmap bitmap     = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
            int    iPixelSize = 3; //Format24bppRgb = byte[b,g,r]

            if (dataset != null)
            {
                /*
                 * if ((float)size.Width / (float)size.Height > (float)DsWidth / (float)DsHeight)
                 *  size.Width = size.Height * DsWidth / DsHeight;
                 * else
                 *  size.Height = size.Width * DsHeight / DsWidth;
                 */


                double left   = Math.Max(bbox.Left, _Envelope.Left);
                double top    = Math.Min(bbox.Top, _Envelope.Top);
                double right  = Math.Min(bbox.Right, _Envelope.Right);
                double bottom = Math.Max(bbox.Bottom, _Envelope.Bottom);


                int x1      = (int)GT.PixelX(left);
                int y1      = (int)GT.PixelY(top);
                int x1width = (int)GT.PixelXwidth(right - left);

                int y1height = (int)GT.PixelYwidth(bottom - top);


                bitmap = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
                BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);

                try
                {
                    unsafe
                    {
                        for (int i = 1; i <= (dataset.RasterCount > 3 ? 3 : dataset.RasterCount); ++i)
                        {
                            byte[]          buffer = new byte[size.Width * size.Height];
                            OSGeo.GDAL.Band band   = dataset.GetRasterBand(i);

                            //band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, (int)GT.HorizontalPixelResolution, (int)GT.VerticalPixelResolution);
                            band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, 0, 0);

                            int p_indx = 0;
                            int ch     = 0;

                            //#warning Check correspondance between enum and integer values
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_BlueBand)
                            {
                                ch = 0;
                            }
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_GreenBand)
                            {
                                ch = 1;
                            }
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_RedBand)
                            {
                                ch = 2;
                            }
                            if (band.GetRasterColorInterpretation() != OSGeo.GDAL.ColorInterp.GCI_PaletteIndex)
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize + ch] = buffer[p_indx];
                                    }
                                }
                            }
                            else //8bit Grayscale
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize]     = buffer[p_indx];
                                        row[x * iPixelSize + 1] = buffer[p_indx];
                                        row[x * iPixelSize + 2] = buffer[p_indx];
                                    }
                                }
                            }
                        }
                    }
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
            }
            g.DrawImage(bitmap, new System.Drawing.Point(0, 0));
        }
コード例 #32
0
ファイル: GdalRasterLayer.cs プロジェクト: lishxi/_SharpMap
 private void Dispose(bool disposing)
 {
     if (!disposed)
     {
         if (disposing)
             if (_GdalDataset != null)
             {
                 try
                 {
                     _GdalDataset.Dispose();
                 }
                 finally { _GdalDataset = null; }
             }
         disposed = true;
     }
 }