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;
|
|
/// <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);
|
}
|
}
|
}
|
}
|