2012-03-20 50 views
0

您好我正在創建一個應用程序,它將使用疊加在MapView的頂部繪製線條。目前我已經設置了GPS點,我想使用projection.toPixel()方法。該方法不會引發任何錯誤,但在地圖移動時,點不會固定在地圖上。有什麼我失蹤?如何將GPS點轉換爲Overlay的屏幕像素?

//Zoom into certain area 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    MapController mc = mapView.getController(); 

    switch(keyCode) 
    { 
     case KeyEvent.KEYCODE_1: 
      mc.zoomIn(); 
      break; 

     case KeyEvent.KEYCODE_2: 
      mc.zoomOut(); 
      break; 

     case KeyEvent.KEYCODE_4: 
      //Create new path 
      path = new Path(); 

      //Get Location Data from GPS 

      p = new GeoPoint(
        (int) (54.9886454 * 1E6), 
        (int) (-7.522208 * 1E6)); 

      //Convert GPS location to Screen Pixels 
      Point screenPts1 = new Point(); 

      mapView.getProjection().toPixels(p, screenPts1); 

      //Start Path and pass locations 
      path.moveTo(screenPts1.x, screenPts1.y); 
      path.lineTo(screenPts1.x, screenPts1.y); 

      System.out.println("New Path "); 
      break; 

     case KeyEvent.KEYCODE_5:     
      //Get Location Data from GPS 

      p = new GeoPoint(
        (int) (54.9984931 * 1E6), 
        (int) (-7.522208 * 1E6)); 

      //Convert GPS location to Screen Pixels 
      Point screenPts2 = new Point(); 
      mapView.getProjection().toPixels(p, screenPts2); 

      //Pass locations to the path 
      path.lineTo(screenPts2.x, screenPts2.y); 

      System.out.println("Continue Path "); 
      break; 

     case KeyEvent.KEYCODE_6:     
      //Get Location Data from GPS 

      p = new GeoPoint(
        (int) (54.9994777 * 1E6), 
        (int) (-7.5005787 * 1E6)); 

      //Convert GPS location to Screen Pixels 
      Point screenPts3 = new Point(); 
      mapView.getProjection().toPixels(p, screenPts3); 

      //Pass locations to the path 
      path.lineTo(screenPts3.x, screenPts3.y); 

      //Close the path and add it to the _graphics array for it to be drawn 
      _graphics.add(path); 

      System.out.println("End Path "); 

      break; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

覆蓋類繪製方法:

public boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) 
    {  
     super.draw(canvas,mapView,shadow); 

     //-- Create new paint object -- 
     Paint mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setColor(Color.RED); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(2); 

     //-- Take all the paths from the _graphics array and draw them to the Screen -- 
     for (Path path : _graphics) 
     { 
      canvas.drawPath(path, mPaint); 
     } 

     return true; 
    } 

回答

1

從MapView.getProjection(的資料)方法:「在當前狀態下的地圖的投影你不應該繼續保留這個對象更多因爲地圖的投影可能會改變。「

因此,當您移動地圖時,必須重新計算像素位置,因爲您計算以前像素位置的投影不再有效,因此像素位置也不再有效。

+0

我想我明白你在說什麼,但每次我得到一個點時,我都會調用projection.toPixels()。線不停留在那裏的位置。我想這可能是因爲我得到Overlay課程以外的職位。 – 2012-03-20 18:24:49