kopia lustrzana https://github.com/dl2alf/AirScout
151 wiersze
4.9 KiB
C#
151 wiersze
4.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Xml.Linq;
|
|
using System.Globalization;
|
|
using System.Reflection;
|
|
using System.Diagnostics;
|
|
using System.Runtime.InteropServices;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Windows;
|
|
using System.Windows.Forms;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Data.SQLite;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
using Newtonsoft.Json;
|
|
using ScoutBase.Core;
|
|
using ScoutBase.Stations;
|
|
|
|
namespace ScoutBase.Elevation
|
|
{
|
|
|
|
/// <summary>
|
|
/// Holds the elevation path information
|
|
/// </summary>
|
|
[System.ComponentModel.DesignerCategory("")]
|
|
public class ElevationHorizonDesignator : SQLiteEntry
|
|
{
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// be sure to have a copy of these static members in each derived class !!
|
|
// update the tbale name to the table name according to the class
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
[JsonIgnore]
|
|
public static new readonly string TableName = "ElevationHorizon";
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public double Lat { get; private set; }
|
|
public double Lon { get; private set; }
|
|
|
|
public double Distance { get; private set; }
|
|
public double StepWidth { get; private set; }
|
|
public int Count { get; private set; }
|
|
|
|
public short[][] Paths { get; private set; }
|
|
|
|
// MEMBERS ONLY TO STORE STATUS TEMPORARLY --> NOT STORED IN DATABASE
|
|
// path status: valid / invalid
|
|
public bool Valid = true;
|
|
|
|
public ElevationHorizonDesignator()
|
|
{
|
|
Lat = 0;
|
|
Lon = 0;
|
|
Distance = 0;
|
|
StepWidth = 0;
|
|
Count = 0;
|
|
Paths = new short[360][];
|
|
for (int i = 0; i < 360; i++)
|
|
Paths[i] = new short[0];
|
|
}
|
|
|
|
public ElevationHorizonDesignator(DataRow row) : this()
|
|
{
|
|
FillFromDataRow(row);
|
|
}
|
|
|
|
public ElevationHorizonDesignator(IDataRecord record) : this()
|
|
{
|
|
FillFromDataRecord(record);
|
|
}
|
|
|
|
|
|
public ElevationHorizonDesignator(double lat, double lon, double distance, double stepwidth) :
|
|
this(lat, lon, distance, stepwidth, null, DateTime.UtcNow) { }
|
|
public ElevationHorizonDesignator(double lat, double lon, double distance, double stepwidth, short[][] paths) :
|
|
this(lat, lon, distance, stepwidth, paths, DateTime.UtcNow) { }
|
|
public ElevationHorizonDesignator(double lat, double lon, double distance, double stepwitdh, short[][] paths, DateTime lastupdated) : this()
|
|
{
|
|
Lat = lat;
|
|
Lon = lon;
|
|
Distance = distance;
|
|
StepWidth = stepwitdh;
|
|
LastUpdated = lastupdated;
|
|
Count = (int)(Distance * 1000.0 / StepWidth) + 1;
|
|
if (paths != null)
|
|
Paths = paths;
|
|
else
|
|
{
|
|
Paths = new short[360][];
|
|
for (int i = 0; i < 360; i++)
|
|
Paths[i] = new short[0];
|
|
}
|
|
}
|
|
|
|
public short[] this[int azimuth]
|
|
{
|
|
get
|
|
{
|
|
if ((Paths != null) && (azimuth >= 0) && (azimuth < 360))
|
|
return Paths[azimuth];
|
|
return null;
|
|
}
|
|
set
|
|
{
|
|
if ((Paths != null) && (azimuth >= 0) && (azimuth < 360))
|
|
Paths[azimuth] = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Writes an elevation array into a csv
|
|
/// </summary>
|
|
/// <param name="filename">The filename to be created.</param>
|
|
/// <returns>Nothing.</returns>
|
|
public void ToCSV(string filename)
|
|
{
|
|
try
|
|
{
|
|
string separator = SupportFunctions.GetCSVSeparator();
|
|
using (StreamWriter sw = new StreamWriter(filename))
|
|
{
|
|
sw.WriteLine("Azimiuth[deg]" + separator +
|
|
"Distance[km]" + separator +
|
|
"Elevation[m]");
|
|
for (int j = 0; j < 360; j++)
|
|
{
|
|
for (int i = 0; i < Paths[j].Length; i++)
|
|
{
|
|
sw.WriteLine(j.ToString() + separator +
|
|
((double)i * this.StepWidth / 1000.0).ToString("F8") + separator +
|
|
Paths[j][i].ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|