2016-10-26 4 views
3

私はさまざまな車両のコースをプロットする必要があるアプリケーションがあります。トレイルには、毎分1回、どの向きに向いているかを示すマーカーを付ける必要があります。私たちが最終的に描くのは、最大10万のマーカーがプロットされる必要があることです。Androidここでは多くのMapMarkersを描画するAPIが遅いです

実際に私が言うことができる唯一の方法は、ビットマップを生成してAPIに渡すことですが、これは多くのメモリを使い果たしてしまい、使用が遅くなります。コードにキャッシュを追加して、絶対に必要でない限りビットマップが生成されないようにしましたが、まだ遅すぎます。たとえば、約30秒がNexus 5に〜10,000個のマーカーをプロットするのですが、実際のポリラインを描画するのはかなり速いですが、ポリラインに沿ってマーカーが必要です。おそらく私たちはビットマップを生成する必要がないため、MapKit(Appleから)はiPhone 5で半分の秒数で同等の数のマーカーをプロットします。だから..

  1. ​​を多数プロットするにはどうすればよいでしょうか?
  2. Imageの代わりにDrawableをプロットすることはできますか?
  3. Mapからすべてのマーカーを効率的に削除する方法はありますか?現時点では、私はそれを一つずつやり直す必要がありますが、それはやはり遅くなります(removeMapObjectsはループでremoveMapObjectを呼び出します)。
  4. 別の方法でこれを実行する必要がありますか?

それは遅いコードは間違いなくHERE SDKであり、具体的にMap.addMapObjectsMap.removeMapObjects、と私は明らかにMapMarkerのインスタンスを渡すことを言及する価値があるだろう。

+0

3.マップオーバーレイを使用できます。マップの代わりにすべてのマーカーをオーバーレイに追加し、オーバーレイ上でadd/removeMapObjectを呼び出して、すべてのマーカーを一度に表示/非表示にします。私はそれをテストしなかったが、私はそれが各マーカーの削除を呼び出すよりも速くなければならないと思う。 – Teriblus

答えて

2

次の操作を行っている場合:

foreach(MapObject m: myObjects) 
    map.addMapObject(m); 

を次に、これはかなり役立つはず:

map.executeSynchronized(new Runnable() { 
    public void run() { 
     foreach(MapObject m: myObjects) 
      map.addMapObject(m); 
    } 
}); 

あなたはそれがマップを再描画されたマップオブジェクトを追加するたびに。実行同期を使用すると、更新操作を大幅に高速化する必要があります。また、すべてのImageオブジェクトをキャッシュし、同じイメージが同じ場合は再利用することを強くお勧めします。内部的には、レンダラは同じテクスチャハンドルを共有します。

+0

それは私が何をしているかのように見えます!私はそれを試してみましょう、おそらくこれを答えとしてマークしてください、ありがとう。 – user3870920

+0

これは多くの助けになりましたが、プレミアムSDKへの切り替えもこれで成功しました。 – user3870920

+0

素晴らしい!はい、プレミアムSDKははるかに強力です。がんばろう! –

関連する問題