如何在android中绘制地图上的线条

时间:2011-05-31 06:12:13

标签: android android-maps

在我的应用程序中,我需要在行走,跑步或驾驶时在地图上绘制线条。为获取位置我使用LocattionListener类的OnLocationChanged方法。在OnLocationChanged方法中,我调用线条绘图类。这个类被称为在日志中打印,但我的地图上没有任何行。请帮我。如果您有这方面的经验或想法,请与我分享。

代码:

    public void onCreate(Bundle savedInstanceState) 
    { 
       .......
        myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new myLocationListener());
    } 
    ......
    class myLocationListener implements LocationListener {
       public void onLocationChanged(Location loc) {
                    Log.e("status","begin");
        Toast.makeText(getBaseContext(),"onStatusChanged - called",Toast.LENGTH_SHORT).show();
        Log.e("MAP","onStatusChanged - called");
        LocationManager myManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if(myManager != null){
            String param = (String)myManager.getProviders(true).get(0);
            Location loc1 = myManager.getLastKnownLocation(param); 
            if(loc1 != null){
                latPointDst = loc1.getLatitude();
                lngPointDst = loc1.getLongitude();
                tolat=latPointDst;
                tolng=latPointDst;
                GeoPoint tmp2= new GeoPoint((int) ( tolat  * 1E6), (int) ( tolng  * 1E6));
                drawingmethod(tmp2);                    
            }
             else
                    Log.e("Err-2","Error: Location  is null");
        }
        else
            Log.e("Err-2","Error: Location Manager is null");               
        Log.e("status","end");
    }
  }    
}

public void drawingmethod(GeoPoint g2) {
    geo.add(g2);
    mc = mapView.getController();
    mapOverlays = mapView.getOverlays();        
    projection = mapView.getProjection();
    Iterator<GeoPoint> itr = geo.listIterator();
    while(itr.hasNext()){
        if(itr.hasNext()){
            p=itr.next();
        }
        if(itr.hasNext()){
            p1=itr.next();
        }
        mapOverlays.add(new MyOverlay(p.getLatitudeE6(),p.getLongitudeE6(),p1.getLatitudeE6(),p1.getLongitudeE6()));  
    }
}

//画线类

public class MyOverlay extends Overlay {
    private GeoPoint gp1;
    private GeoPoint gp2;

    public MyOverlay(int fromlatE6,int fromlonE6,int tolatE6,int tologE6)    {          

        int flat=0,flog=0,tlat=0,tlog=0;
        flat=fromlatE6;
        flog=fromlonE6;
        tlat=tolatE6;
        tlog=tologE6;                       
        gp1 = new GeoPoint(flat,flog);
        gp2 = new GeoPoint(tlat,tlog);
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) {
        Projection projection = mapView.getProjection();
        if (shadow == false) {
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            Point point = new Point();
            projection.toPixels(gp1, point);
            paint.setColor(Color.RED);
            Point point2 = new Point();
            projection.toPixels(gp2, point2);
            paint.setStrokeWidth(3);
            Log.e("location change","drawing");
            canvas.drawLine((float) point.x, (float) point.y, (float) point2.x,(float) point2.y, paint);
            Log.e("map","draw2");
        }
        return super.draw(canvas, mapView, shadow, when);
    }
    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        // TODO Auto-generated method stub
        super.draw(canvas, mapView, shadow);
        Log.e("map","draw1");
    }
}

1 个答案:

答案 0 :(得分:2)

您应该通过调用google api获取源和目标之间的坐标列表。

然后你可以画线。 Refer this