From 9f044bbbf3fa5b67fd1d120140f15f0b3729f3e8 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 18 七月 2024 17:15:46 +0800
Subject: [PATCH] 设置地形信息

---
 SimuTools/Tools/GdalHelper.cs |    4 ++--
 SimuTools/Domain/Extension.cs |    6 ++++++
 SimuTools/Tools/Handle.cs     |   40 +++++++++++++++++++++++++++++++++-------
 3 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/SimuTools/Domain/Extension.cs b/SimuTools/Domain/Extension.cs
index a1d8f80..870d9b0 100644
--- a/SimuTools/Domain/Extension.cs
+++ b/SimuTools/Domain/Extension.cs
@@ -45,5 +45,11 @@
             this.minHeight = minHeight;
             this.maxHeight = maxHeight;
         }
+
+        public void SetHeight(double minHeight, double maxHeight)
+        {
+            this.minHeight = minHeight;
+            this.maxHeight = maxHeight;
+        }
     }
 }
diff --git a/SimuTools/Tools/GdalHelper.cs b/SimuTools/Tools/GdalHelper.cs
index 20b8b4e..3da84f1 100644
--- a/SimuTools/Tools/GdalHelper.cs
+++ b/SimuTools/Tools/GdalHelper.cs
@@ -86,7 +86,7 @@
         /**
          * 鑾峰彇Dataset鐨勬渶灏忕偣
          */
-        private static Geometry GetMinPoint(Dataset ds)
+        public static Geometry GetMinPoint(Dataset ds)
         {
             double[] transform = new double[6];
             ds.GetGeoTransform(transform);
@@ -103,7 +103,7 @@
         /**
          * 鑾峰彇Dataset鐨勬渶澶х偣
          */
-        private static Geometry GetMaxPoint(Dataset ds)
+        public static Geometry GetMaxPoint(Dataset ds)
         {
             /*
              * transform[0] 宸︿笂瑙抶鍧愭爣
diff --git a/SimuTools/Tools/Handle.cs b/SimuTools/Tools/Handle.cs
index 541e8b0..f41d648 100644
--- a/SimuTools/Tools/Handle.cs
+++ b/SimuTools/Tools/Handle.cs
@@ -1,4 +1,6 @@
 锘縰sing Newtonsoft.Json;
+using OSGeo.GDAL;
+using OSGeo.OGR;
 using SimuTools.Domain;
 using System;
 using System.Collections.Generic;
@@ -18,10 +20,8 @@
         /// </summary>
         public static void Run(string terrainFile, string waterPath, string flowPath, string outPath)
         {
-            Layer layer = new Layer();
-            layer.terrain = new Terrain();
+            Domain.Layer layer = new Domain.Layer();
             layer.duration = new Duration();
-            layer.extension = new Extension();
             layer.waters = new Water();
 
             CopeTerrain(terrainFile, outPath, layer);
@@ -33,15 +33,41 @@
         /// <summary>
         /// 澶勭悊鍦板舰
         /// </summary>
-        private static void CopeTerrain(string terrainFile, string outPath, Layer layer)
+        private static void CopeTerrain(string terrainFile, string outPath, Domain.Layer layer)
         {
+            Dataset ds = null;
+            try
+            {
+                ds = Gdal.Open(terrainFile, Access.GA_ReadOnly);
+                if (null == ds || 0 == ds.RasterCount || null == ds.GetSpatialRef()) return;
 
+                SetTerrainInfo(ds, layer);
+            }
+            finally
+            {
+                if (null != ds) ds.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// 璁剧疆鍦板舰淇℃伅
+        /// </summary>
+        private static void SetTerrainInfo(Dataset ds, Domain.Layer layer)
+        {
+            Geometry minPoint = GdalHelper.GetMinPoint(ds);
+            Geometry maxPoint = GdalHelper.GetMaxPoint(ds);
+            layer.extension = new Extension(minPoint.GetX(0), minPoint.GetY(0), maxPoint.GetX(0), maxPoint.GetY(0));
+
+            Band band = ds.GetRasterBand(1);
+            double[] mm = new double[2];
+            band.ComputeRasterMinMax(mm, 0);
+            layer.extension.SetHeight(mm[0], mm[1]);
         }
 
         /// <summary>
         /// 澶勭悊姘撮潰
         /// </summary>
-        private static void CopeWater(string waterPath, string outPath, Layer layer)
+        private static void CopeWater(string waterPath, string outPath, Domain.Layer layer)
         {
 
         }
@@ -49,7 +75,7 @@
         /// <summary>
         /// 澶勭悊娴侀�熸祦鍚�
         /// </summary>
-        private static void CopeFlow(string flowPath, string outPath, Layer layer)
+        private static void CopeFlow(string flowPath, string outPath, Domain.Layer layer)
         {
 
         }
@@ -57,7 +83,7 @@
         /// <summary>
         /// 澶勭悊鍏冩暟鎹�
         /// </summary>
-        private static void CopeLayerJson(string outPath, Layer layer)
+        private static void CopeLayerJson(string outPath, Domain.Layer layer)
         {
             if (null == layer) return;
 

--
Gitblit v1.9.3