public SamplePage() { InitializeComponent(); map.Loaded += MapLoaded; IOfflineMap offlineMap = DependencyService.Get <IOfflineMap>(); offlineMap.HasUpdate += (_, e) => { Debug.WriteLine("OfflineMap has update: " + e.CityID); }; offlineMap.Downloading += (_, e) => { Debug.WriteLine("OfflineMap downloading: " + e.CityID); }; var list = offlineMap.HotList; list = offlineMap.AllList; //offlineMap.Remove(131); var curr = offlineMap.Current; //offlineMap.Start(27); //offlineMap.Start(75); curr = offlineMap.Current; // 计算 ICalculateUtils calc = DependencyService.Get <ICalculateUtils>(); Debug.WriteLine(calc.CalculateDistance( new Coordinate(40, 116), new Coordinate(41, 117) ));//139599.429229778 in iOS, 139689.085961837 in Android }
/// <summary> /// 播放轨迹 /// </summary> private void Projection() { if (!IsPlayed) { IsPlayed = true; btnTrack.Text = ""; //============================ //生成坐标点 map.ClearOverlay = true; Task.Run(() => { try { if (ViewModel != null) { var select = ViewModel.BusinessUsers.Where(s => s.Selected).FirstOrDefault(); if (select != null) { //跟踪轨迹,包含拜访轨迹 Coords = select.RealTimeTracks.Select(b => { return(new Coordinate(b.Latitude ?? 0, b.Longitude ?? 0, int.Parse(b.Ctype))); }).ToList(); //拜访路线 CPoints = select.VisitRecords.Select(b => { return(new Coordinate(b.Latitude ?? 0, b.Longitude ?? 0, 1)); }).ToList(); if (Coords.Count >= 2) { //轨迹细化 var lastPoints = new Coordinate(); for (int j = 0; j < Coords.Count; j++) { lastPoints = Coords[j]; if (j > 0) { var dist = calc.CalculateDistance(Coords[j], lastPoints); if (dist > 3) //两点之间的距离大于3米 { Coords.AddRange(addLatLng(Coords[j], lastPoints, dist)); } } } //var dist = calc.CalculateDistance(Coords[0], Coords[Coords.Count-1]); //GetLevel(calc.CalculateDistance(Coords[0], Coords[Coords.Count - 1])); //缩放地图 Coords = DouglasPeucker(Coords, 10); //轨迹抽稀 Coords = OptimizePoints(Coords); //轨迹优化; //画线1 map.Polylines.Add(new BaiduMaps.Polyline { Points = new ObservableCollection <Coordinate>(Coords.Take(2)), //Color = Color.FromHex("#8cabe1"), Color = Color.FromHex("#53a245"), Width = 15 }); for (int i = 0; i < Coords.Count; i++) { Task.Delay(1000).Wait(); lastPoints = Coords[i]; if (i == 0) { AddOverlay(Coords[i], "q10660.png");//起点 } else if (i == Coords.Count - 1) { AddOverlay(Coords[i], "z10660.png");//终点 } else if (Coords[i].Ctype == 1) { //当前标注 AddOverlay(Coords[i], "red_location.png"); } map.Polylines[0].Points.Add(Coords[i]); //移动地图 map.Center = Coords[i]; } //轨迹2 //map.Polylines.Add(new BaiduMaps.Polyline //{ // Points = new ObservableCollection<Coordinate>(CPoints.Take(2)), // Color = Color.FromHex("#53a245"), // Width = 10 //}); //for (int i = 0; i < CPoints.Count; i++) //{ // Task.Delay(1000).Wait(); // if (i == 0) // { // AddOverlay(CPoints[i], "q10660.png");//起点 // } // else if (i == CPoints.Count - 1) // { // AddOverlay(CPoints[i], "z10660.png");//终点 // } // else // { // //当前标注 // AddOverlay(CPoints[i], "red_location.png"); // } // map.Polylines[1].Points.Add(CPoints[i]); // //移动地图 // map.Center = CPoints[i]; //} } else { ViewModel.Alert($"回放失败,业务员{select.BusinessUserName},无拜访轨迹."); } } else { ViewModel.Alert("请选择业务员!"); } } } catch (Exception ex) { Log.Write(ex); } }); //============================ btnTrack.Text = ""; IsPlayed = false; } }