管道基础大数据平台系统开发-【CS】-ExportMap
1
13693261870
2024-07-24 663662d22683211608cee07e1c1e32761e992a2a
SimuTools/Tools/GdalHelper.cs
@@ -4,14 +4,12 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SimuTools.Tools
{
    public class GdalHelper
    {
        #region 成员变量+构造函数
        private static bool isInited;
        private static GdalHelper instance;
@@ -45,6 +43,7 @@
                }
            }
        }
        #endregion
        /// <summary>
        /// 实例
@@ -83,9 +82,9 @@
            Gdal.AllRegister();
        }
        /**
         * 获取Dataset的最小点
         */
        /// <summary>
        /// 获取Dataset的最小点
        /// </summary>
        public static Geometry GetMinPoint(Dataset ds)
        {
            double[] transform = new double[6];
@@ -100,9 +99,9 @@
            return Transform(ds, point);
        }
        /**
         * 获取Dataset的最大点
         */
        /// <summary>
        /// 获取Dataset的最大点
        /// </summary>
        public static Geometry GetMaxPoint(Dataset ds)
        {
            /*
@@ -126,9 +125,9 @@
            return Transform(ds, point);
        }
        /**
         * 坐标转换
         */
        /// <summary>
        /// 坐标转换
        /// </summary>
        public static Geometry Transform(Dataset ds, Geometry point)
        {
            point.AssignSpatialReference(ds.GetSpatialRef());
@@ -138,22 +137,22 @@
            }
            String srsName = ds.GetSpatialRef().GetName();
            if (srsName.Contains(CGCS2000))
            {
                point.TransformTo(sr4490);
            }
            else
            {
            //if (srsName.Contains(CGCS2000))
            //{
            //    point.TransformTo(sr4490);
            //}
            //else
            //{
                point.TransformTo(sr4326);
            }
            //}
            point.SwapXY();
            return point;
        }
        /**
         * 创建金字塔
         */
        /// <summary>
        /// 创建金字塔
        /// </summary>
        public static void CreatePyramid(String file)
        {
            Dataset ds = null;
@@ -179,5 +178,43 @@
                if (null != ds) ds.Dispose();
            }
        }
        /// <summary>
        /// 创建PNG
        /// </summary>
        public void CreatePng(byte[] buffer, string filePath, int width, int height, int bands = 3)
        {
            // 创建内存驱动
            OSGeo.GDAL.Driver memDriver = Gdal.GetDriverByName("MEM");
            // 创建内存数据集
            Dataset ds = memDriver.Create("mem::", width, height, bands, DataType.GDT_Byte, null);
            // 设置图像信息
            for (int i = 1; i <= bands; i++)
            {
                Band band = ds.GetRasterBand(i);
                band.SetRasterColorInterpretation((ColorInterp)i);
            }
            // 写入内存图像
            for (int i = 1; i <= bands; i++)
            {
                Band band = ds.GetRasterBand(i);
                band.WriteRaster(0, 0, width, height, buffer, width, height, 0, 0);
            }
            // 创建PNG驱动
            OSGeo.GDAL.Driver pngDriver = Gdal.GetDriverByName("PNG");
            // 保存为PNG文件
            //ds.SetProjection(Gdal.GetProjectionRef(""));
            //ds.SetGeoTransform(Gdal.GetGeoTransform(""));
            pngDriver.CreateCopy(filePath, ds, 0, null, null, null);
            pngDriver.Dispose();
            // 关闭数据集
            ds.Dispose();
            memDriver.Dispose();
        }
    }
}