Show routes between multiple points on Google Maps

前端 未结 3 1866
滥情空心
滥情空心 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:43

    i found a simpler solution.I can use google maps intent directly, and i don't need to create a custom map activity anymore:

    if(DataSources.ActivitiesList.length >0)
    {
      String address = "http://maps.google.com/maps?daddr=" +    DataSources.ActivitiesList[0].SiteLatitude.toString() + "," + DataSources.ActivitiesList[0].SiteLongitude.toString();
    for (int i= 1 ;i <  DataSources.ActivitiesList.length ; i++) 
    {
        if(DataSources.ActivitiesList[i].SiteLatitude != null)
            address += "+to:" + DataSources.ActivitiesList[i].SiteLatitude + "," + DataSources.ActivitiesList[i].SiteLongitude;
    }
    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(address));
        startActivity(intent);
        break;      
    }
    
    0 讨论(0)
  • 2020-12-22 08:53

    This link have tutorial to draw route path on map in our app. this may help you and use below to link with map app... this will take to you in google map application

    String uri = "http://maps.google.com/maps?f=d&hl=en&saddr="+source_latitude+","+source_longitude+"&daddr="+destination_latitude+","+destination_longitude;
    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
    intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
    startActivity(intent);
    

    OR

    refter this link how to display the driving routes

    0 讨论(0)
  • 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<Overlay> 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<GeoPoint> mPoints;
    
            public MapOverlay(Road road, MapView mv) {
                    mRoad = road;
                    if (road.mRoute.length > 0) {
                            mPoints = new ArrayList<GeoPoint>();
                            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
    
    0 讨论(0)
提交回复
热议问题