using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Devices.Geolocation; using Windows.Services.Maps; using Windows.Storage.Streams; using Windows.UI; using Windows.UI.Core; using Windows.UI.Xaml.Automation; using Windows.UI.Xaml.Controls.Maps; using Windows.UI.Xaml.Shapes; using Breda_Tour.CustomControls; using System.Diagnostics; using Windows.Devices.Geolocation.Geofencing; using Windows.UI.Xaml.Automation.Peers; using Breda_Tour.Data; using Breda_Tour.RouteSelectScreen; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 namespace Breda_Tour.MapScreen { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MapPage : Page { private MapIcon marker; private Geopoint point; private Gps gps; private Route route; public MapPage() { GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChange; this.NavigationCacheMode = NavigationCacheMode.Enabled; marker = new MapIcon(); marker.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Marker.png")); marker.NormalizedAnchorPoint = new Point(0.5, 0.5); gps = new Gps(this); gps.Start(); this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; DefaultPivot.SetCheckedButton(DefaultPivotControl.Tab.Map); if (RouteExample.fromRouteExamp) { RouteExample.fromRouteExamp = false; route = e.Parameter as Route; Map.MapElements.Clear(); gps.History.Clear(); gps.Refresh(); ShowWaypoints(route); //ShowRoute(); } } public async void ShowLocaton(Geopoint point) { this.point = point; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Map.Center = point; if (!Map.MapElements.Contains(marker)) { Map.MapElements.Add(marker); } marker.Location = point; }); await Map.TrySetViewAsync(point, 17); } public async void ShowRoute() { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Map.Routes.Add(RouteExample.routeView); }); //await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => //{ // List geopoints = new List(); // foreach (Waypoint wayPoint in route.Waypoints) // { // geopoints.Add(wayPoint.Position); // } // MapRouteFinderResult finder = await MapRouteFinder.GetWalkingRouteFromWaypointsAsync(geopoints); // if (finder.Status == MapRouteFinderStatus.Success) // { // MapRouteView routeView = new MapRouteView(finder.Route); // routeView.RouteColor = Colors.Firebrick; // routeView.OutlineColor = Colors.Black; // Map.Routes.Add(routeView); // } //}); } public async void ShowWaypoints(Route route) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { GeofenceMonitor.Current.Geofences.Clear(); for (int x = 0; x < route.Waypoints.Count; x++) { //Waypoints handeling Waypoint wayp = route.Waypoints.ElementAt(x); MapIcon wp = new MapIcon { Location = wayp.Position, Title = (x + 1).ToString() }; Map.MapElements.Add(wp); //Geofencing handeling string name = $"Fence {(x + 1).ToString()}"; GeofenceMonitor.Current.Geofences.Add(new Geofence(name,new Geocircle(wayp.Position.Position,10), MonitoredGeofenceStates.Entered, true,TimeSpan.FromSeconds(3))); Debug.Write("Geofences count: "+ GeofenceMonitor.Current.Geofences.Count); } //foreach (var waypoint in route.WayPoints) //{ // MapIcon wp = new MapIcon() {Location = waypoint.Position, Title = waypoint.number.ToString()}; // Map.MapElements.Add(wp); //} }); } private void Map_OnMapElementClick(MapControl sender, MapElementClickEventArgs args) { MapIcon Icon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon; for (int x = 0; x < route.Waypoints.Count; x++) { if (Icon.Title != "") { if (x + 1 == int.Parse(Icon.Title)) { MainPage.RootFrame.Navigate(typeof(WpDetailPage), new Tuple < Waypoint, Route >(route.Waypoints.ElementAt(x), route)); } } } //foreach (var waypoint in route.WayPoints) //{ // if (Icon.Title != "") // { // if (waypoint.number == int.Parse(Icon.Title)) // { // MainPage.RootFrame.Navigate(typeof(WpDetailPage), waypoint); // } // } //} } public async void DrawWalkingPath(List positions) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { MapPolyline mapPolyline = new MapPolyline(); mapPolyline.StrokeColor = Colors.Blue; mapPolyline.StrokeThickness = 3; mapPolyline.Path = new Geopath(positions); Map.MapElements.Add(mapPolyline); }); } private void OnGeofenceStateChange(GeofenceMonitor sender, object args) { Debug.Write("Kappa circle entered!!"); } } }