// License: BSD/LGPL
// Copyright (C) 2011 Thomas d'Otreppe
using System;
using System.Collections;
using System.Text;
namespace WirelessPanda
{
public class Coordinates
{
#region Dictionary stuff
private Hashtable _dictionary = new Hashtable();
private void setDictValue(string elem, double value)
{
if (this._dictionary.ContainsKey(elem))
{
this._dictionary.Remove(elem);
}
this._dictionary.Add(elem, value);
}
private double getDictValue(string elem)
{
if (this._dictionary.ContainsKey(elem))
{
return (double)this._dictionary[elem];
}
throw new MissingFieldException("Value <" + elem + "> is not set or does not exist");
}
#endregion
#region Properties
///
/// Latitude
///
public double Latitude
{
get
{
return this.getDictValue("Latitude");
}
set
{
this.setDictValue("Latitude", value);
}
}
///
/// Longitude
///
public double Longitude
{
get
{
return this.getDictValue("Longitude");
}
set
{
this.setDictValue("Longitude", value);
}
}
///
/// Altitude (in meters)
///
public double Altitude
{
get
{
return this.getDictValue("Altitude");
}
set
{
this.setDictValue("Altitude", value);
}
}
///
/// Speed (UOM: probably knot but unsure)
///
public double Speed
{
get
{
return this.getDictValue("Speed");
}
set
{
this.setDictValue("Speed", value);
}
}
#endregion
public Coordinates(string latitude = null, string longitude = null, string altitude = null, string speed = null)
{
if (!string.IsNullOrEmpty(latitude))
{
this.Latitude = double.Parse(latitude);
}
if (!string.IsNullOrEmpty(longitude))
{
this.Longitude = double.Parse(longitude);
}
if (!string.IsNullOrEmpty(altitude))
{
this.Altitude = double.Parse(altitude);
}
if (!string.IsNullOrEmpty(speed))
{
this.Speed = double.Parse(speed);
}
}
public Coordinates(double latitude, double longitude)
{
this.Latitude = latitude;
}
public Coordinates(double latitude, double longitude, double altitude) : this(latitude, longitude)
{
this.Altitude = latitude;
}
public Coordinates(double latitude, double longitude, double altitude, double speed) : this(latitude, longitude, altitude)
{
this.Speed = speed;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(this.Latitude);
sb.Append(", ");
sb.Append(this.Longitude);
if (this._dictionary.ContainsKey("Altitude"))
{
sb.Append(" - Altitude: ");
sb.Append(this.Altitude);
}
if (this._dictionary.ContainsKey("Speed"))
{
sb.Append(" - Speed: ");
sb.Append(this.Speed);
}
}
catch
{
if (sb.Length > 0)
{
sb.Remove(0, sb.Length);
}
}
return sb.ToString();
}
}
}