2012-10-25 13 views
6

HintergrundWeg() - Smart-farbige Segmente

Ich bin eine Anwendung zu entwickeln, die einen Weg über eine Karte zeigt (Google Maps und Openstreet Karten). Faltenbalg ein Ausgabebeispiel:

Path

Um den obigen Pfad ich bin mit dem folgenden Ansatz zu zeichnen:

private void drawWithoutElevation(Canvas canvas, Projection projection){ 
    if(rebuildRequired) 
     pathBuild(); 
    else{ //check if path need to be offset 
     if(offsetRequired){ 
      path.offset(offset.x, offset.y); 
     } 
    } 
    canvas.drawPath(path, paint); 
} 

Der Ansatz oben dauert etwa 1,5 ms 10.000 Punkte zu zeichnen, was akzeptabel ist.

Allerdings möchte ich auch den Pfad mit verschiedenen Farben abhängig von der Punkthöhe zeigen. Bellow ein Ausgabebeispiel:

Path 2

Da ich keinen Weg finden konnte andere Farbe pro Pfadsegment zu definieren, habe ich folgende Ansätze versucht:

Ansatz 1

Die offensichtlichste Lösung ist die Verwendung eines canvas.drawLine() zwischen jedem Punkt im Pfad. Beispiel:

Dies ergibt eine sehr enttäuschende Zeit von etwa 80ms für die gleichen 10.000 Punkte.

Ansatz 2

Segment der Höhe in diskreten Schritten, und eine Liste von Objekten Path, einem pro Höhensegmentwechsel bauen. Codebeispiel unten:

Dies ergibt eine weniger enttäuschende Zeit von etwa 5 ms für die gleichen 10.000 Punkte.

Frage

Obwohl der letzte Ansatz eine deutliche Verbesserung zeigt, im Vergleich zu dem ersten, würde Ich mag es weiter zu verbessern.

Gibt es einen anderen Ansatz, mit dem der Pfad mit unterschiedlicher Farbe pro Segment effizienter gezeichnet werden kann (Geschwindigkeit und/oder Speichernutzung)?

Vielen Dank für Ihre Zeit und Ihre Hilfe.

+0

5ms führen kann, ist 200 fps. Sind Sie sicher, dass Sie die Leistung verbessern müssen? Wenn Sie möchten, dass es schneller läuft, weil Sie z. 100k Punkte, vielleicht ist es Zeit, die Anzahl der Punkte zu reduzieren, vorausgesetzt, es ist ein Smartphone-Bildschirm, kein 4K-Bildschirm? – 9000

+0

Dank @ 9000, Sie haben einen guten Punkt dort ... Der Treiber für den Versuch, es zu verbessern, ist, dass der Benutzer mehrere Pfade zur gleichen Zeit hinzufügen kann, neben einigen anderen Overlays (Kompass, Marker, aktuelle Position, etc.). Vielleicht muss ich damit leben :-) – Luis

Antwort

1

Schauen Sie sich die Quelle für MyTracks von Google, die bis zu einem gewissen Inspiration

Verwandte Themen