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
        }
예제 #2
0
        /// <summary>
        /// 播放轨迹
        /// </summary>
        private void Projection()
        {
            if (!IsPlayed)
            {
                IsPlayed      = true;
                btnTrack.Text = "&#xf04d;";
                //============================
                //生成坐标点
                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 = "&#xf04b;";
                IsPlayed      = false;
            }
        }