/
MainPage.xaml.cs
105 lines (93 loc) · 3.75 KB
/
MainPage.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using MapControlDemo.Resources;
using Windows.Devices.Geolocation;
using System.Device.Location;
using System.Windows.Shapes;
using System.Windows.Media;
using Microsoft.Phone.Maps.Controls;
namespace MapControlDemo
{
public partial class MainPage : PhoneApplicationPage
{
public GeoCoordinate currentGeoCoordinate;
// 构造函数
public MainPage()
{
InitializeComponent();
// 用于本地化 ApplicationBar 的示例代码
BuildLocalizedApplicationBar();
}
private void myMapControl_Loaded(object sender, RoutedEventArgs e)
{
Microsoft.Phone.Maps.MapsSettings.ApplicationContext.ApplicationId = "ApplicationID";
Microsoft.Phone.Maps.MapsSettings.ApplicationContext.AuthenticationToken = "AuthenticationToken";
GetCoordinates();
}
private async void GetCoordinates()
{
Geolocator MyGeolocator = new Geolocator();
MyGeolocator.DesiredAccuracyInMeters = 5;
Geoposition MyGeoPosition = null;
try
{
MyGeoPosition = await MyGeolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(10));
currentGeoCoordinate = ConvertGeocoordinate(MyGeoPosition.Coordinate);
myMap.Center = currentGeoCoordinate;
myMap.ZoomLevel = 20;
Ellipse myEllipse = new Ellipse();
myEllipse.Fill = new SolidColorBrush(Colors.Red);
myEllipse.Height = 30;
myEllipse.Width = 30;
MapOverlay mapOverlay = new MapOverlay();
mapOverlay.Content = myEllipse;
mapOverlay.PositionOrigin = new Point(0.5, 0.5);
mapOverlay.GeoCoordinate = currentGeoCoordinate;
MapLayer mapLayer = new MapLayer();
mapLayer.Add(mapOverlay);
myMap.Layers.Add(mapLayer);
}
catch (UnauthorizedAccessException)
{
MessageBox.Show("Location is disabled in phone settings");
}
catch (Exception ex)
{
}
}
public GeoCoordinate ConvertGeocoordinate(Geocoordinate geocoordinate)
{
return new GeoCoordinate
(
geocoordinate.Latitude,
geocoordinate.Longitude,
geocoordinate.Altitude ?? Double.NaN,
geocoordinate.Accuracy,
geocoordinate.AltitudeAccuracy ?? Double.NaN,
geocoordinate.Speed ?? Double.NaN,
geocoordinate.Heading ?? Double.NaN
);
}
// 用于生成本地化 ApplicationBar 的示例代码
private void BuildLocalizedApplicationBar()
{
// 将页面的 ApplicationBar 设置为 ApplicationBar 的新实例。
ApplicationBar = new ApplicationBar();
// 使用 AppResources 中的本地化字符串创建新菜单项。
ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem("改变图层");
appBarMenuItem.Click += appBarMenuItem_Click;
ApplicationBar.MenuItems.Add(appBarMenuItem);
}
void appBarMenuItem_Click(object sender, EventArgs e)
{
myMap.CartographicMode = Microsoft.Phone.Maps.Controls.MapCartographicMode.Aerial;
}
}
}