MapPage.xaml.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 System.Diagnostics;
  26. using Windows.Devices.Geolocation.Geofencing;
  27. using Windows.UI.Xaml.Automation.Peers;
  28. using Breda_Tour.Data;
  29. using Breda_Tour.RouteSelectScreen;
  30. // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
  31. namespace Breda_Tour.MapScreen
  32. {
  33. /// <summary>
  34. /// An empty page that can be used on its own or navigated to within a Frame.
  35. /// </summary>
  36. public sealed partial class MapPage : Page
  37. {
  38. private MapIcon marker;
  39. private Gps gps;
  40. private Route route;
  41. public MapPage()
  42. {
  43. GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChange;
  44. this.NavigationCacheMode = NavigationCacheMode.Enabled;
  45. marker = new MapIcon();
  46. marker.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Marker.png"));
  47. marker.NormalizedAnchorPoint = new Point(0.5, 0.5);
  48. gps = new Gps(this);
  49. gps.Start();
  50. this.InitializeComponent();
  51. }
  52. protected override void OnNavigatedTo(NavigationEventArgs e)
  53. {
  54. SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
  55. AppViewBackButtonVisibility.Collapsed;
  56. DefaultPivot.SetCheckedButton(DefaultPivotControl.Tab.Map);
  57. if (RouteExample.fromRouteExamp)
  58. {
  59. RouteExample.fromRouteExamp = false;
  60. route = e.Parameter as Route;
  61. Map.MapElements.Clear();
  62. gps.History.Clear();
  63. gps.Refresh();
  64. ShowWaypoints(route);
  65. ShowRoute();
  66. }
  67. }
  68. public async void ShowLocaton(Geopoint _point)
  69. {
  70. Geopoint point = _point;
  71. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  72. {
  73. Map.Center = point;
  74. if (!Map.MapElements.Contains(marker))
  75. {
  76. Map.MapElements.Add(marker);
  77. }
  78. marker.Location = point;
  79. });
  80. await Map.TrySetViewAsync(point, 17);
  81. }
  82. private async void ShowRoute()
  83. {
  84. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  85. {
  86. Map.Routes.Add(RouteExample.routeView);
  87. });
  88. }
  89. private async void ShowWaypoints(Route route)
  90. {
  91. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  92. {
  93. GeofenceMonitor.Current.Geofences.Clear();
  94. for (int x = 0; x < route.Waypoints.Count; x++)
  95. {
  96. //Waypoints handeling
  97. Waypoint wayp = route.Waypoints.ElementAt(x);
  98. MapIcon wp = new MapIcon { Location = wayp.Position, Title = (x + 1).ToString() };
  99. Map.MapElements.Add(wp);
  100. //Geofencing handeling
  101. string name = (x + 1).ToString();
  102. GeofenceMonitor.Current.Geofences.Add(new Geofence(name, new Geocircle(wayp.Position.Position, 25),
  103. MonitoredGeofenceStates.Entered, true, TimeSpan.FromSeconds(3)));
  104. }
  105. });
  106. }
  107. private void Map_OnMapElementClick(MapControl sender, MapElementClickEventArgs args)
  108. {
  109. MapIcon Icon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon;
  110. for (int x = 0; x < route.Waypoints.Count; x++)
  111. {
  112. if (Icon.Title != "")
  113. {
  114. if (x + 1 == int.Parse(Icon.Title))
  115. {
  116. MainPage.RootFrame.Navigate(typeof(WpDetailPage), new Tuple < Waypoint, Route >(route.Waypoints.ElementAt(x), route));
  117. }
  118. }
  119. }
  120. }
  121. public async void DrawWalkingPath(List<BasicGeoposition> positions)
  122. {
  123. await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  124. {
  125. MapPolyline mapPolyline = new MapPolyline();
  126. mapPolyline.StrokeColor = Colors.Blue;
  127. mapPolyline.StrokeThickness = 3;
  128. mapPolyline.Path = new Geopath(positions);
  129. Map.MapElements.Add(mapPolyline);
  130. });
  131. }
  132. private void OnGeofenceStateChange(GeofenceMonitor sender, object args)
  133. {
  134. var reports = sender.ReadReports();
  135. foreach (GeofenceStateChangeReport report in reports)
  136. {
  137. GeofenceState state = report.NewState;
  138. Geofence geofence = report.Geofence;
  139. if (state == GeofenceState.Entered)
  140. {
  141. foreach (var waypoint in route.Waypoints)
  142. {
  143. int index = waypoint.Title.IndexOf(".");
  144. string number = "";
  145. if (index > 0)
  146. {
  147. number = waypoint.Title.Substring(0, index);
  148. }
  149. if (geofence.Id == number)
  150. {
  151. new Notification("Waypoint", waypoint.Title);
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }