3

我正在开发一个 WP7 应用程序,它使用 bing 地图来显示 ~600 个图钉。当我使用 map.Children.Add(pushpin) 将它们添加到地图时,UI 会冻结约 200 毫秒。我已经看到,在silverlight 中,您可以使用Microsoft.Maps.EntityCollection 向地图添加图钉,但不幸的是我找不到如何在WP7 上使用该程序集。有谁知道解决这个问题?

4

2 回答 2

10

也许您正在以错误的方式看待问题。WP7 是一款紧凑型(虽然功能强大),擅长快速向用户展示他们想知道的内容(当应用程序编写正确时)。

用户不可能在这么小的设备上一次性看到 600 个图钉,那么为什么不向他们展示位于可视区域(或靠近它)的图钉,并在用户在地图上平移时添加图钉呢?

或者,您可以使用 一次添加一个(或多个)图钉来“涓涓”馈送图钉,DispatcherTimer以便用户看到图钉被逐渐添加而不会显着影响性能。

另一种可能性(这是我通常做的)是将MapItemsControlDataTemplate 设置为 Pushpin 并将集合绑定到您的图钉位置集合。如果绑定是一个ObservableCollection你可以“涓涓细流”喂它如上所述如果性能是一个问题。

于 2011-06-03T09:45:18.980 回答
1

在与 Derek 相似的观点中,我发现您不太可能真的想同时在屏幕上放置 600 个图钉。我猜它们跨越了一个很大的地理区域,用户一次不太可能看到多个。

如果是这种情况,您可以简单地应用一个 cliprect 来剔除您的点,然后将生成的适度列表添加到图层,然后 Presto!高性能。

此外,还有一个问题是当用户放大很远时该怎么办,将这么多的图钉带入视野,以至于它们合并成一个大的无用但颜色鲜艳的斑点。这是一个传统上用四叉树解决的更复杂的问题,我怀疑你刚才说的是“什么?” 但幸运的是,谷歌是你的朋友。

哦,为了解决您所说的问题 - 不要将图钉直接添加到地图上。将它们添加到 MapLayer,然后添加。

于 2011-06-05T09:54:12.327 回答