2012-04-11 19 views
6

Heute freue ich mich auf die Verwendung von PathOverlay in OSMDroid.OSMDroid PathOverlay

Ich kann keine Erklärung finden, wie es funktioniert.

Ich muss eine vorgeschlagene Route erstellen (nicht wie Navigationssystem), nur einen Strich an einem Punkt beginnen, eine "Schaltung" machen und dann zum Ausgangspunkt zurückkehren.

Genau wie diese (gezeichnet in Google Maps):

Circuit

Ich bin hier zu fragen, was ist der richtige Weg, dies zu tun, einen benutzerdefinierten Pfad angeben, die Windungen zu tun was ich will.

Danke!

Antwort

29

Es wird eine Reihe von geraden Linien für Sie oben auf der Karte zeichnen, so dass Sie die Breite und Länge aller Ihrer Kreuzungen wissen müssen (und überall, wo sie sich von einer geraden Linie wegbiegen). Fügen Sie alle diese Punkte dem Overlay hinzu. Als Beispiel wird dieser Code eine rechteckige Box in London zeichnen.

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

Haben wir eine GeoPoint auf jeder einzelnen Umdrehung wir möchten hinzufügen müssen? – silentw

+1

Ja, es zeichnet nur gerade Linien, so dass jede leichte Biegung einen neuen Punkt benötigt. – NickT

+0

Hmm, okay. Vielen Dank für Ihre Antwort! – silentw

4

Hier ist das Tutorial, wie man die Straße mit Linienzug in OSMBonusPack ziehen: https://github.com/MKergall/osmbonuspack/wiki/Tutorial_1

Es ist ziemlich einfach, und ich habe erfolgreich in meinem App verwendet.

Mein Code auf diesem Tutorial basiert wie folgt aussehen:

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

Mein Codebeispiel hinzugefügt, das auf dem Tutoriallink basiert –

+0

cool - danke :-) – kleopatra

Verwandte Themen