如何在Google Map Android中仅显示前五个标记

时间:2012-04-24 12:41:46

标签: android google-maps google-maps-markers

嗨,我的每个人都在使用一个Android应用程序,其中包含一个包含数百个Markers的Google Map.Here我能够在地图上显示所有标记。但在这里我的要求是我必须只显示谷歌中的前五个标记具有最大缩放级别的地图。对于其纬度和经度介于显示五个标记的当前标记之间的标记是免除的。这个要求是因为如果有数千个标记,则地图变为混浊。下面是我的代码。

public void displayMapView(final Vector<MapData> retVector){

  mapOverlays=mapView.getOverlays();
  Drawable marker = getResources().getDrawable(R.drawable.map_pin);
  marker.setBounds((int) (-marker.getIntrinsicWidth() / 2),-marker.getIntrinsicHeight(),(int) (marker.getIntrinsicWidth() / 2), 0);
  funPlaces = new MyItemizedOverlay(marker,mapView);
  mapView.getOverlays().add(funPlaces);
  GeoPoint pt = funPlaces.getCenterPt();
  int latSpan=funPlaces.getLatSpanE6();
  int longSpan=funPlaces.getLonSpanE6();
  mc=mapView.getController();
  mc.setCenter(pt);
  mc.zoomToSpan((int)(latSpan*1.5),(int)(longSpan*1.5));
  //mc.zoomToSpan((int)(minLatitude-maxLatitude),(int)(minLatitude-maxLatitude));

}

@Override
protected boolean isLocationDisplayed(){
  return false;
}

@Override
protected boolean isRouteDisplayed(){
  return false;
}

public class MyItemizedOverlay extends BalloonItemizedOverlay<OverlayItem> {
  private ArrayList<OverlayItem> m_overlays = new ArrayList<OverlayItem>();
  @SuppressWarnings("unused")
  private Context c;
  private GeoPoint center = null;   
  public MyItemizedOverlay(Drawable marker,MapView mapView){
    super(boundCenter(marker),mapView);
    c = mapView.getContext();
    try{
        String name="",cusine="",distance="",price="",popUpDataNew="";
        for(int pinret=0;pinret<mpDt.size();pinret++){
          MapData retMapData=(MapData)mpDt.get(pinret);
          resId=retMapData.getId();
          name=retMapData.getName();
          cusine=retMapData.getCusine();
          distance=retMapData.getDistance();
          price=retMapData.getPrice();
          popUpDataNew=name+"/"+cusine+"/"+distance+"/"+price;
          try{
            double lat=Double.parseDouble(retMapData.getLatitude());
            double lon=Double.parseDouble(retMapData.getLongitude());
            GeoPoint pointNew= new GeoPoint((int)(lat*1E6),(int)(lon*1E6)); 
            m_overlays.add(new OverlayItem(pointNew,popUpDataNew,resId));
            populate();
          }catch(NumberFormatException nfe){
           nfe.printStackTrace();
          }
        }
       }catch(Exception e){
         e.printStackTrace();
       }    
  }
  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;
  }

非常感谢任何建议。

感谢和安培;问候,

Venkat

2 个答案:

答案 0 :(得分:1)

仅绘制前五个,只添加前五个之间有区别。我不知道只绘制前五个,但只添加5个,不能将pinret < mpDt.size()更改为{{1} }?显然,如果mpDt包含少于5个项目,这可能会导致问题,因此您需要进行一些边界检查

答案 1 :(得分:0)

使用

更改此设置
 for(int pinret=0;pinret<mpDt.size();pinret++){ 
}

此,

 int size = mpDt.size();
 if(size > 5)
    size =5 ;
 for(int pinret=0;pinret<size;pinret++){ 
}