简体   繁体   English

如何在Google地图上从用户位置到用户选择的项目叠加层进行路线/导航?

[英]how to make a route/navigation on google-maps from where user location to an itemoverlay that user pick?

i'm confuse, how to make an action to make a route/navigation from user location to the pin overlay(google places) that user pick/tap the pin overlay. 我很困惑,如何做一个动作来使从用户位置到针脚叠层(谷歌的地方)的路线/导航用户选择/点击针脚叠层。 this's my map activity that will show my map. 这是我的地图活动,将显示我的地图。

public class PlacesMapActivity extends MapActivity {
// Nearest places
PlacesList nearPlaces;

// Map view
MapView mapView;

// Map overlay items
List<Overlay> mapOverlays;

AddItemizedOverlay itemizedOverlay;

GeoPoint geoPoint;
// Map controllers
MapController mc;

double latitude;
double longitude;
OverlayItem overlayitem;

private Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_places);

    // Getting intent data
    Intent i = getIntent();

    // Users current geo location
    String user_latitude = i.getStringExtra("user_latitude");
    String user_longitude = i.getStringExtra("user_longitude");

    // Nearplaces list
    nearPlaces = (PlacesList) i.getSerializableExtra("near_places");

    mapView = (MapView) findViewById(R.id.mapView);
    mapView.setBuiltInZoomControls(true);

    mapOverlays = mapView.getOverlays();

    // Geopoint to place on map
    geoPoint = new GeoPoint((int) (Double.parseDouble(user_latitude) * 1E6),
            (int) (Double.parseDouble(user_longitude) * 1E6));

    // Drawable marker icon
    Drawable drawable_user = this.getResources()
            .getDrawable(R.drawable.mark_red);

    itemizedOverlay = new AddItemizedOverlay(drawable_user, this);

    // Map overlay item
    overlayitem = new OverlayItem(geoPoint, "Your Location",
            "That is you!");

    itemizedOverlay.addOverlay(overlayitem);

    mapOverlays.add(itemizedOverlay);
    itemizedOverlay.populateNow();

    // Drawable marker icon
    Drawable drawable = this.getResources()
            .getDrawable(R.drawable.mark_blue);

    itemizedOverlay = new AddItemizedOverlay(drawable, this);


    mc = mapView.getController();       


    // These values are used to get map boundary area
    // The area where you can see all the markers on screen
    int minLat = Integer.MAX_VALUE;
    int minLong = Integer.MAX_VALUE;
    int maxLat = Integer.MIN_VALUE;
    int maxLong = Integer.MIN_VALUE;


    // check for null in case it is null
    if (nearPlaces.results != null) {
        // loop through all the places
        for (Place place : nearPlaces.results) {
            latitude = place.geometry.location.lat; // latitude
            longitude = place.geometry.location.lng; // longitude

            // Geopoint to place on map
            geoPoint = new GeoPoint((int) (latitude * 1E6),
                    (int) (longitude * 1E6));

            // Map overlay item
            overlayitem = new OverlayItem(geoPoint, place.name,
                    place.vicinity);

            itemizedOverlay.addOverlay(overlayitem);


            // calculating map boundary area
            minLat  = (int) Math.min( geoPoint.getLatitudeE6(), minLat );
            minLong = (int) Math.min( geoPoint.getLongitudeE6(), minLong);
            maxLat  = (int) Math.max( geoPoint.getLatitudeE6(), maxLat );
            maxLong = (int) Math.max( geoPoint.getLongitudeE6(), maxLong );
        }
        mapOverlays.add(itemizedOverlay);

        // showing all overlay items
        itemizedOverlay.populateNow();
    }


    // Adjusting the zoom level so that you can see all the markers on map
    mapView.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));

    // Showing the center of the map
    mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
    mapView.postInvalidate();
}


@Override
protected boolean isRouteDisplayed() {
    return false;
}

} }

and this's my itemoverlay that show a pin on map. 这是我的itemoverlay,在地图上显示了图钉。

public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

   private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

   private Context context;

   public AddItemizedOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
   }

   public AddItemizedOverlay(Drawable defaultMarker, Context context) {
        this(defaultMarker);
        this.context = context;
   }

   @Override
   public boolean onTouchEvent(MotionEvent event, MapView mapView)
   {   

       if (event.getAction() == 1) {
           GeoPoint geopoint = mapView.getProjection().fromPixels(
               (int) event.getX(),
               (int) event.getY());
           // latitude
           double lat = geopoint.getLatitudeE6() / 1E6;
           // longitude
           double lon = geopoint.getLongitudeE6() / 1E6;
           //Toast.makeText(context, "Lat: " + lat + ", Lon: "+lon, Toast.LENGTH_SHORT).show();
       }
       return false;
   } 

   @Override
   protected OverlayItem createItem(int i) {
      return mapOverlays.get(i);
   }

   @Override
   public int size() {
      return mapOverlays.size();
   }

   @Override
   protected boolean onTap(int index) {
     OverlayItem item = mapOverlays.get(index);
     AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
     dialog.setTitle(item.getTitle());
     dialog.setMessage(item.getSnippet());
     dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });
     dialog.show();
     return true;
   }

   public void addOverlay(OverlayItem overlay) {
      mapOverlays.add(overlay);
   }

   public void populateNow(){
       this.populate();
   }

}

please give me your opinion. 请给我您的意见。

use "mapController" class's function animateTo(your_desired_point). 使用“ mapController”类的函数animateTo(your_desired_point)。 Use it in your AddItemizedOverlay class in onTap(). 在onTap()的AddItemizedOverlay类中使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM