using 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; namespace SimuTools.Tools { public class Handle { public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory; /// /// 运行 /// 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); } /// /// 处理地形 /// 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(); } } /// /// 设置地形信息 /// 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]); } /// /// 创建地形图层 /// private static void CreateTerrainPng(Dataset ds, Domain.Layer layer, string outPath) { foreach (int[] sizes in layer.terrain.size) { } } /// /// 处理水面 /// private static void CopeWater(string waterPath, string outPath, Domain.Layer layer) { } /// /// 处理流速流向 /// private static void CopeFlow(string flowPath, string outPath, Domain.Layer layer) { } /// /// 处理元数据 /// 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); } } } }