2012-04-24 3 views
0

안녕하세요. 모든 마커가 수백 개의 Markers가있는 Google지도가 포함 된 Android 애플리케이션을 사용하고 있습니다. 여기 내 모든 마커를 Map.But에 표시 할 수 있습니다. 최대 줌 레벨로 Google지도에서 처음 5 개의 마커 만 표시해야합니다. 위도와 경도가 현재 5 개의 마커를 표시하는 마커에 면제됩니다.이 요구 사항은 수천 개의 마커가있는 경우 흐려 집니다 . 내 코드는 아래에있다.GoogleMap Android에서 처음 다섯 개의 마커를 표시하는 방법

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

모든 제안은 크게 감사하고 있습니다.

감사 & 감사합니다,

벤 카트

가 단지 처음 다섯 그리기, 만 나는 단지 처음 다섯 그리기에 대해 잘 모릅니다 최초의 5를 추가하는 사이에 차이가 있지만 5를 추가

답변

0

변경을 확인 할 알면 필요하므로 분명히, 이것은 문제가 발생할 수

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

, 변경할 수 없습니다 pinret < mpDt.size()pinret < 5? mpDt 미만 5 개 항목이 포함 된 경우

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

이 일부 경계가이

관련 문제