0

当启动谷歌地图时,我将注意力集中在地图上的一个点上:

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

如果我使用mapView.getController().animateTo(destGeoPoint); 地图只关注点destGeoPoint。我希望地图显示 2 点:srcGeoPoint 以及destGeoPoint何时启动谷歌地图。这2点已经绘制在地图上。我想在地图打开时看到 2 点。

4

2 回答 2

1

创建你的 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;
    }
}

这是一个启动地图的方法:

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

和 addPointInTheMap 方法:

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();
    }   
于 2012-10-10T12:31:35.873 回答
0

尝试阅读 Android Cookbook 中的位置和地图应用程序章节。主要思想是向您的 MapActivity 添加一个内部类,该类扩展 ItemizedOverlay 并实现抽象方法和默认构造函数。ItemizedOverlay 使用您的 createItem 和 size() 方法的实现来获取您的实现中的所有覆盖项并进行聚合。

在此处输入图像描述

于 2012-10-10T12:18:44.137 回答