Skip to content

Commit

Permalink
Add configuration file support
Browse files Browse the repository at this point in the history
  • Loading branch information
Vort committed Jan 6, 2017
1 parent 7d14fae commit 95dcab7
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 32 deletions.
69 changes: 69 additions & 0 deletions Config.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using Newtonsoft.Json;
using System.IO;
using System.Runtime.Serialization;

namespace RiverTrace
{
[DataContract]
class ConfigData
{
[DataMember]
public int zoom;

[DataMember]
public double lat1;
[DataMember]
public double lon1;
[DataMember]
public double lat2;
[DataMember]
public double lon2;

[DataMember]
public int iterationCount;
[DataMember]
public double sampleWidthScale;
[DataMember]
public double sampleLengthScale;
[DataMember]
public double shoreContrast;
[DataMember]
public double maxDifference;

[DataMember]
public bool debug;
}

class Config
{
public static ConfigData Data;
private static string fileName;

static Config()
{
fileName = "config.json";
Data = new ConfigData
{
zoom = 15,
lat1 = 64.9035637,
lon1 = 52.2209239,
lat2 = 64.9032122,
lon2 = 52.2213061,
iterationCount = 1000,
sampleWidthScale = 1.7,
sampleLengthScale = 0.7,
shoreContrast = 10.0,
maxDifference = 28.0,
debug = false
};
if (File.Exists(fileName))
Data = JsonConvert.DeserializeObject<ConfigData>(File.ReadAllText(fileName));
}

public static void Write()
{
File.WriteAllText(fileName,
JsonConvert.SerializeObject(Data, Formatting.Indented));
}
}
}
5 changes: 5 additions & 0 deletions FodyWeavers.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Weavers>
<Costura/>

</Weavers>
46 changes: 14 additions & 32 deletions Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,24 @@
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;

namespace RiverTrace
{
class Program
{
private const bool debug = true;
private Cie1976Comparison cie;
private int sampleWidth;
private int sampleLength;
private double maxDifference;
private TileMap tileMap;

Program()
{
string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(exeDir);

/*Trace(
64.9035637, 52.2209239,
64.9032122, 52.2213061,
15);*/
/*Trace(
62.85685, 83.55849,
62.85723, 83.55906,
15);*/
Trace(
65.5238753, 79.3499377,
65.5239887, 79.3501845,
16);
Config.Write();

Trace();
}

void WriteOsm(List<Vector> result, int zoom)
Expand Down Expand Up @@ -82,8 +70,6 @@ double GetColorDifference(Color c1, Color c2)

void CalcSampleDimensions(Vector startPoint, Vector direction)
{
double shoreContrast = 10.0;

int pickCount = 5;
Vector pickPoint1 = startPoint;
double[] riverHalfWidth = new double[2];
Expand All @@ -99,7 +85,7 @@ void CalcSampleDimensions(Vector startPoint, Vector direction)
pickPoint2 += sideDirs[j];
Color checkColor = tileMap.GetPixel(pickPoint2.X, pickPoint2.Y);
double diff = GetColorDifference(refColor, checkColor);
if (diff > shoreContrast)
if (diff > Config.Data.shoreContrast)
break;
riverHalfWidth[j] += 1.0;
}
Expand All @@ -109,8 +95,8 @@ void CalcSampleDimensions(Vector startPoint, Vector direction)
riverHalfWidth[0] /= pickCount;
riverHalfWidth[1] /= pickCount;
double riverWidth = riverHalfWidth[0] + riverHalfWidth[1] + 1.0;
sampleWidth = Math.Max((int)Math.Ceiling(riverWidth * 1.7), 5);
sampleLength = Math.Max((int)Math.Ceiling(riverWidth * 2.0), 3);
sampleWidth = Math.Max((int)Math.Ceiling(riverWidth * Config.Data.sampleWidthScale), 5);
sampleLength = Math.Max((int)Math.Ceiling(riverWidth * Config.Data.sampleLengthScale), 3);
}

SimpleBitmap GetSample(Vector origin, Vector direction)
Expand Down Expand Up @@ -195,29 +181,27 @@ SimpleBitmap GetAvgSample(SimpleBitmap s1, SimpleBitmap s2)
return sample;
}

