MapPage.xaml.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.CompilerServices;
  6. using System.Runtime.InteropServices.WindowsRuntime;
  7. using Windows.Foundation;
  8. using Windows.Foundation.Collections;
  9. using Windows.UI.Xaml;
  10. using Windows.UI.Xaml.Controls;
  11. using Windows.UI.Xaml.Controls.Primitives;
  12. using Windows.UI.Xaml.Data;
  13. using Windows.UI.Xaml.Input;
  14. using Windows.UI.Xaml.Media;
  15. using Windows.UI.Xaml.Navigation;
  16. using Windows.Devices.Geolocation;
  17. using Windows.Services.Maps;
  18. using Windows.Storage.Streams;
  19. using Windows.UI;
  20. using Windows.UI.Core;
  21. using Windows.UI.Xaml.Automation;
  22. using Windows.UI.Xaml.Controls.Maps;
  23. using Windows.UI.Xaml.Shapes;
  24. using Breda_Tour.CustomControls;
  25. using Breda_Tour.Data_;
  26. using System.Diagnostics;
  27. // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
  28. namespace Breda_Tour.MapScreen
  29. {
  30. /// <summary>
  31. /// An empty page that can be used on its own or navigated to within a Frame.
  32. /// </summary>
  33. public sealed partial class MapPage : Page
  34. {
  35. private MapIcon marker;
  36. private Geopoint point;
  37. private Gps gps;
  38. private Route route;
  39. public MapPage()
  40. {
  41. this.NavigationCacheMode = NavigationCacheMode.Enabled;
  42. marker = new MapIcon();
  43. marker.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Marker.png"));
  44. marker.NormalizedAnchorPoint = new Point(0.5, 0.5);
  45. gps = new Gps(this);
  46. gps.Start();
  47. route = new Route("TestRoute","Test Description");
  48. route.CreateTestWaypoints();
  49. this.InitializeComponent();
  50. Debug.Write("New Map generated");
  51. }
  52. protected override void OnNavigatedTo(NavigationEventArgs e)
  53. {
  54. SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
  55. DefaultPivot.SetCheckedButton(DefaultPivotControl.Tab.Map);
  56. }
  57. public async void ShowLocaton(Geopoint point)
  58. {
  59. this.point = point;
  60. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  61. {
  62. Map.Center = point;
  63. if (!Map.MapElements.Contains(marker))
  64. {
  65. Map.MapElements.Add(marker);
  66. }
  67. marker.Location = point;
  68. });
  69. await Map.TrySetViewAsync(point, 15);
  70. ShowWaypoints(route);
  71. ShowRoute(route);
  72. }
  73. public async void ShowRoute(Route route)
  74. {
  75. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
  76. {
  77. List<Geopoint> geopoints = new List<Geopoint>();
  78. foreach(WayPoint wayPoint in route.WayPoints)
  79. {
  80. geopoints.Add(wayPoint.Position);
  81. }
  82. MapRouteFinderResult finder = await MapRouteFinder.GetWalkingRouteFromWaypointsAsync(geopoints);
  83. if (finder.Status == MapRouteFinderStatus.Success)
  84. {
  85. MapRouteView routeView = new MapRouteView(finder.Route);
  86. routeView.RouteColor = Colors.Firebrick;
  87. routeView.OutlineColor = Colors.Black;
  88. Map.Routes.Add(routeView);
  89. }
  90. });
  91. }
  92. public async void ShowWaypoints(Route route)
  93. {
  94. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  95. {
  96. foreach (var waypoint in route.WayPoints)
  97. {
  98. MapIcon wp = new MapIcon() {Location = waypoint.Position, Title = waypoint.number.ToString()};
  99. Map.MapElements.Add(wp);
  100. }
  101. });
  102. }
  103. private void Map_OnMapElementClick(MapControl sender, MapElementClickEventArgs args)
  104. {
  105. MapIcon Icon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon;
  106. foreach (var waypoint in route.WayPoints)
  107. {
  108. if (Icon.Title != "")
  109. {
  110. if (waypoint.number == int.Parse(Icon.Title))
  111. {
  112. MainPage.RootFrame.Navigate(typeof(WpDetailPage), waypoint);
  113. }
  114. }
  115. }
  116. }
  117. }
  118. }