向 bing 地图添加多个图钉
Adding multiple pushpins to bing map
我想在 windows 10 应用程序中向 bing 地图添加多个图钉。我遇到的麻烦是它只是最后添加的纬度,添加的经度。让我 post 我的代码:
map.xaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Hamburger_Heaven_Challenge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
x:Class="Hamburger_Heaven_Challenge.Map"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Maps:MapControl x:Name="MyMap" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="700" Width="1260">
</Maps:MapControl>
</Grid>
map.xaml.cs:
public sealed partial class Map : Page
{
PushPin pushPin = new PushPin();
public Map()
{
this.InitializeComponent();
AddPushPins();
AddIcon();
MyMap.Center = new Geopoint(new BasicGeoposition() {Latitude = 46.8442643, Longitude = 2.5992004 });
MyMap.ZoomLevel = 6;
}
public void AddPushPins()
{
pushPin.AddPushPin(46.8442643, 2.5992004);
pushPin.AddPushPin(48.873121, 2.374912);
}
public void AddIcon()
{
MapIcon myIcon = new MapIcon();
myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
myIcon.Title = "Apartment here";
MyMap.MapElements.Add(myIcon);
for (int i = 0; i < pushPin.Items().Count; i++)
{
myIcon.Location = pushPin.MyGeopoint(i);
}
}
}
pushpin.cs:
internal class PushPin
{
private ObservableCollection<Geopoint> items;
public PushPin()
{
items = new ObservableCollection<Geopoint>();
}
public void AddPushPin(double latitude, double longitude)
{
items.Add(new Geopoint(new BasicGeoposition() { Latitude = latitude, Longitude = longitude }));
}
public Geopoint MyGeopoint(int i)
{
return items[i];
}
public ObservableCollection<Geopoint> Items()
{
return items;
}
}
我认为我的问题是我经常覆盖我之前创建的 mapicon,但我该如何解决这个问题?
在正确方向上的任何一点将不胜感激!
Ps。我尝试过绑定到 ObservableCollection
,但我们对数据绑定还不够了解,所以我无法弄清楚。
问题比我想象的要简单。我是个假人。
public void AddIcon()
{
for (int i = 0; i < pushPin.Items().Count; i++)
{
MapIcon myIcon = new MapIcon();
myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
myIcon.Title = "Apartment here";
MyMap.MapElements.Add(myIcon);
myIcon.Location = pushPin.MyGeopoint(i);
}
}
前段时间我遇到了这个问题,我找到了一个解决方案(使用 MVVM),甚至更强大,因为它不限制您只能添加图钉。
首先创建 UiElements 的 ObservableCollection(不要忘记实现 属性 已更改)。
private ObservableCollection<UIElement> mapElements = new ObservableCollection<UIElement>();
public ObservableCollection<UIElement> MapElements
{
get
{
return mapElements;
}
set
{
mapElements = value;
OnPropertyChanged("MapElements");
}
}
接下来在您的地图中创建一个 MapItemsControl 并将其 ItemsSource 绑定到您刚刚创建的集合。
<Maps:Map [...]>
<Maps:MapItemsControl ItemsSource="{Binding MapElements}"/>
</Maps:Map>
最后,您唯一需要做的就是将您的图钉添加到 MapElements 集合。
public void AddPushpinToTheMap(double longitude, double latitude)
{
var pin = new Pushpin();
pin.Location = new Location(latitude, longitude);
MapElements.Add(pin);
}
就是这样,图钉将在地图上可见。
我想在 windows 10 应用程序中向 bing 地图添加多个图钉。我遇到的麻烦是它只是最后添加的纬度,添加的经度。让我 post 我的代码:
map.xaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Hamburger_Heaven_Challenge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
x:Class="Hamburger_Heaven_Challenge.Map"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Maps:MapControl x:Name="MyMap" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="700" Width="1260">
</Maps:MapControl>
</Grid>
map.xaml.cs:
public sealed partial class Map : Page
{
PushPin pushPin = new PushPin();
public Map()
{
this.InitializeComponent();
AddPushPins();
AddIcon();
MyMap.Center = new Geopoint(new BasicGeoposition() {Latitude = 46.8442643, Longitude = 2.5992004 });
MyMap.ZoomLevel = 6;
}
public void AddPushPins()
{
pushPin.AddPushPin(46.8442643, 2.5992004);
pushPin.AddPushPin(48.873121, 2.374912);
}
public void AddIcon()
{
MapIcon myIcon = new MapIcon();
myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
myIcon.Title = "Apartment here";
MyMap.MapElements.Add(myIcon);
for (int i = 0; i < pushPin.Items().Count; i++)
{
myIcon.Location = pushPin.MyGeopoint(i);
}
}
}
pushpin.cs:
internal class PushPin
{
private ObservableCollection<Geopoint> items;
public PushPin()
{
items = new ObservableCollection<Geopoint>();
}
public void AddPushPin(double latitude, double longitude)
{
items.Add(new Geopoint(new BasicGeoposition() { Latitude = latitude, Longitude = longitude }));
}
public Geopoint MyGeopoint(int i)
{
return items[i];
}
public ObservableCollection<Geopoint> Items()
{
return items;
}
}
我认为我的问题是我经常覆盖我之前创建的 mapicon,但我该如何解决这个问题?
在正确方向上的任何一点将不胜感激!
Ps。我尝试过绑定到 ObservableCollection
,但我们对数据绑定还不够了解,所以我无法弄清楚。
问题比我想象的要简单。我是个假人。
public void AddIcon()
{
for (int i = 0; i < pushPin.Items().Count; i++)
{
MapIcon myIcon = new MapIcon();
myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
myIcon.Title = "Apartment here";
MyMap.MapElements.Add(myIcon);
myIcon.Location = pushPin.MyGeopoint(i);
}
}
前段时间我遇到了这个问题,我找到了一个解决方案(使用 MVVM),甚至更强大,因为它不限制您只能添加图钉。
首先创建 UiElements 的 ObservableCollection(不要忘记实现 属性 已更改)。
private ObservableCollection<UIElement> mapElements = new ObservableCollection<UIElement>();
public ObservableCollection<UIElement> MapElements
{
get
{
return mapElements;
}
set
{
mapElements = value;
OnPropertyChanged("MapElements");
}
}
接下来在您的地图中创建一个 MapItemsControl 并将其 ItemsSource 绑定到您刚刚创建的集合。
<Maps:Map [...]>
<Maps:MapItemsControl ItemsSource="{Binding MapElements}"/>
</Maps:Map>
最后,您唯一需要做的就是将您的图钉添加到 MapElements 集合。
public void AddPushpinToTheMap(double longitude, double latitude)
{
var pin = new Pushpin();
pin.Location = new Location(latitude, longitude);
MapElements.Add(pin);
}
就是这样,图钉将在地图上可见。