2011-07-06 7 views
9

He podido utilizar "MapActivity" y "ItemizedOverlay" para dibujar superposiciones en google maps en android con Eclipse. Pero cuando el mapa se acerca y se aleja, la superposición no cambia de tamaño.¿Se puede ampliar el tamaño de "superposición" con el mapa de google en Android?

Quiero que la superposición se "fije" en el mapa, y acercar y alejar con el mapa. ¿Cómo puede hacerse esto?

No encuentro el tutorial para definir un límite (por ejemplo, con las coordenadas de GPS como esquinas para la imagen de superposición). Proporcione enlaces si conoce alguno.

y otras formas de hacerlo?

Muchas gracias.

Respuesta

7

Sí, la hay. Tuve el mismo problema con mi aplicación. Aquí hay un ejemplo y funciona perfectamente. El círculo dibujado aquí se amplía a medida que acercas y alejas el mapa.

En su clase de superposición:

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))));   
} 
} 

Como la superposición de re-dibuja a partir zoom, el marcador cambiará de tamaño con él sobre la base de la escala metersToRadius. Espero eso ayude.

+0

Estoy agregando marcadores dibujables al mapa, ¿cómo puedo cambiar el tamaño según el nivel de zoom? – Mani

0

Después de mirar un poco, se me ocurrió la siguiente respuesta (utilicé code from this blog para hacer el cambio de tamaño).

I pesaban más que las mismo método utilizado anteriormente, con algunas diferencias:

  • En lugar del método drawCircle utilicé el método drawBitmap
  • yo no usar el objeto Paint
  • pedaleé sobre el artículos de superposición de redimensionar los marcadores

Se termina así:

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", ""); 
     } 
    } 

¡Cuidado! El método actualPoint.getMarker (0) obtiene, como su nombre implica, los datos del marcador actual. Eso significa que tiene su tamaño original, no la forma en que ha crecido (o encogido) desde entonces. Usted tiene que tener algún método para:

  • tienda el tamaño original del mapa
  • verificar cómo ha cambiado desde (relación)

El código lo comenté a cabo maneja el máximo y el mínimo cambio de tamaño Quiero permitir (para que los marcadores se puedan ver sin superponer/permanezcan legibles para el ojo humano).

Espero que esto ayude!

Cuestiones relacionadas