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/Handle.cs |   40 +++++++++++++++++++++++++++++++++-------
 1 files changed, 33 insertions(+), 7 deletions(-)

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