2012-04-11 11 views
6

Oggi non vedo l'ora di utilizzare PathOverlay in OSMDroid.OSMDroid PathOverlay

Non riesco a trovare alcuna spiegazione su come funziona.

Ho bisogno di creare un percorso suggerito (non come il sistema di navigazione), solo un tratto che inizia in un punto, fa un "circuito" e poi torna al punto di partenza.

Proprio come questo (disegnato in google maps):

Circuit

Sono qui per chiedere qual è il modo corretto per fare questo, specificare un percorso personalizzato, fare i giri che voglio.

Grazie!

risposta

29

Disegnerà una serie di linee rette per te in cima alla mappa, quindi è necessario conoscere la latitudine e la longitudine di tutti i raccordi stradali (e ovunque si pieghino da una linea retta). Aggiungi tutti questi punti alla sovrapposizione. Ad esempio, questo codice disegnerà una casella rettangolare nel centro di Londra.

public class OsmdroidDemoMap extends Activity { 

    private MapView mMapView; 
    private MapController mMapController; 
    int mIncr = 10000; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.osm_main); 
     mMapView = (MapView) findViewById(R.id.mapview); 
     mMapView.setTileSource(TileSourceFactory.MAPNIK); 
     mMapView.setBuiltInZoomControls(true); 
     mMapView.setMultiTouchControls(true); 
     mMapController = mMapView.getController(); 
     mMapController.setZoom(13); 
     GeoPoint gPt0 = new GeoPoint(51500000, -150000); 
     GeoPoint gPt1 = new GeoPoint(gPt0.getLatitudeE6()+ mIncr, gPt0.getLongitudeE6()); 
     GeoPoint gPt2 = new GeoPoint(gPt0.getLatitudeE6()+ mIncr, gPt0.getLongitudeE6() + mIncr); 
     GeoPoint gPt3 = new GeoPoint(gPt0.getLatitudeE6(), gPt0.getLongitudeE6() + mIncr); 
     mMapController.setCenter(gPt0); 
     PathOverlay myPath = new PathOverlay(Color.RED, this); 
     myPath.addPoint(gPt0); 
     myPath.addPoint(gPt1); 
     myPath.addPoint(gPt2); 
     myPath.addPoint(gPt3); 
     myPath.addPoint(gPt0); 
     mMapView.getOverlays().add(myPath); 
    } 
} 

.

+0

Dobbiamo aggiungere un GeoPoint su ogni singolo turno vogliamo fare? – silentw

+1

Sì, disegna solo linee rette, quindi ogni leggera curva richiederà un nuovo punto. – NickT

+0

Hmm, ok. La ringrazio per la risposta! – silentw

4

Ecco il tutorial come disegnare la strada con Polilinea in OSMBonusPack: https://github.com/MKergall/osmbonuspack/wiki/Tutorial_1

E 'abbastanza facile e ho utilizzato con successo questo nella mia app.

Il mio codice sulla base di tale esercitazione sta cercando in questo modo:

RoadManager roadManager = new OSRMRoadManager(); 

    ArrayList<GeoPoint> track = new ArrayList<>(); 
    // TODO: Fill the list with your track points 

    Road road = roadManager.getRoad(track); 
    Polyline roadOverlay = RoadManager.buildRoadOverlay(road, context); 
    mapView.getOverlays().add(roadOverlay); 
    mapView.invalidate(); 
+0

Aggiunto il mio esempio di codice basato sul link tutorial –

+0

cool - grazie :-) – kleopatra

Problemi correlati