안녕하세요. 모든 마커가 수백 개의 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를 추가