2012-04-24 7 views
0

こんにちは、すべてのマーカーはMap.Butここに私の要件は私が私には何百ものMarkers.Here私はすべてのマーカーを表示することができるGoogleマップを含むAndroidアプリケーションで働いている最大ズームレベルでGoogleマップに最初の5つのマーカーのみを表示する必要があります。これは現在の5つのマーカーを示す現在の緯度と経度の間にあるマーカーの免除です。この要件は何千ものマーカーがある場合、 。下は私のコードです。GoogleMap Androidの最初の5つのマーカーを表示する方法

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

任意の提案を大幅に高く評価されています。

おかげ&よろしく、

ヴェンカト

答えて

0

変更をチェック行うためにyoullの必要があるので、明らかに、これは、問題を引き起こす可能性があり

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

ちょうど最初の5を描き、そして唯一の私は、最初の5つの描画について知っているが、わずかに5を追加していけない最初の5を追加することには違いがあります、あなたはpinret < mpDt.size()pinret < 5に変更できませんでしたか? mpDtが5つの未満の項目が含まれている場合は

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

これでいくつかの境界がこの

関連する問題