可以将“叠加”大小与Android上的谷歌地图一起缩放吗?

时间:2011-07-06 15:48:20

标签: android google-maps gps overlay itemizedoverlay

我已经能够使用“MapActivity”和“ItemizedOverlay”在Android上使用Eclipse在Google地图上绘制叠加层。但是当地图放大和缩小时,叠加层不会改变大小。

我想在地图上“固定”叠加层,并随地图放大和缩小。怎么办呢?

我找不到定义边界的教程(例如,将GPS坐标作为叠加图像的角点)。如果您知道,请提供链接。

以及其他任何方式吗?

非常感谢。

2 个答案:

答案 0 :(得分:7)

是的,有。我的申请遇到了同样的问题。这是一个例子,它完美地运作。此处绘制的圆圈在放大和缩小地图时会缩放。

在你的Overlay课程中:

public class ImpactOverlay extends Overlay {

private static int CIRCLERADIUS = 0;
private GeoPoint geopoint;

public ImpactOverlay(GeoPoint point, int myRadius) {
    geopoint = point;
    CIRCLERADIUS = myRadius;
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    // Transfrom geoposition to Point on canvas
    Projection projection = mapView.getProjection();
    Point point = new Point();
    projection.toPixels(geopoint, point);

    // the circle to mark the spot
    Paint circle = new Paint();
    circle.setColor(Color.BLACK);
    int myCircleRadius = metersToRadius(CIRCLERADIUS, mapView, (double)geopoint.getLatitudeE6()/1000000);
    canvas.drawCircle(point.x, point.y, myCircleRadius, circle);
}

public static int metersToRadius(float meters, MapView map, double latitude) {
    return (int) (map.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))));         
}
}

当您的叠加层从缩放重新绘制时,标记将根据meterToRadius比例调整大小。希望它有所帮助。

答案 1 :(得分:0)

经过一番环顾,我想出了以下答案(我使用code from this blog进行了调整大小)。

我覆盖了上面使用的相同方法,但存在一些差异:

  • 我使用了drawBitmap方法
  • 而不是drawCircle方法
  • 我没有使用Paint对象
  • 我循环覆盖项目以调整标记大小

它最终是这样的:

 for(OverlayItem currentPoint:mOverlays){
        geopoint =currentPoint.getPoint();
        Point point = new Point();
        projection.toPixels(geopoint, point);                       
        BitmapDrawable bitDraw= ((BitmapDrawable)currentPoint.getMarker(0));
        Drawable currentMarker = currentPoint.getMarker(0);
        /*if (currentMarker!=null){

            if (currentWidthRatio<.6f) {                
                currentWidthRatio = .6f;                    
            }
            else if (currentWidthRatio>1.5f) {
                currentWidthRatio = 1.5f;
            }
        }*/

        if (bitDraw!=null){         
        Bitmap bitmap = getResizedBitmap(bitDraw.getBitmap(),(int)(currentMarker.getIntrinsicHeight() * currentWidthRatio),
                (int)(currentMarker.getIntrinsicWidth()*currentWidthRatio));

        canvas.drawBitmap(bitmap,
                point.x - bitmap.getHeight()/2,
                point.y - bitmap.getWidth()/2, null);
        }else{
            Log.println(Log.DEBUG,"non-existent point", "");
        }
  }

虽然小心!顾名思义,currentPoint.getMarker(0)方法获取当前标记的数据。这意味着你有原始尺寸,而不是它自那以后增长(或缩小)的方式。你必须有一些方法:

  • 存储地图的原始尺寸
  • 验证自(比率)
  • 以来的变化情况

我注释掉的代码处理了我想要允许的最大和最小调整大小(因此可以看到标记没有重叠/保持人眼清晰)。

我希望这有帮助!