Gps.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using Windows.Devices.AllJoyn;
  5. using Windows.Devices.Geolocation;
  6. using Windows.Devices.Geolocation.Geofencing;
  7. using Windows.System;
  8. using Windows.UI.Xaml;
  9. using Windows.UI.Xaml.Media.Animation;
  10. using Breda_Tour.MapScreen;
  11. namespace Breda_Tour.Data
  12. {
  13. public class Gps
  14. {
  15. private MapPage mapPage;
  16. private Geolocator geolocator;
  17. private Geoposition _position;
  18. public Geoposition Position
  19. {
  20. get { return _position; }
  21. }
  22. public List<BasicGeoposition> History { get; set; }
  23. private PositionStatus _status;
  24. public PositionStatus Status
  25. {
  26. get { return _status; }
  27. }
  28. public Gps(MapPage mapPage)
  29. {
  30. History = new List<BasicGeoposition>();
  31. this.mapPage = mapPage;
  32. }
  33. public async void Start()
  34. {
  35. var accessStatus = await Geolocator.RequestAccessAsync();
  36. switch (accessStatus)
  37. {
  38. case GeolocationAccessStatus.Allowed:
  39. geolocator = new Geolocator { DesiredAccuracyInMeters = 5, MovementThreshold = 2 };
  40. // Subscribe events
  41. geolocator.StatusChanged += OnStatusChanged;
  42. geolocator.PositionChanged += OnPositionChanged;
  43. // Get position
  44. _position = await geolocator.GetGeopositionAsync();
  45. break;
  46. case GeolocationAccessStatus.Denied:
  47. _status = PositionStatus.NotAvailable;
  48. geolocator = null;
  49. bool result = await Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-location"));
  50. Refresh();
  51. break;
  52. case GeolocationAccessStatus.Unspecified:
  53. _status = PositionStatus.NotAvailable;
  54. break;
  55. }
  56. }
  57. private void OnPositionChanged(Geolocator sender, PositionChangedEventArgs args)
  58. {
  59. _position = args.Position;
  60. mapPage.ShowLocaton(_position.Coordinate.Point);
  61. //For route history line
  62. BasicGeoposition BasicG = _position.Coordinate.Point.Position;
  63. History.Add(BasicG);
  64. if (History.Count >= 2)
  65. {
  66. mapPage.DrawWalkingPath(History);
  67. }
  68. }
  69. private void OnStatusChanged(Geolocator sender, StatusChangedEventArgs args)
  70. {
  71. if (args.Status == PositionStatus.Disabled)
  72. {
  73. _position = null;
  74. }
  75. }
  76. public async void Refresh()
  77. {
  78. if (geolocator != null)
  79. {
  80. _position = await geolocator.GetGeopositionAsync();
  81. mapPage.ShowLocaton(_position.Coordinate.Point);
  82. }
  83. }
  84. }
  85. }