以编程方式向Bing地图添加数百个推钉会导致WP7界面冻结。

3
我正在开发一个WP7应用程序,使用必应地图显示约600个推销点。当我使用map.Children.Add(pushpin)将它们添加到地图上时,UI会冻结大约200毫秒。我看到在silverlight中可以使用Microsoft.Maps.EntityCollection将标记添加到地图上,但不幸的是,我找不到如何在WP7上使用该程序集的方法。有人知道解决方案吗?
2个回答

10
也许你是从错误的角度看待这个问题。WP7是一款紧凑(但功能强大)的设备,擅长快速显示用户想要知道的信息(当应用程序编写正确时)。
由于设备太小,用户不可能一次看到600个图钉,所以为什么不只显示在可见区域(或接近可见区域)的图钉,并在用户在地图上移动时添加图钉呢?
或者,您可以使用 DispatcherTimer 将一个或多个推销逐个添加到地图上,以便用户逐渐看到推销而不会严重影响性能。
另一个可能性(这通常是我做的)是添加一个 MapItemsControl ,将DataTemplate设置为Pushpin,并将集合绑定到您的推销位置集合。如果绑定到ObservableCollection,则可以使用上述方法“逐步”提供数据,如果性能是一个问题。

谢谢,我已经实现了你描述的最后一个方法。这正是我想要的。 - tephe
+1 的常识 - 在移动设备屏幕上尝试显示 600 个单独的图钉是没有任何可能用途的。 - Alastair Aitchison
虽然600不现实,但我发现仅使用20个左右的地图控件性能很差。你有没有找到加速渲染地图的技巧,特别是在移动带有20-50个标记的地图时? - firebellys
不幸的是,这样做是不行的。我建议,在我们关注的屏幕尺寸上,20-50个项目对于用户来说太多了,他们无法轻松地区分和交互。也许你可以显示一个更一般的图钉,并将项目分组并在用户缩放时拆分出它们? - Derek Lakin

1
在类似Derek的观点中,我认为你不太可能真的想要将600个引脚同时放在屏幕上。我猜它们跨越了一个很大的地理区域,用户不太可能一次看到超过几个。
如果是这种情况,您可以轻松地应用cliprect来修剪您的点,然后将结果适度的列表添加到图层中,就可以高效地完成了。
此外,还有一个问题,当用户缩小到一定程度时,会将许多引脚合并成一个无用但色彩鲜艳的大块。这是一个更复杂的问题,传统上使用四叉树解决,我怀疑你刚才说了“什么?”,但幸运的是,谷歌是你的朋友。
哦,针对你所说的问题 - 不要直接将引脚添加到地图上。将它们添加到MapLayer中,然后再添加到地图上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接