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.Data_;
// 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()
{
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();
route = new Route("TestRoute","Test Description");
route.CreateTestWaypoints();
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
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, 15);
ShowWaypoints(route);
ShowRoute(route);
}
public async void ShowRoute(Route route)
{
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, () =>
{
foreach (var waypoint in route.WayPoints)
{
MapIcon wp = new MapIcon() {Location = waypoint.Position};
Map.MapElements.Add(wp);
}
});
}
}
}