2011-05-31 23 views
1

私のアプリでは、私は歩いている、走っている、または運転している間、地図上に線を描く必要があります。私は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"); 
    } 
} 

答えて

2

は、GoogleのAPIを呼び出すことにより、送信元と送信先の間で座標のリストを取得する必要があります。

あなたは線を描くことができます。 Refer this

関連する問題