Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在谷歌地图上显示多个点?_Android_Google Maps - Fatal编程技术网

Android 如何在谷歌地图上显示多个点?

Android 如何在谷歌地图上显示多个点?,android,google-maps,Android,Google Maps,启动Google Maps时,我关注地图上的一个点,如下所示: 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,

启动Google Maps时,我关注地图上的一个点,如下所示:

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
。 我希望地图在启动谷歌地图时显示两个点:
srcGeoPoint
destGeoPoint
。 这两点在地图上已经画好了。我想在地图打开时看到两点。

试着阅读Android烹饪书中的章节。其主要思想是向MapActivity添加一个内部类,该类扩展ItemizeOverlay并实现抽象方法和默认构造函数。ItemIzeOverlay使用createItem和size()方法的实现来获取实现中的所有覆盖项并进行聚合


创建地图覆盖:

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");
    }
}
private void initMapa(){
试一试{
//如果您想要缩放控件
mapa.SetBuilTinZoomControl(真);
地质点定位;
双lat;
双倍长;
MapController controlMapa=mapa.getController();
controlMapa.setZoom(13);//de 1 a 21
mapa.setSatellite(真);
mapa.DisplayZoomControl(真);
//第一点
ArrayList ap=新的ArrayList();
纬度=(双)纬度1*1E6;
longitud=(双)long1*1E6;
loc=新的地质点(latitud.intValue(),longitud.intValue());
controlMapa.animateTo(loc);
ap.add(loc);
//第二点
latitud=(双)fichaotraperona.getLoc_lan()*1E6;
longitud=(双)fichaotraperona.getLoc_lon()*1E6;
loc=新的地质点(latitud.intValue(),longitud.intValue());
ap.add(loc);
controlMapa.animateTo(loc);
addPointInTheMap(ap);
}捕获(例外e){
showtoost(“错误”);
}
}
以及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();
    }   
private void anadirpuntonempa(数组列表点){
//---添加位置标记---
List listOfOverlays=mapa.getOverlays();
listOfOverlays.clear();
迭代器it=points.Iterator();
while(it.hasNext()){
MapOverlay MapOverlay=新的MapOverlay(getApplicationContext(),mapa,it.next());
添加(映射覆盖);
}
mapa.invalidate();
}   

我今天刚刚回答了类似的问题,我的问题是缩放地图可以在开始地图时显示2个点。(这2个点已经绘制)