2011-11-23 101 views
1

嗨iam在android.while中显示谷歌地图中的多个标记iam显示时,标记在谷歌地图上一一显示。在这里我想显示多于50个标记。但根据我的代码,标记逐个显示,并显示50个标记,这需要花费很多时间。下面是我的代码,它处于同一个类中。任何想法都会被赞赏。如何在Google地图中一次显示多个标记android

公共无效displayMarkersOnMap(){

Runnable r=new Runnable(){ 

    public void run(){ 

对(INT I = 0;我< vector.size();我++){

  try { 
      pinHM = (HashMap<String, Object>)vector.get(i); 
       mapView = (MapView)findViewById(R.id.mapView); 
       mapView.getController().setZoom(9); 
        Drawable marker;   
      else{ 
        String status = pinHM.get("status").toString(); 
       if (status.equals("ST_COMPLETE")) { 
        marker = getResources().getDrawable(R.drawable.pin_green); 
       }else if (status.equals("ST_IN_PROGRESS")) { 
        marker = getResources().getDrawable(R.drawable.pin_orange); 
       }else { 
        marker = getResources().getDrawable(R.drawable.pin_gray); 
       } 
      } 
        marker.setBounds((int) (-marker.getIntrinsicWidth()/2),-marker.getIntrinsicHeight(),(int) (marker.getIntrinsicWidth()/2), 0); 
        double latitude=Double.parseDouble(pinHM.get("latitude").toString()); 
        double longitude=Double.parseDouble(pinHM.get("longitude").toString()); 
        Geocoder geoCoder = new Geocoder(BaseMapActivity.this, Locale.getDefault()); 
        List<Address> addresses = geoCoder.getFromLocationName(address,5); 
        if (addresses.size() > 0) { 
        GeoPoint point = new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6)); 
        funPlaces = new MyItemizedOverlay(point,marker,hmtostring,nameaddress,mapView); 
        mapView.getOverlays().add(funPlaces); 
        GeoPoint pt = funPlaces.getCenterPt();  
        int latSpan = funPlaces.getLatSpanE6(); 
        int lonSpan = funPlaces.getLonSpanE6(); 
        Log.v("Overlays", "Lat span is " + latSpan); 
        Log.v("Overlays", "Lon span is " + lonSpan); 
        MapController mc = mapView.getController(); 
        mc.setCenter(pt); 
      } 


    } catch (IOException e) { 
     e.printStackTrace(); 
    }  
} 
     }//end of run 
    };//end of Runnable 
    Thread thread = new Thread(r, "BaseMapActiviy"); 
    thread.start(); 
} 

公共类MyItemizedOverlay延伸BalloonItemizedOverlay {

private ArrayList<OverlayItem> m_overlays = new ArrayList<OverlayItem>(); 
    @SuppressWarnings("unused") 
    private Context c; 
    private GeoPoint center = null; 

    public MyItemizedOverlay(GeoPoint point, Drawable marker,String hmtostring,String nameaddress,MapView mapView) { 
     super(boundCenter(marker), mapView); 
     c = mapView.getContext(); 
     m_overlays.add(new OverlayItem(point,hmtostring,nameaddress)); 
     populate(); 
    } 

    public GeoPoint getCenterPt() { 
     if (center == null) { 
      int northEdge = -90000000; 
      int southEdge = 90000000; 
      int eastEdge = -180000000; 
      int westEdge = 180000000; 
      Iterator<OverlayItem> iter = m_overlays.iterator(); 
      while (iter.hasNext()) { 
       GeoPoint pt = iter.next().getPoint(); 
       if (pt.getLatitudeE6() > northEdge) 
        northEdge = pt.getLatitudeE6(); 
       if (pt.getLatitudeE6() < southEdge) 
        southEdge = pt.getLatitudeE6(); 
       if (pt.getLongitudeE6() > eastEdge) 
        eastEdge = pt.getLongitudeE6(); 
       if (pt.getLongitudeE6() < westEdge) 
        westEdge = pt.getLongitudeE6(); 
      } 
      center = new GeoPoint((int) ((northEdge + southEdge)/2), 
        (int) ((westEdge + eastEdge)/2)); 
     } 
     return center; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { 
     if (!shadow) { 
     super.draw(canvas, mapView, shadow); 
     } 
     return false; 
    } 

    public void addOverlay(OverlayItem overlay) { 
     m_overlays.add(overlay); 
     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return m_overlays.get(i); 
    } 

    @Override 
    public int size() { 
     return m_overlays.size(); 
    } 

    @Override 
    protected boolean onBalloonTap(int index) { 
     return true; 
    }  
} 

回答

0

我刚刚经历过这个自己。为你的具体情况定义一个新的OverlayItem(而不是MyItemizedOverlay),然后将其添加到MyItemizedOverlay。

对于你的情况,它会是这样的。

​​

之前,请务必 调用MapView.getOverlays()以将上述行添加(funPlaces)。

希望有所帮助。如果我错过了某些东西或者有其他问题,请告诉我。

相关问题