こんにちは、すべてのマーカーは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;
}
任意の提案を大幅に高く評価されています。
おかげ&よろしく、
ヴェンカト