Android 在openstreetmap中沿标记拖动多段线?

Android 在openstreetmap中沿标记拖动多段线?,android,google-maps,google-maps-api-3,openstreetmap,osmdroid,Android,Google Maps,Google Maps Api 3,Openstreetmap,Osmdroid,我目前正在开发一个android应用程序,它允许用户使用标记绘制多段线,或者在用户长按点时绘制多段线中的点。当用户长按点时,如何使用点拖动线移动地图上的线也将移动。如何实现这一点我拖动标记但不能移动标记 public class MainMapActivity extends AppCompatActivity { GeoPoint startPoint; MapView map; Road road; @Override protected void onCreate(Bundle save

我目前正在开发一个android应用程序,它允许用户使用
标记绘制
多段线
,或者在用户长按点时绘制多段线中的点。当用户长按点时,如何使用点拖动线移动地图上的线也将移动。如何实现这一点我拖动标记但不能移动标记

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());
    }
}

}
公共类MainMapActivity扩展了AppCompative活动{
地点起点;
地图视图;
道路;;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u main\u map);
map=(MapView)findviewbyd(R.id.map);
map.setTileSource(TileSourceFactory.MAPNIK);
map.setBuiltInZoomControls(真);
map.setMultiTouchControls(真);
GpsTracking gps=新的GpsTracking(MainMapActivity.this);
if(gps.canGetLocation()){
双纬度=gps.getLatitude();
double longitude=gps.getLongitude();
起始点=新的地质点(纬度、经度);
Toast.makeText(getApplicationContext(),“您的位置是-\nLat:“+纬度+”\nLong:“+经度,Toast.LENGTH\u LONG).show();
}否则{
gps.showSettingsAlert();
}
//地质点起始点=新的地质点(48.13,-1.63);
IMapController mapController=map.getController();
mapController.setZoom(17);
mapController.setCenter(startPoint);
Marker startMarker=新标记(地图);
startMarker.setPosition(起始点);
startMarker.SetDragable(真);
setOnMarkerDragListener(新的OnMarkerDragListenerDrawer());
startMarker.setAnchor(Marker.ANCHOR\u中心,Marker.ANCHOR\u底部);
map.getOverlays().add(startMarker);
//设置起点和终点:
RoadManager RoadManager=新的OSRMRoadManager(本);
ArrayList航路点=新的ArrayList();
航路点。添加(起始点);
地质点端点=新的地质点(31.382108,74.260107);
航路点。添加(终点);
//返回这些点之间的道路:
Road Road=roadManager.getRoad(航路点);
//使用管线形状构建多段线:
多段线多段线=新多段线();
polyline.setOnClickListener(新的polyline.OnClickListener(){
@凌驾
公共布尔onClick(多段线、多段线、地图视图、地图视图、地质点事件位置){
返回false;
}
});
多段线道路覆盖=RoadManager.buildRoadOverlay(道路);
//地图覆盖的多段线:
map.getOverlays().add(道路覆盖);
//刷新地图!
map.invalidate();
//3.在地图上显示路线步骤
FolderOverlay道路标记=新建FolderOverlay();
map.getOverlays().add(道路标记);
Drawable nodeIcon=ResourcesCompat.getDrawable(getResources(),R.Drawable.marker_节点,null);
对于(int i=0;i
有人知道我怎样才能做到这一点吗?上面是我的代码片段。谢谢