2011-07-06 17 views
9

"MapActivity" ve "ItemizedOverlay" özelliklerini kullanarak, Eclipse ile android üzerinde google haritalarda yer paylaşımı yapabildim. Ancak harita yakınlaştırma ve uzaklaştırma yapıldığında, kaplama boyutu değiştirmez."overlay" boyutu android google harita ile birlikte yakınlaştırılabilir mi?

Bindirmenin harita üzerinde "sabit" olmasını ve harita ile birlikte yakınlaştırılmasını istiyorum. Bu nasıl yapılabilir?

Bir sınır tanımlamak için öğreticiyi bulamıyorum (ör., Yer paylaşımı görüntüsünün köşeleri olarak GPS koordinatları ile). Bazılarını biliyorsanız lütfen bağlantı sağlayın.

ve bunu yapmanın başka yolları?

Çok teşekkürler.

cevap

7

Evet, var. Başvurumda da aynı sorun vardı. İşte bir örnek ve mükemmel çalışıyor. Burada çizilen daire, haritayı yakınlaştırıp uzaklaştırırken ölçeklenir. senin Yerleşimi sınıfta

:

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

paylaşımınızın olarak zoom dan yeniden çizer, işaretleyici metersToRadius skalasına göre onunla yeniden boyutlandırılır. Umarım yardımcı olur.

+0

Haritaya çizilebilir işaretler ekliyorum, büyütme düzeyine göre boyutunu nasıl değiştirebilirim – Mani

0

Biraz etrafa baktıktan sonra, şu yanıtla geldim (yeniden boyutlandırma yapmak için code from this blog kullanıyorum).

  • yerine I
  • I
  • I üzerinde sağlanıncaya Boya nesne kullanımı yoktu drawBitmap yöntemi kullanılmıştır drawCircle yöntemi:

    bazı farklılıklarla yukarıda kullanılan aynı yöntem, overrode işaretçileri yeniden boyutlandırmak için bindirme ürün

böyle biter:

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

Dikkatli olun! CurrentPoint.getMarker (0) yöntemi, adından da anlaşılacağı gibi, geçerli işaretçinin verilerini alır. Bu, orijinal boyutuna sahip olduğunuzdan, o zamandan beri büyüdüğünüzden (veya küçüldüğünüzden) değil. Sen bazı yöntemi olması gerekir: Haritanın orijinal boyut

  • o beri ne kadar değiştiğini doğrulamak

    • mağazada (oran)

    dışarı yorumladı kod maksimum ve minimum boyutlandırma kolları İzin vermek istiyorum (bu yüzden işaretleyiciler örtüşmeden/insan gözü için okunaklı kalmadan görülebilir).

    Umarım bu yardımcı olur!