Пример #1
0
        private async Task MovePoint(MemoryLayer highlightLayer, GeoLine baseline, double percentageRatio, int i)
        {
            GeoPoint point = await Task.Run(() => baseline.GetPoint((float)percentageRatio *i));

            highlightLayer.Features.Clear();
            highlightLayer.Features.Add(new Feature(point));
            Map1.Refresh("HighlightOverlay");

            await Task.Run(() => Thread.Sleep(50));
        }
        private async void PlayButton_Click(object sender, RoutedEventArgs e)
        {
            Button playButton = (Button)sender;

            SettingLayout.IsEnabled = false;

            GeoCoordinate position = routeLine.Coordinates.First();

            int      ellapsedTime   = 0;
            GeoPoint previousePoint = null;
            bool     quiteTracking  = false;
            double   targetRotation = 0;

            while (true)
            {
                double divenDistance = ellapsedTime / (1000 * 60 * 60 / ellapsedTimeSpeedUpRatio) * speedKph;
                if (divenDistance > routeLength)
                {
                    divenDistance = routeLength;
                    quiteTracking = true;
                }

                GeoPoint currentPosition = await Task.Run(() => routeLine.GetPoint(divenDistance, LengthUnit.Kilometer, GeoUnit.Meter));

                Marker vehicle = (Marker)Map1.Placements.First();
                vehicle.DropShadow = false;
                vehicle.Location   = new GeoCoordinate(currentPosition);

                UpdateLonLat(currentPosition);

                MapViewport newViewport = new MapViewport(new GeoPoint(vehicle.Location), Map1.CurrentScale, Map1.Rotation);
                if (previousePoint != null)
                {
                    double angle = -Math.Atan2(currentPosition.Y - previousePoint.Y, currentPosition.X - previousePoint.X) * 180 / Math.PI;
                    angle = Math.Round(angle, 0);

                    if (keepHeadNorth)
                    {
                        targetRotation = -angle - 90;
                    }
                    else
                    {
                        RotateTransform trans = (RotateTransform)vehicle.RenderTransform;
                        trans.Angle = angle;
                    }
                }

                if (keepHeadNorth)
                {
                    newViewport.Rotation = RotationHelper.GetRotatedAngle(targetRotation, Map1.Rotation, rotationIncrement);
                    Map1.Viewport        = newViewport;
                }

                if (quiteTracking)
                {
                    break;
                }

                previousePoint = currentPosition;
                await Task.Run(() => Thread.Sleep(refreshInterval));

                ellapsedTime += refreshInterval;
            }

            SettingLayout.IsEnabled = true;
        }