using Newtonsoft.Json; using OnlineUserPool.Unility; using System; using System.Collections.Generic; using System.Text; namespace OnlineUserPool.Model { public class MapDataModel { public string Type => "LineString"; /// /// 总距离(km) /// public double TotalDistance { get; set; } private List _List; public List List { get { return _List; } set { _List = value; if (_List == null) return; this.CalcDistance(); this.CalcGrade(); } } public void CalcDistance() { for (int i = 0; i < _List.Count - 1; i++) { var value = CommonHelper.GetDistances(_List[i].Point[1], _List[i].Point[0], _List[i + 1].Point[1], _List[i + 1].Point[0]); //var value = Turf.Distance(pt1, pt2, "kilometers") * 1000; _List[i].Distance = Math.Round(value, 2); } } /// /// 计算坡度数据 /// private void CalcGrade() { for (int i = 0; i < this._List.Count - 1; i++) { var a = _List[i + 1].Elevation - _List[i].Elevation; if (a == 0) { //grade.Add(0); _List[i].Grade = 0; continue; } //勾股定理 var c = _List[i].Distance;//如果车停了下来,c为0 if (c == 0 && i > 0) { _List[i].Grade = _List[i - 1].Grade; } else { var b = Math.Sqrt(c * c - a * a); if (b == 0)//如果b等于,这就是垂直的墙壁 { _List[i].Grade = _List[i - 1].Grade; } else { _List[i].Grade = Math.Round(a / b * 100, 4); } } } } public MapDataModel() { //_List = new List(); } public class Item { /// /// 坐标(lat,lon) /// public double[] Point { get; set; } /// /// 距离(单位米) /// [JsonIgnore] public double Distance { get; set; } /// /// 海拔m /// public double Elevation { get; set; } [JsonIgnore] public double Grade { get; set; } } } }