2012-10-25 4 views
6

背景パス() - マップ(グーグルマップおよびOpenStreetマップ)上に経路を表示するアプリケーションを開発するスマート有色セグメント

- 私。以下のアプローチを使用して

Path

上記のパス - 私を描画する:出力例ベローズ

private void drawWithoutElevation(Canvas canvas, Projection projection){ 
    if(rebuildRequired) 
     pathBuild(); 
    else{ //check if path need to be offset 
     if(offsetRequired){ 
      path.offset(offset.x, offset.y); 
     } 
    } 
    canvas.drawPath(path, paint); 
} 

を上記のアプローチは、許容され、10.000点を描画する1.5ミリ秒程度かかり。

しかし、ポイントの高度に応じて色分けして表示することもできます。出力例ベローズ:

アプローチ1

Path 2

私は経路セグメントごとに異なる色を定義する方法を見つけることができなかったとして、私は、次のアプローチを試みましたパス内の各点の間にcanvas.drawLine()を使用して、最も明白な解決策です。例:

private void drawWithElevation(Canvas canvas, Projection projection){ 
    for(int i=1; i<geoArrList.size(); i++){ 
      paint.setColor(geoArrList.get(i)); 
      canvas.drawLine(pPrev.x, pPrev.y, p1.x, p1.y, paint); 
      pPrev.set(p1.x, p1.y); 
     } 
    } 
} 

この結果、同じ10.000ポイントで約80msの非常に失望した時間になります。

アプローチ2

セグメント離散的なステップで高度、及びPathオブジェクト、高度セグメント変化当たり一方のリストを構築します。下記のコード例:

private void drawWithElevation(Canvas canvas, Projection projection){ 
    if(rebuildRequired) 
     pathBuild(); 
    for(int i=0; i<pathSegments.size(); i++){ 
     if(needOffset){ 
      pathSegments.get(i).path.offset(offsetX, offsetY); 
     } 
     paint.setColor(pathSegments.get(i).color); 
     canvas.drawPath(pathSegments.get(i).path, paint); 
    } 
} 

この結果、同じ10.000ポイントで約5msの時間が失われることはありません。

質問

最後のアプローチは、最初のものと比較して、有意な改善を示したが、私はさらにそれを改善したいと思います。

より効率的な方法(速度および/またはメモリの使用)でセグメントごとに異なる色でパスを描くために使用できる他の方法はありますか?

お時間をいただきありがとうございます。

+0

5msは200fpsです。パフォーマンスを改善する必要はありますか?あなたがプロットしようとしているので、それをより速く実行したい場合などポイントが100Kポイントの場合は、スマートフォンの画面であれば4Kの画面ではなく、ポイント数を減らすことが必要なのでしょうか? – 9000

+0

ありがとう@ 9000、あなたは良い点があります...それを改善しようとするドライバは、他のオーバーレイ(コンパス、マーカー、現在の位置など)のほかに、同時に複数のパスを追加できるということです。私はそれで生きる必要があります:-) – Luis

答えて

1

GoogleからのMyTracksのソースを調べてみると、いくらかインスピレーションを受ける可能性があります。

関連する問題