From 0a70f99e51b0ea0c83288213e3b1f7904d78ede0 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 18 七月 2024 17:52:46 +0800 Subject: [PATCH] 创建PNG --- SimuTools/Tools/Handle.cs | 101 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 98 insertions(+), 3 deletions(-) diff --git a/SimuTools/Tools/Handle.cs b/SimuTools/Tools/Handle.cs index b29c6f4..da4768d 100644 --- a/SimuTools/Tools/Handle.cs +++ b/SimuTools/Tools/Handle.cs @@ -1,17 +1,112 @@ -锘縰sing System; +锘縰sing Newtonsoft.Json; +using OSGeo.GDAL; +using OSGeo.OGR; +using SimuTools.Domain; +using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Windows.Forms; namespace SimuTools.Tools { public class Handle { + public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory; + + /// <summary> + /// 杩愯 + /// </summary> public static void Run(string terrainFile, string waterPath, string flowPath, string outPath) { - // + Domain.Layer layer = new Domain.Layer(); + layer.duration = new Duration(); + layer.terrain = new Terrain(); + layer.waters = new Water(); + + CopeTerrain(terrainFile, outPath, layer); + CopeWater(waterPath, outPath, layer); + CopeFlow(flowPath, outPath, layer); + CopeLayerJson(outPath, layer); + } + + /// <summary> + /// 澶勭悊鍦板舰 + /// </summary> + 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); + CreateTerrainPng(ds, layer, outPath); + } + 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 CreateTerrainPng(Dataset ds, Domain.Layer layer, string outPath) + { + foreach (int[] sizes in layer.terrain.size) + { + + } + } + + /// <summary> + /// 澶勭悊姘撮潰 + /// </summary> + private static void CopeWater(string waterPath, string outPath, Domain.Layer layer) + { + + } + + /// <summary> + /// 澶勭悊娴侀�熸祦鍚� + /// </summary> + private static void CopeFlow(string flowPath, string outPath, Domain.Layer layer) + { + + } + + /// <summary> + /// 澶勭悊鍏冩暟鎹� + /// </summary> + private static void CopeLayerJson(string outPath, Domain.Layer layer) + { + if (null == layer) return; + + String json = JsonConvert.SerializeObject(layer); + + string filePath = Path.Combine(outPath, "layer.json"); + using (StreamWriter sw = new StreamWriter(filePath)) + { + sw.Write(json); + } } } } -- Gitblit v1.9.3