0

Googleマップを起動すると、次のようにマップ上のポイントに焦点を合わせます:

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 そしてdestGeoPointGoogleマップを起動したとき。この 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のLocation and Map Applicationsの章を読んでみてください。主なアイデアは、ItemizedOverlay を拡張し、抽象メソッドとデフォルト コンストラクターを実装する MapActivity に内部クラスを追加することです。ItemizedOverlay は、createItem および size() メソッドの実装を使用して、実装内のすべてのオーバーレイ アイテムを取得し、集計を行います。

ここに画像の説明を入力

于 2012-10-10T12:18:44.137 に答える