OSMServer/Server/Server.cs

82 lines
3.6 KiB
C#
Raw Normal View History

using System.Drawing;
using System.Drawing.Imaging;
2023-04-01 01:00:22 +02:00
using OSMDatastructure;
using OSMDatastructure.Graph;
2023-04-01 14:43:22 +02:00
using Pathfinding;
using RenderPath;
2023-04-21 00:43:58 +02:00
using Region = OSMDatastructure.Region;
2023-04-01 01:00:22 +02:00
2023-02-02 22:30:43 +01:00
namespace Server;
2023-02-02 19:03:00 +01:00
public class Server
{
2023-02-08 19:09:54 +01:00
2023-02-02 22:30:43 +01:00
public static void Main(string[] args)
2023-02-02 19:03:00 +01:00
{
ConsoleWriter newConsole = new();
Console.SetOut(newConsole);
Console.SetError(newConsole);
string workingDir = "D:/stuttgart-regbez-latest";
2023-04-13 00:24:33 +02:00
//RegionConverter.ConvertXMLToRegions("D:/stuttgart-regbez-latest.osm", "D:/stuttgart-regbez-latest");
2023-04-01 14:43:22 +02:00
//RegionConverter.ConvertXMLToRegions("D:/map.osm", "D:/map");
2023-04-06 14:46:19 +02:00
//RegionConverter.ConvertXMLToRegions("D:/germany-latest.osm", "D:/germany-latest");
2023-04-13 00:24:33 +02:00
Coordinates start = new (48.7933798f, 9.8275859f);
Coordinates finish = new (48.795918f, 9.021618f);
2023-04-21 00:43:58 +02:00
Console.WriteLine("Preparing BaseRender");
string parentFolder = new DirectoryInfo(workingDir).Parent!.FullName;
RegionManager allRegions = new(workingDir);
for (float lat = 48.75f - Region.RegionSize / 2; lat < 48.85f + Region.RegionSize / 2; lat += Region.RegionSize / 2)
{
for (float lon = 9f - Region.RegionSize / 2; lon < 9.9f + Region.RegionSize / 2; lon += Region.RegionSize / 2)
{
allRegions.GetRegion(new Coordinates(lat, lon));
}
}
Console.WriteLine("Regions Loaded. Rendering.");
ValueTuple<Image, Renderer.Bounds> baseRender = Renderer.DrawArea(allRegions);
for (double sameRoadPriority = 0; sameRoadPriority < 0.4; sameRoadPriority += 0.015)
{
for (double roadLevelPriority = 0.4; roadLevelPriority > 0; roadLevelPriority -= 0.015)
{
for (double angleWeightFactor = 45; angleWeightFactor < 65; angleWeightFactor += 1.0)
{
Console.WriteLine($"{angleWeightFactor}/65 {roadLevelPriority}/0,4 {sameRoadPriority}/0,4");
Pathfinder testresult = new Pathfinder(workingDir).AStar(start,
finish, Tag.SpeedType.car, roadLevelPriority, sameRoadPriority,
0, angleWeightFactor);
string fileName = $"angle{angleWeightFactor}_level{roadLevelPriority}_same{sameRoadPriority}.png";
string path = Path.Join(parentFolder, fileName);
Image areaHeur = Renderer.DrawGScores(testresult.gScore, baseRender.Item1, baseRender.Item2).Item1;
Image areaHeurPath = Renderer.DrawPath(testresult.pathResult, areaHeur, baseRender.Item2).Item1;
areaHeurPath.Save(path, ImageFormat.Png);
}
}
}
/*
Pathfinder result = new Pathfinder(workingDir).AStar(start,
2023-04-21 00:43:58 +02:00
finish, Tag.SpeedType.car, 0.03, 0.01,
0, 50);
Console.WriteLine($"Calc-time {result.pathResult!.calcTime} Path-length: {result.pathResult.pathNodes.Count} Visited-nodes: {result.gScore!.Count}");
string fileName = DateTime.Now.ToFileTime().ToString();
string parentFolder = new DirectoryInfo(workingDir).Parent!.FullName;
2023-04-21 00:43:58 +02:00
string resultFileName = $"{new DirectoryInfo(workingDir).Name}-{fileName}.result";
result.SaveResult(Path.Join(parentFolder, resultFileName));
2023-04-21 00:43:58 +02:00
string renderFileName = $"{new DirectoryInfo(workingDir).Name}-{fileName}.render.png";
Image render = Renderer.DrawPathfinder(result);
#pragma warning disable CA1416
render.Save(Path.Join(parentFolder, renderFileName), ImageFormat.Png);
2023-04-21 00:43:58 +02:00
#pragma warning restore CA1416*/
2023-02-02 19:03:00 +01:00
}
}