mum
mum

Reputation: 1645

How show multiple points on Google map?

When start Google Maps,I focus to a point on map as:

GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6), (int) (src_long * 1E6));    
GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6), (int) (dest_long * 1E6));       
DrawPath(srcGeoPoint, destGeoPoint, Color.BLUE, mapView);        
mapView.getController().animateTo(destGeoPoint);

If I use mapView.getController().animateTo(destGeoPoint); the map only focuses to point destGeoPoint. I want Map to show 2 points: srcGeoPoint and destGeoPoint when start Google Map. This 2 point had draw on Map. I want to can see 2 point when map open.

Upvotes: 0

Views: 1335

Answers (2)

moskis
moskis

Reputation: 1156

Create your mapOverlay:

public class MapOverlay extends Overlay {
    MapView mapView; 
    GeoPoint p;
    private Context c;

    public MapOverlay(Context c, MapView m, GeoPoint p){
        this.c=c;
        mapView=m;
        this.p=p;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow);                   

        //---translate the GeoPoint to screen pixels---
        Point screenPts = new Point();
        mapView.getProjection().toPixels(p, screenPts);

        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(c.getResources(), R.drawable.icon_notif);            
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
        return true;
    }
}

This is a method that starts the map:

private void initMapa() {
    try{
        //If you want zoom controls
        mapa.setBuiltInZoomControls(true);


        GeoPoint loc;
        Double lat;
        Double long;

        MapController controlMapa = mapa.getController();
        controlMapa.setZoom(13); // de 1 a 21

        mapa.setSatellite(true);
        mapa.displayZoomControls(true);


        // First point
        ArrayList<GeoPoint> ap=new ArrayList<GeoPoint>();
        latitud = (double) lat1 *1E6;
        longitud = (double) long1 *1E6;
        loc = new GeoPoint(latitud.intValue(), longitud.intValue());
        controlMapa.animateTo(loc);
        ap.add(loc);


        // Second point
    latitud = (double) fichaOtraPersona.getLoc_lan()*1E6;
    longitud = (double) fichaOtraPersona.getLoc_lon()*1E6;
    loc = new GeoPoint(latitud.intValue(), longitud.intValue());
    ap.add(loc);

        controlMapa.animateTo(loc);
        addPointInTheMap(ap);
    } catch (Exception e) {
        showToast("Error");
    }
}

And the addPointInTheMap method:

private void anadirPuntoEnMapa(ArrayList<GeoPoint> points){
        //---Add a location marker---

        List<Overlay> listOfOverlays = mapa.getOverlays();
        listOfOverlays.clear();

        Iterator<GeoPoint> it=points.iterator();
        while (it.hasNext()){
            MapOverlay mapOverlay = new MapOverlay(getApplicationContext(), mapa, it.next());
            listOfOverlays.add(mapOverlay);   
        }

        mapa.invalidate();
    }   

Upvotes: 1

K_Anas
K_Anas

Reputation: 31466

Try to read the Location and Map Applications Chapter from the Android Cookbook. The main idea is to add an inner class to your MapActivity which extends ItemizedOverlay and implement the abstract methods and the default constructor. The ItemizedOverlay uses your implementations of the createItem and size() methods to get hold of all the overlay items in your implementation and do the aggregation.

enter image description here

Upvotes: 0

Related Questions