void Trace(double lat1, double lon1, double lat2, double lon2, int zoom)
void Trace()
{
Stopwatch sw = new Stopwatch();
sw.Start();

cie = new Cie1976Comparison();
tileMap = new TileMap(zoom);
tileMap = new TileMap(Config.Data.zoom);

var way = new List<Vector>();

Vector p1 = new Vector();
Vector p2 = new Vector();
Projection.DegToPix(lat1, lon1, zoom, out p1.X, out p1.Y);
Projection.DegToPix(lat2, lon2, zoom, out p2.X, out p2.Y);
Projection.DegToPix(Config.Data.lat1, Config.Data.lon1, Config.Data.zoom, out p1.X, out p1.Y);
Projection.DegToPix(Config.Data.lat2, Config.Data.lon2, Config.Data.zoom, out p2.X, out p2.Y);

way.Add(p1);
Vector lastDirection = p2 - p1;
lastDirection.Normalize();

CalcSampleDimensions(p1, lastDirection);

maxDifference = 28.0;

List<SimpleBitmap> samples = new List<SimpleBitmap>();
SimpleBitmap firstSample = GetSample(p1, lastDirection);
SimpleBitmap avgSample = firstSample;
Expand All @@ -226,9 +210,7 @@ void Trace(double lat1, double lon1, double lat2, double lon2, int zoom)
samples.Add(firstSample);

double totalDiff = 0.0;
int iterationCount = 1710;

for (int i = 0; i < iterationCount; i++)
for (int i = 0; i < Config.Data.iterationCount; i++)
{
SimpleBitmap bestSample;
double bestDiff;
Expand All @@ -239,7 +221,7 @@ void Trace(double lat1, double lon1, double lat2, double lon2, int zoom)
GetBestAngle(lastPoint, lastDirection, avgSample, bestAngle - 4.0, bestAngle + 4.0, 1.0,
out bestSample, out bestDiff, out bestVector, out bestAngle);

if (bestDiff > maxDifference)
if (bestDiff > Config.Data.maxDifference)
break;

totalDiff += bestDiff;
Expand All @@ -254,9 +236,9 @@ void Trace(double lat1, double lon1, double lat2, double lon2, int zoom)
sw.Stop();

way.Reverse();
WriteOsm(way, zoom);
WriteOsm(way, Config.Data.zoom);

if (debug)
if (Config.Data.debug)
{
SimpleBitmap sampleChain = new SimpleBitmap(
sampleWidth, sampleLength * samples.Count);
Expand Down
17 changes: 17 additions & 0 deletions RiverTrace.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<AssemblyName>RiverTrace</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<NuGetPackageImportStamp>18af9fa7</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
Expand All @@ -36,9 +37,14 @@
<HintPath>packages\ColorMine.1.1.3.0\lib\ColorMine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
Expand All @@ -50,6 +56,7 @@
<ItemGroup>
<Compile Include="Bing.cs" />
<Compile Include="Color.cs" />
<Compile Include="Config.cs" />
<Compile Include="Program.cs" />
<Compile Include="Projection.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
Expand All @@ -61,7 +68,17 @@
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="FodyWeavers.xml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="packages\Fody.1.28.3\build\Fody.targets" Condition="Exists('packages\Fody.1.28.3\build\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\Fody.1.28.3\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Fody.1.28.3\build\Fody.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
Expand Down
3 changes: 3 additions & 0 deletions packages.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ColorMine" version="1.1.3.0" targetFramework="net45" />
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net45" developmentDependency="true" />
<package id="Fody" version="1.28.3" targetFramework="net45" developmentDependency="true" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
</packages>

0 comments on commit 95dcab7

Please sign in to comment.