2012-04-04 5 views
0

現在の場所(GPSから取得)から彼が移動する方法までmapViewに経路を描画しようとしています。MapView - 旅行中の経路をトレースして描画しますか?

ユーザーが特定の方向に移動するときにユーザーの場所を取得できますが、パスを描画できませんでした。

連続して移動する経路パスを描画するには、どのような方法が最適ですか?

パフォーマンスを向上させるには、この方法をお勧めします。

答えて

2

パスを描画するためには、現在の場所&の前の場所(グローバル変数など)を追跡する必要があります(ただし、初めての現在の場所しか持たないため、次の点までは何もしません) 。

 int x1 = -1, y1 = -1, x2 = -1, y2 = -1; 
     Paint paint = new Paint(); 
     paint.setColor(Color.rgb(0x7b, 0x7b, 0xff)); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(5); 

       Point prevloc = new Point(); 
       mv.getProjection().toPixels(new GeoPoint((int (prevlocation.getLatitude()*1.0E6),(int) (prevlocation.getLongitude()*1.0E6)), prevloc); 
       Point loc = new Point(); 
       mv.getProjection().toPixels(new GeoPoint((int (location.getLatitude()*1.0E6),(int) (location.getLongitude()*1.0E6)), loc); 
       x2 = prevloc.x; 
       y2 = prevloc.y; 
       if (first) 
       { 
        x2 = loc.x; 
        y2 = loc.y; 
       } 
       if (!first) { 
        canvas.drawLine(x1, y1, x2, y2, paint); 
       } 
       x1 = x2; 
       y1 = y2; 

これは何とかonLocationChanged()機能にオーバーレイを描画して、この描画関数を呼び出すことdraw()とあなたの中に呼び出されます。

注:canvasとmvは、draw()関数に渡されるパラメータであり、最初は取得する最初のポイントであることを示すグローバルブール変数です。

+0

あなたによれば、これは最善の方法であるか、他の方法で試みることがあります –

+0

これは最高のアプローチですが、もちろん、より良い解決策があれば、あなた自身の質問に答えることができ、答えとしてマークすることができます。 –

1
public void draw(Canvas canvas, MapView mapv, boolean shadow){ 
    super.draw(canvas, mapv, shadow); 
    Projection projection = mapv.getProjection(); 
    Path p = new Path(); 
    for (int i = 0; i < geoPointsArray.size(); i++) { 
     if (i == geoPointsArray.size() - 1) { 
      break; 
     } 
     Point from = new Point(); 
     Point to = new Point(); 
     projection.toPixels(geoPointsArray.get(i), from); 
     projection.toPixels(geoPointsArray.get(i + 1), to); 
     p.moveTo(from.x, from.y); 
     p.lineTo(to.x, to.y); 
    } 
    Paint mPaint = new Paint(); 
    mPaint.setStyle(Style.STROKE); 
    mPaint.setColor(Color.GREEN); 
    mPaint.setAntiAlias(true); 
    mPaint.setStrokeWidth(5); 
    canvas.drawPath(p, mPaint); 
    mapv.invalidate(); 
    super.draw(canvas, mapv, shadow); 
}//draw() 

上記の方法を使用して、場所を移動するときに経路を描くことができます。 geoPointsArrayは受信した場所の配列です。

+0

ニースの回答。このアイデアは最高ですが、geoPointsArrayが大量になり、それらを追跡できるようにしたくないということを心に留めておくと、geoPointsArrayにポイントを常に追加する必要があります。 – ComputerEngineer88

関連する問題