Перетащите полилинию вместе с маркером в openstreetmap? - PullRequest
0 голосов
/ 21 мая 2018

В настоящее время я разрабатываю приложение для Android, которое позволит пользователям рисовать Polylines с помощью Markers или указывать на полилинии, когда пользователь долго нажимает на точки, как перетаскивать линию с помощью точек, а линия будет перемещаться на карте.как мне добиться этого, я перетаскиваю маркер, но не могу переместить маркер

public class MainMapActivity extends AppCompatActivity {

GeoPoint startPoint;
MapView map;
Road road;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_map);
    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);
    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);
    GpsTracking gps=new GpsTracking(MainMapActivity.this);
    if (gps.canGetLocation()) {
        double latitude = gps.getLatitude();
        double longitude = gps.getLongitude();
        startPoint = new GeoPoint(latitude, longitude);
        Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
    } else {
        gps.showSettingsAlert();
    }

  //  GeoPoint startPoint = new GeoPoint(48.13, -1.63);
    IMapController mapController = map.getController();
    mapController.setZoom(17);
    mapController.setCenter(startPoint);

    Marker startMarker = new Marker(map);
    startMarker.setPosition(startPoint);
    startMarker.setDraggable(true);
    startMarker.setOnMarkerDragListener(new OnMarkerDragListenerDrawer());
    startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    map.getOverlays().add(startMarker);


    //Set-up your start and end points:
    RoadManager roadManager = new OSRMRoadManager(this);
    ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
    waypoints.add(startPoint);
    GeoPoint endPoint = new GeoPoint(31.382108, 74.260107);
    waypoints.add(endPoint);

    // retreive the road between those points:
    Road road = roadManager.getRoad(waypoints);

    // build a Polyline with the route shape:
    Polyline polyline=new Polyline();
    polyline.setOnClickListener(new Polyline.OnClickListener() {
        @Override
        public boolean onClick(Polyline polyline, MapView mapView, GeoPoint eventPos) {
            return false;
        }
    });
    Polyline roadOverlay = RoadManager.buildRoadOverlay(road);

    //Polyline to the overlays of your map:
    map.getOverlays().add(roadOverlay);

    //Refresh the map!
    map.invalidate();
   //3. Showing the Route steps on the map
    FolderOverlay roadMarkers = new FolderOverlay();
    map.getOverlays().add(roadMarkers);
    Drawable nodeIcon = ResourcesCompat.getDrawable(getResources(), R.drawable.marker_node, null);
    for (int i = 0; i < road.mNodes.size(); i++) {
        RoadNode node = road.mNodes.get(i);
        Marker nodeMarker = new Marker(map);
        nodeMarker.setDraggable(true);
        nodeMarker.setOnMarkerDragListener(new OnMarkerDragListenerDrawer());
        nodeMarker.setPosition(node.mLocation);
        nodeMarker.setIcon(nodeIcon);

        //4. Filling the bubbles
        nodeMarker.setTitle("Step " + i);
        nodeMarker.setSnippet(node.mInstructions);
        nodeMarker.setSubDescription(Road.getLengthDurationText(this, node.mLength, node.mDuration));
        Drawable iconContinue = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_continue, null);
        nodeMarker.setImage(iconContinue);
        //4. end

        roadMarkers.add(nodeMarker);
    }
}


class OnMarkerDragListenerDrawer implements Marker.OnMarkerDragListener {
    ArrayList<GeoPoint> mTrace;
    Polyline mPolyline;

    OnMarkerDragListenerDrawer() {
        mTrace = new ArrayList<GeoPoint>(100);
        mPolyline = new Polyline();
        mPolyline.setColor(0xAA0000FF);
        mPolyline.setWidth(2.0f);
        mPolyline.setGeodesic(true);
        map.getOverlays().add(mPolyline);
    }

    @Override public void onMarkerDrag(Marker marker) {
        //mTrace.add(marker.getPosition());
    }

    @Override public void onMarkerDragEnd(Marker marker) {
        mTrace.add(marker.getPosition());
        mPolyline.setPoints(mTrace);
        map.invalidate();
    }

    @Override public void onMarkerDragStart(Marker marker) {
        //mTrace.add(marker.getPosition());
    }
}

}

Кто-нибудь знает, как мне этого добиться?выше приведен фрагмент моих кодов.Спасибо!

...