简体   繁体   English

如何在WP8中添加多个图钉以进行映射

[英]How to add multiple push pin to map in WP8

I want to make a locator and I have a json document with over 500 elements. 我想做一个定位器,我有一个包含500多个元素的json文档。 Each element look like: 每个元素看起来像:

{
    "lat": "52.500141",
    "longi": "13.312320",
    "_name": "Restaurant Berlin"
}

And now I do it in my code like this: Link to Tutorial 现在,我在代码中执行以下操作: 链接至教程

My xaml with the map element: 我的xaml与map元素:

<maps:Map x:Name="mymap" ColorMode="Light" Center="50.9727,010.2145" ZoomLevel="6" HorizontalAlignment="Left" Margin="-13,0,-13,-72" Width="482" CartographicMode="Road">
            <toolkit:MapExtensions.Children>
                <toolkit:MapItemsControl Name="RestaurantItems">
                    <toolkit:MapItemsControl.ItemTemplate>
                        <DataTemplate>
                            <toolkit:Pushpin PositionOrigin="0,0" GeoCoordinate="{Binding Coordinate}">
                                <toolkit:Pushpin.Template>
                                    <ControlTemplate TargetType="toolkit:Pushpin">
                                        <StackPanel>
                                            <Image Source="/Resources/marker.png" Stretch="Uniform" Width="150" Height="100" HorizontalAlignment="Center"/>
                                        </StackPanel>
                                    </ControlTemplate>
                                </toolkit:Pushpin.Template>
                            </toolkit:Pushpin>
                        </DataTemplate>
                    </toolkit:MapItemsControl.ItemTemplate>
                </toolkit:MapItemsControl>
            </toolkit:MapExtensions.Children>
</maps:Map>

And after I read the json file it looks like this: 在我读取json文件后,它看起来像这样:

       ObservableCollection<Restaurantmarker> restaurants = new ObservableCollection<Restaurantmarker>();

        for(int k = 0; k < JsonObjects.Count; k++)
        {
            double a = double.Parse(JsonObjects[k].lat, CultureInfo.InvariantCulture);
            double b = double.Parse(JsonObjects[k].longi, CultureInfo.InvariantCulture);

            new Restaurantmarker()
            { 
                _name = JsonObjects[k]._name, 
                Coordinate = new GeoCoordinate (a,b) 
            };
        };

        ObservableCollection<DependencyObject> children = MapExtensions.GetChildren(mymap);
        var obj = children.FirstOrDefault(x => x.GetType() == typeof(MapItemsControl)) as MapItemsControl;

        obj.ItemsSource = restaurants;

And my class for Observable Collection: 我的班级是Observable Collection:

public class Restaurantmarker
{
    public GeoCoordinate Coordinate { get; set; }

    public string _name { get; set; }
}

With less, only 20 elements it worked very well, but with over 500 it doesn't work. 如果少于20个元素,则效果很好,而超过500个元素则不起作用。 Can anybody help me? 有谁能够帮助我?

If you want to set multiple pushpins on the map, first you need to have theirs latitude and longitude information, after that you can do this: 如果要在地图上设置多个图钉,首先需要获取它们的纬度和经度信息,然后可以执行以下操作:

    private void setPinsOnTheMap()
    {
        MapLayer layer = new MapLayer();
        for (int i = 0; i < elementsList.Count; i++)
        {
            Pushpin pin = new Pushpin();
            pin.GeoCoordinate = elementsList.ElementAt(i).geoLocation;

            MapOverlay overlay = new MapOverlay();
            overlay.GeoCoordinate = elementsList.ElementAt(i).geoLocation;
            overlay.Content = pin;

            layer.Add(overlay);
        }
        map.Layers.Add(layer);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM