我已经能够使用“MapActivity”和“ItemizedOverlay”在带有 Eclipse 的 android 上的谷歌地图上绘制叠加层。但是当地图放大和缩小时,叠加层不会改变大小。
我希望覆盖在地图上“固定”,并与地图一起放大和缩小。如何才能做到这一点?
我找不到定义边界的教程(例如,使用 GPS 坐标作为覆盖图像的角)。如果您知道一些,请提供链接。
还有其他方法吗?
非常感谢。
我已经能够使用“MapActivity”和“ItemizedOverlay”在带有 Eclipse 的 android 上的谷歌地图上绘制叠加层。但是当地图放大和缩小时,叠加层不会改变大小。
我希望覆盖在地图上“固定”,并与地图一起放大和缩小。如何才能做到这一点?
我找不到定义边界的教程(例如,使用 GPS 坐标作为覆盖图像的角)。如果您知道一些,请提供链接。
还有其他方法吗?
非常感谢。
就在这里。我的申请也有同样的问题。这是一个例子,它完美地工作。当您放大和缩小地图时,此处绘制的圆圈会按比例缩放。
在您的覆盖类中:
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 比例调整大小。希望能帮助到你。
环顾四周后,我想出了以下答案(我使用此博客中的代码来调整大小)。
我覆盖了上面使用的相同方法,但有一些区别:
它最终是这样的:
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) 方法获取当前标记的数据。这意味着您拥有其原始大小,而不是其增长(或缩小)的方式。你必须有一些方法:
我注释掉的代码处理了我想要允许的最大和最小调整大小(因此可以看到标记而不会重叠/人眼仍然清晰可见)。
我希望这有帮助!