2012-04-04 49 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; 

这将在draw()被调用,你以某种方式通过onLocationChanged()功能绘制覆盖调用这个绘制函数。

注意:canvas和mv是传递给draw()函数的参数,first是一个全局布尔变量,表示这是您得到或不可能得到的第一个点。

+0

根据你这是最好的方法或可能尝试任何其他方法 – 2012-04-05 18:02:26

+0

我不能向你保证这是最好的方法,但这是一个好的开始让你想要做的事情,然后想到效率,当然,如果你有更好的解决方案,你可以回答自己的问题并将其标记为答案。 – 2012-04-06 13:39:43

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 2012-08-29 17:59:30