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; }