在我的应用中,我需要在行走,跑步或驾驶时在地图上画线。为了获得位置,我使用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");
    }
}

最佳答案

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

然后您可以画线。 Refer this

08-04 01:57