私は、bing マップを使用して ~600 個の画鋲を表示する WP7 アプリに取り組んでいます。map.Children.Add(pushpin) を使用してそれらをマップに追加すると、UI が約 200 ミリ秒フリーズします。Silverlight では、Microsoft.Maps.EntityCollection を使用してマップにピンを追加できることがわかりましたが、残念ながら WP7 でアセンブリを使用する方法が見つかりませんでした。誰もこれに対する解決策を知っていますか?
2 に答える
たぶん、あなたは問題を間違った方向から見ているのでしょう。WP7 はコンパクトですが (強力ですが)、ユーザーが知りたいことを (アプリが適切に作成されていれば) すばやく表示することに優れています。
それほど小さいデバイスでは、ユーザーが一度に 600 個の画鋲を表示することはおそらくできないので、表示可能な領域 (またはその近く) にある画鋲を表示し、ユーザーがマップをパンするときに画鋲を追加してみませんか?
または、 を使用して一度に 1 つ (または複数) の画鋲を追加することで、画鋲を「トリクル」フィードして、DispatcherTimer
パフォーマンスに大幅な影響を与えることなく、画鋲が徐々に追加されていることをユーザーが確認できるようにすることもできます。
もう 1 つの可能性 (私が通常行っていること) はMapItemsControl
、DataTemplate をプッシュピンに設定して を追加し、コレクションをプッシュピンの場所のコレクションにバインドすることです。バインディングが にあるObservableCollection
場合、パフォーマンスが問題になる場合は、上記のように「トリクル」フィードできます。
Derek と同様の観点から言えば、600 個のピンを同時に画面に配置したいと本気で考えているとは考えにくいと思います。それらは広い地理的領域にまたがっており、ユーザーが一度に見ることはほとんどないと思います。
この場合、簡単にクリップレクトを適用してポイントをカリングし、結果の控えめなリストをレイヤーに追加して、Presto! ハイパフォーマンス。
さらに、ユーザーが大きくズームアウトしたときに何をすべきかという問題があり、非常に多くのピンが表示されて、1 つの大きな役に立たないが明るい色のブロブに統合されます。これは、伝統的に四分木で解決されてきたより複雑な問題です。でも幸運なことに、Google はあなたの友達です。
ああ、あなたが述べた問題に対処するために、ピンをマップに直接追加しないでください。それらを MapLayer に追加してから追加します。