2012-04-11 9 views
6

Hoy estoy deseando saber cómo usar PathOverlay en OSMDroid.OSMDroid PathOverlay

No puedo encontrar ninguna explicación de cómo funciona.

Necesito crear una ruta sugerida (no como el sistema de navegación), solo un trazo comenzando en un punto, hacer un "circuito" y luego regresar al punto de partida.

Al igual que este (dibujado en los mapas de Google):

Circuit

estoy aquí para pedir cuál es la forma correcta de hacer esto, especificando una ruta personalizada, haciendo las vueltas que quiera.

Gracias!

Respuesta

29

Dibujará una serie de líneas rectas para usted en la parte superior del mapa, por lo que necesita saber la latitud y la longitud de todos los cruces de carreteras (y en cualquier lugar donde se desvíen de una línea recta). Agregue todos estos puntos a la superposición. Como ejemplo, este código dibujará un cuadro rectangular en el centro de Londres.

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

¿Hay que añadir un GeoPoint en todos y cada uno a su vez queremos hacer? – silentw

+1

Sí, solo dibuja líneas rectas, por lo que cada curva pequeña necesitará un nuevo punto. – NickT

+0

Hmm, está bien. ¡Gracias por su respuesta! – silentw

4

Aquí está el tutorial de cómo dibujar el camino con polilínea en OSMBonusPack: https://github.com/MKergall/osmbonuspack/wiki/Tutorial_1

Es bastante fácil y he utilizado con éxito esta en mi aplicación.

Mi código basado en ese tutorial está buscando de esta manera:

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

Agregué mi ejemplo de código basado en el enlace del tutorial –

+0

genial - gracias :-) – kleopatra