using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; namespace Ips.Library.Entity { public class GeoLLA { public GeoLLA() : this(LonNan.Value, LatNan.Value, 0) { } public GeoLLA(double lon, double lat) : this(lon, lat, 0) { } public GeoLLA(double lon, double lat, double alt) { Lon = lon; Lat = lat; Alt = alt; } /// /// 经度 /// public double Lon { get; set; } /// /// 纬度 /// public double Lat { get; set; } /// /// 高度 /// public double Alt { get; set; } public const double MinLon = -180; public const double MaxLon = 180; public const double MinLat = -90; public const double MaxLat = 90; public override string ToString() { return $"{Lon},{Lat},{Alt}"; } public bool IsSome(GeoLLA item) { if (item == null) return false; if (ReferenceEquals(this, item)) return true; return Lon == item.Lon && Lat == item.Lat && Alt == item.Alt; } public bool IsValid() { return Lon >= MinLon && Lon <= MaxLon && Lat >= MinLat && Lat <= MaxLat; } public double[] ToArray() { return new double[] { Lon, Lat, Alt }; } public static GeoLLA FromString(string val, string itemsep = ",") { var items = val.Split(itemsep.ToCharArray()); double lon = LonNan.Value, lat = LatNan.Value, alt = 0; if (items.Length > 1) { lon = double.Parse(items[0].Trim()); lat = double.Parse(items[1].Trim()); } if (items.Length > 2) { alt = double.Parse(items[2].Trim()); } return new GeoLLA(lon, lat, alt); } } public class LonNan { public const double Value = 181; } public class LatNan { public const double Value = 91; } }