UWP MapControl 巨大的 nr 的 MapIcons



问题是我无法一次看到所有20.000个MapIcons,我想进一步增加MapIcon的数量。

我的视图模型中有一个名为HousesSystem.Collections.ObjectModel.ObservableCollection<House>道具HousesViewModel

public MainPage()
{
    this.InitializeComponent();
    HousesVM.Houses.CollectionChanged += Houses_CollectionChangedAsync;
    GetInitialPins();
}

我的GetInitialPins()有一个foreach来添加/填充HousesVm.Houses,但这似乎效率低下,所以我像这样重写它:

List<House> houses = JsonConvert.DeserializeObject<List<House>>(response);
HousesVM.Houses = new System.Collections.ObjectModel.ObservableCollection<House>(houses);

缺点是这不会触发我添加 MapIcon 的CollectionChanged事件。

private async void Houses_CollectionChangedAsync(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
    await dispatcher.RunAsync(CoreDispatcherPriority.Low, async () =>
    {
        foreach (House item in e.NewItems)
        {
            MapIcon myPOI = new MapIcon
            {
                Location = new Geopoint(new BasicGeoposition() { Latitude = item.Latitude, Longitude = item.Longitude }),
                NormalizedAnchorPoint = normalizedAnchorPoint,
                Title = item.Name,
                CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible,
                ZIndex = 0
            };
            await mappie.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                mappie.MapElements.Add(myPOI);
            });    
        }
    });
}

我还试图摆脱MapIcon,只是向 mapcontrol 的子项添加Ellipse。这给了我一个记忆不足的例外。还尝试在 XAML 中绑定:

<map:MapControl x:Name="mappie" 
                        MapServiceToken="mysecrettoken"
                        Grid.Row="1">
        <map:MapItemsControl ItemsSource="{Binding Houses}">
            <map:MapItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock map:MapControl.Location="{Binding Location}" Text="{Binding Code}" map:MapControl.NormalizedAnchorPoint="0.5,0.5" FontSize="20" Margin="5"/>
                </DataTemplate>
            </map:MapItemsControl.ItemTemplate>
        </map:MapItemsControl>

还给出了内存不足异常...还看到 js 版本的 bing 地图具有群集/分组功能。UWP 中不存在。并且在文档中也看到,对于大量我应该考虑构建一个磁贴服务并参考自定义创建的磁贴......对于我的情况来说,这似乎有点矫枉过正。

聚类是处理大量点的推荐方法,因为正如您所指出的,您实际上无论如何都无法同时看到所有点。此处的 UWP 映射示例中有一个群集示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/MapControl

相关内容

  • 没有找到相关文章

最新更新