【问题标题】:How to add multiple push pin to map in WP8如何在 WP8 中添加多个图钉进行映射
【发布时间】:2015-02-05 11:53:28
【问题描述】:

我想制作一个定位器,并且我有一个包含 500 多个元素的 json 文档。每个元素看起来像:

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

现在我在我的代码中这样做:Link to Tutorial

我的带有地图元素的 xaml:

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

在我阅读 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;

还有我的 Observable Collection 课程:

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

    public string _name { get; set; }
}

使用较少的元素,只有 20 个元素效果很好,但超过 500 个元素就不起作用了。有谁能够帮我?

【问题讨论】:

  • “不起作用”是什么意思
  • 我等了 2-3 分钟,但什么也没出现。而且整整半分钟都不好:/
  • 您不是在告诉我们您要在 Windows Phone 地图控件上显示 500 多张尺寸为 150x100 的图像吗?那可能只是行不通。
  • 一些想法可能会有所帮助...也许只添加当前在可见地图区域内的图钉,(地图边界)刷新每次显示的图钉的边界使用相关事件更改地图(当用户在地图上导航时)。如果用户缩小得太远,可能不会显示任何图钉,而是会显示一条消息,通知用户他们需要进一步放大才能看到图钉(或者您可以限制用户实际缩小的范围)。

标签: c# xaml windows-phone-8 dictionary


【解决方案1】:

如果你想在地图上设置多个图钉,首先你需要有他们的经纬度信息,然后你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多