将多个图钉添加到bing贴图



我正试图在windows 10应用程序中为bing映射添加多个图钉。我面临的问题是,只有最后一个添加的lat,long才会被添加。让我发布我的代码:

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;
    } 
}

我想我的问题是我经常覆盖我以前创建的地图图标,但我该如何解决这个问题?任何正确的方向都将不胜感激!Ps.我试过绑定到ObservableCollection,但我们对数据绑定还不够强硬,我无法弄清楚。

一段时间前,我遇到了这个问题,我找到了一个解决方案(使用MVVM),甚至更强大,因为它并没有限制您只添加Pushpin。

首先创建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);
}

就是这样,地图上就能看到这个大头针了。

这个问题比我想象的要简单。我是个傻瓜。

    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);
        }
    }

相关内容

  • 没有找到相关文章

最新更新