2012-05-02 9 views
0

によると、私は地図上の現在位置画鋲を設定するには、このメソッドを持っている:アンドロイド:現在の場所画鋲サイズ精度

private void createPushPinOnMap(Canvas canvas, MapView mapView, BOMPushpin pushpin) { 
    Location location = currentBestLocation; 
    float accuracy = location.getAccuracy(); 

    Point pointPts = mapView.getProjection().toPixels(new GeoPoint(pushpin.getLatitude(), 
      pushpin.getLongtitude()), 
      null); 
    Bitmap bmp1 = BitmapFactory.decodeResource(
      context.getResources(), R.drawable.pushpin);    
    canvas.drawBitmap(bmp1, pointPts.x-10, pointPts.y-34, null); 

} 

しかし、私は同様に(そう画鋲サイズは精度に何とか等しくなり、このコードを変更する必要がありますmaps.google.comロケーションプッシュピン)。

答えて

0

なぜ誰も私にアンドロイドgoogle apiにはMyLocationという名前のクラスがあり、それはすべてのことをしています。

0

ここで私のGTLアプリケーションで使用するサンプルコードですが、少し違いがありますが、私は押しピンの代わりに円を使用しています。精度が変更された場合は、lastAccuracyに設定する必要があります。 GPSSettings.IS_SHOW_ACCURACY_MARKERは真実ではありません。ここで

はコード

public class AccuracyOverlay extends Overlay { 
    private GeoPoint geoPoint; 
    private boolean isNeedClearCanvas = false; 
    private float lastAccuracy; 

    public void clearCanvas(Canvas canvas) { 
     canvas.drawColor(Color.WHITE); 
    } 

    private void drawAccuracyCircle(Canvas canvas, MapView mapView, GeoPoint geoPoint) { 
      // convert point to pixels 
     Point screenPoint = new Point(); 
     mapView.getProjection().toPixels(geoPoint, screenPoint); 

     Paint circlePaint = new Paint(); 
     circlePaint.setAntiAlias(true); 
     circlePaint.setStrokeWidth(2.0f); 
     circlePaint.setColor(0xff6666ff); 
     circlePaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     circlePaint.setAlpha(64); 

     double lat = geoPoint.getLatitudeE6(); 
     int radius = (int) mapView.getProjection().metersToEquatorPixels(lastAccuracy); 
     canvas.drawCircle(screenPoint.x, screenPoint.y, radius, circlePaint); 

    } 

    public int metersToRadius(double latitude) { 
     return (int) (mapView.getProjection().metersToEquatorPixels(lastAccuracy) * (1/ Math.cos(Math.toRadians(latitude)))); 
    }  

    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
     if (GPSSettings.IS_SHOW_ACCURACY_MARKER) { 
      if (!shadow && getLastLocation() != null) { 
       geoPoint = getLastLocation(); 
      } 

      if (geoPoint != null) { 
       if (GPSSettings.IS_SHOW_ACCURACY_MARKER && (lastAccuracy > 0)) { 
        drawAccuracyCircle(canvas, mapView, geoPoint); 
       } 
      } 
      if (isNeedClearCanvas) { 
       boolean wasOn = GPSSettings.IS_SHOW_ACCURACY_MARKER; 
       try { 
        try { 
         if (wasOn) 
          GPSSettings.IS_SHOW_ACCURACY_MARKER = false; 
         geoPoint = null; 
         canvas.drawColor(Color.WHITE); 
        } 
        finally { 
         if (wasOn) { 
          GPSSettings.IS_SHOW_ACCURACY_MARKER = true; 
         } 
        } 
       } 
       finally { 
        isNeedClearCanvas = false; 
       } 
      } 
     } 
    } 

    public AccuracyOverlay() { 
     super(); 
    } 


    public void clearMarks() { 
     this.isNeedClearCanvas = true; 
    } 

    public void setLastAccuracy(float lastAccuracy) { 
     this.lastAccuracy = lastAccuracy; 
    } 
} 
ある
関連する問題