我正在开发一个 WP7 应用程序,它使用 bing 地图来显示 ~600 个图钉。当我使用 map.Children.Add(pushpin) 将它们添加到地图时,UI 会冻结约 200 毫秒。我已经看到,在silverlight 中,您可以使用Microsoft.Maps.EntityCollection 向地图添加图钉,但不幸的是我找不到如何在WP7 上使用该程序集。有谁知道解决这个问题?
2 回答
也许您正在以错误的方式看待问题。WP7 是一款紧凑型(虽然功能强大),擅长快速向用户展示他们想知道的内容(当应用程序编写正确时)。
用户不可能在这么小的设备上一次性看到 600 个图钉,那么为什么不向他们展示位于可视区域(或靠近它)的图钉,并在用户在地图上平移时添加图钉呢?
或者,您可以使用 一次添加一个(或多个)图钉来“涓涓”馈送图钉,DispatcherTimer
以便用户看到图钉被逐渐添加而不会显着影响性能。
另一种可能性(这是我通常做的)是将MapItemsControl
DataTemplate 设置为 Pushpin 并将集合绑定到您的图钉位置集合。如果绑定是一个ObservableCollection
你可以“涓涓细流”喂它如上所述如果性能是一个问题。
在与 Derek 相似的观点中,我发现您不太可能真的想同时在屏幕上放置 600 个图钉。我猜它们跨越了一个很大的地理区域,用户一次不太可能看到多个。
如果是这种情况,您可以简单地应用一个 cliprect 来剔除您的点,然后将生成的适度列表添加到图层,然后 Presto!高性能。
此外,还有一个问题是当用户放大很远时该怎么办,将这么多的图钉带入视野,以至于它们合并成一个大的无用但颜色鲜艳的斑点。这是一个传统上用四叉树解决的更复杂的问题,我怀疑你刚才说的是“什么?” 但幸运的是,谷歌是你的朋友。
哦,为了解决您所说的问题 - 不要将图钉直接添加到地图上。将它们添加到 MapLayer,然后添加。