From 26cb80561f502b6404bec005b442da3e04ca76e4 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 25 七月 2024 11:26:17 +0800 Subject: [PATCH] 修改高程的计算方法 --- SimuTools/Domain/Water.cs | 7 ++++++- SimuTools/Tools/Handle.cs | 37 +++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/SimuTools/Domain/Water.cs b/SimuTools/Domain/Water.cs index 29ac95e..795b7af 100644 --- a/SimuTools/Domain/Water.cs +++ b/SimuTools/Domain/Water.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,10 +9,14 @@ { public class Water { + [JsonIgnore] + public List<string> files { set; get; } + public List<long> data { set; get; } public Water() { + files = new List<string>(); data = new List<long>(); } diff --git a/SimuTools/Tools/Handle.cs b/SimuTools/Tools/Handle.cs index a7a4aa6..5e58c37 100644 --- a/SimuTools/Tools/Handle.cs +++ b/SimuTools/Tools/Handle.cs @@ -42,7 +42,7 @@ string temp = Path.Combine(outPath, "temp"); if (!Directory.Exists(temp)) Directory.CreateDirectory(temp); - CopeTerrain(terrainFile, outPath, layer); + CopeTerrain(terrainFile, waterPath, outPath, layer); CopeWater(waterPath, outPath, layer); CopeFlow(flowPath, outPath, layer); CopeLayerJson(outPath, layer); @@ -54,7 +54,7 @@ /// <summary> /// 澶勭悊鍦板舰 /// </summary> - private static void CopeTerrain(string terrainFile, string outPath, Domain.Layer layer) + private static void CopeTerrain(string terrainFile, string waterPath, string outPath, Domain.Layer layer) { Dataset ds = null; try @@ -63,6 +63,7 @@ if (null == ds || 0 == ds.RasterCount || null == ds.GetSpatialRef()) return; SetTerrainInfo(ds, layer); + SetWaterInfo(waterPath, layer); CreateTerrainPng(ds, layer, outPath); } finally @@ -174,19 +175,21 @@ graphic.Clear(Color.Transparent); // 濉厖閫忔槑鑹� //double perHeight = (layer.terrain.maxHeight - layer.terrain.minHeight) * 100 / 65536; - double differ = layer.terrain.maxHeight - layer.terrain.minHeight; + //double differ = layer.terrain.maxHeight - layer.terrain.minHeight; + double differ = layer.extension.maxHeight - layer.extension.minHeight - 1, minHeight = layer.extension.minHeight - 1; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { int offset = x + y * width; - if (float.IsNaN(buffer[offset]) || buffer[offset] < -999) continue; + if (float.IsNaN(buffer[offset]) || buffer[offset] < -999 || buffer[offset] < minHeight) continue; //int val = Convert.ToInt32((buffer[offset] - layer.terrain.minHeight) * 100 / perHeight); - int val = Convert.ToInt32((buffer[offset] - layer.terrain.minHeight) / differ * 65536); + //int val = Convert.ToInt32((buffer[offset] - layer.terrain.minHeight) / differ * 255); // 65535 + int val = Convert.ToInt32((buffer[offset] - minHeight) / differ * 255); int r = 0; - int g = val / 256; - int b = val % 256; + int g = 0; + int b = val > 255 ? 255 : val; Color color = Color.FromArgb(127, r, g, b); image.SetPixel(x, y, color); @@ -204,16 +207,24 @@ #region 姘撮潰 /// <summary> - /// 澶勭悊姘撮潰 + /// 璁剧疆姘撮潰淇℃伅 /// </summary> - private static void CopeWater(string waterPath, string outPath, Domain.Layer layer) + private static void SetWaterInfo(string waterPath, Domain.Layer layer) { - List<string> files = GetFiles(waterPath); + List<string> files = layer.waters.files = GetFiles(waterPath); if (null == files || files.Count == 0) return; SetWaterData(layer, files); SetWaterHeight(layer, files); - if (files.Count != layer.waters.data.Count) return; + } + + /// <summary> + /// 澶勭悊姘撮潰 + /// </summary> + private static void CopeWater(string waterPath, string outPath, Domain.Layer layer) + { + List<String> files = layer.waters.files; + if (files.Count == 0 || files.Count != layer.waters.data.Count) return; ProcessWaters(files, outPath, layer); } @@ -224,7 +235,7 @@ private static List<String> GetFiles(string path, string prefix = "") { string[] files = Directory.GetFiles(path, prefix + "*.tif?", SearchOption.TopDirectoryOnly); - if (null == files || files.Length == 0) return null; + if (null == files || files.Length == 0) return new List<string>(); List<string> list = files.ToList(); list.Sort(); @@ -250,6 +261,8 @@ DateTime d = new DateTime(now.Year, now.Month, now.Day, hour, minute, second); layer.waters.data.Add((d.Ticks - startTicks) / 10000); } + layer.duration.start = layer.waters.data[0]; + layer.duration.end = layer.waters.data[layer.waters.data.Count - 1]; } /// <summary> -- Gitblit v1.9.3