Show routes between multiple points on Google Maps

前端 未结 3 1876
滥情空心
滥情空心 2020-12-22 08:29

I\'ve created my own custom map to show my current location and multiple points on map. it works fine,but now i would like to show a route from my current location to every

3条回答
  •  离开以前
    2020-12-22 08:58

    package org.ci.geo.route.android;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.ci.geo.route.Road;
    import org.ci.geo.route.RoadProvider;
    
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Point;
    import android.graphics.Bitmap.Config;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapController;
    import com.google.android.maps.MapView;
    import com.google.android.maps.Overlay;
    
    public class MapRouteActivity extends MapActivity {
    
            LinearLayout linearLayout;
            MapView mapView;
            private Road mRoad;
    
            @Override
            public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                    mapView = (MapView) findViewById(R.id.mapview);
                    mapView.setBuiltInZoomControls(true);
    
                    new Thread() {
                            @Override
                            public void run() {
                                    double fromLat = 49.85, fromLon = 24.016667, toLat = 50.45, toLon = 30.523333;
                                    String url = RoadProvider
                                                    .getUrl(fromLat, fromLon, toLat, toLon);
                                    InputStream is = getConnection(url);
                                    mRoad = RoadProvider.getRoute(is);
                                    mHandler.sendEmptyMessage(0);
                            }
                    }.start();
            }
    
            Handler mHandler = new Handler() {
                    public void handleMessage(android.os.Message msg) {
                            TextView textView = (TextView) findViewById(R.id.description);
                            textView.setText(mRoad.mName + " " + mRoad.mDescription);
                            MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                            List listOfOverlays = mapView.getOverlays();
                            listOfOverlays.clear();
                            listOfOverlays.add(mapOverlay);
                            mapView.invalidate();
                    };
            };
    
            private InputStream getConnection(String url) {
                    InputStream is = null;
                    try {
                            URLConnection conn = new URL(url).openConnection();
                            is = conn.getInputStream();
                    } catch (MalformedURLException e) {
                            e.printStackTrace();
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
                    return is;
            }
    
            @Override
            protected boolean isRouteDisplayed() {
                    return false;
            }
    }
    
    class MapOverlay extends com.google.android.maps.Overlay {
            Road mRoad;
            ArrayList mPoints;
    
            public MapOverlay(Road road, MapView mv) {
                    mRoad = road;
                    if (road.mRoute.length > 0) {
                            mPoints = new ArrayList();
                            for (int i = 0; i < road.mRoute.length; i++) {
                                    mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                    (int) (road.mRoute[i][0] * 1000000)));
                            }
                            int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                            mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                            .getLatitudeE6()) / 2);
                            int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                            mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                            .getLongitudeE6()) / 2);
                            GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);
    
                            MapController mapController = mv.getController();
                            mapController.animateTo(moveTo);
                            mapController.setZoom(7);
                    }
            }
    
            @Override
            public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                    super.draw(canvas, mv, shadow);
                    drawPath(mv, canvas);
                    return true;
            }
    
            public void drawPath(MapView mv, Canvas canvas) {
                    int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                    Paint paint = new Paint();
                    paint.setColor(Color.GREEN);
                    paint.setStyle(Paint.Style.STROKE);
                    paint.setStrokeWidth(3);
                    for (int i = 0; i < mPoints.size(); i++) {
                            Point point = new Point();
                            mv.getProjection().toPixels(mPoints.get(i), point);
                            x2 = point.x;
                            y2 = point.y;
                            if (i > 0) {
                                    canvas.drawLine(x1, y1, x2, y2, paint);
                            }
                            x1 = x2;
                            y1 = y2;
                    }
            }
    }
    
    
    http://code.google.com/p/j2memaprouteprovider/source/browse/trunk/J2MEMapRouteAndroidEx/src/org/ci/geo/route/android/MapRouteActivity.java
    

提交回复
热议问题