Hallo,
ich habe hier mehrere Logdateien mit GPS Daten.
Diese würde ich gerne in in einem Windows Form anzeigen.
Das ganze soll so ablaufen, daß ich erst eine Lufaufnahme in das Fenster lade und dann darüber die GPS Daten (gefahrene Strecke) zeichne.
Luftbild + Track sollten innerhalb der Form verschieb- und Zoombar sein.
Habe bereits erste Versuche mit der PictureBox angestellt. D.h. man kan ein Bild reinladen und ein wenig zoomen.
Allerdings is das ganze nicht wirklich befriedigend und ich weiß auch nicht, wie jetzt die gefahrene Strecke über das Bild zeichen kann.
Gibt es hier vielleicht schon fertige Lösungen oder könnt ihr mir Tips geben, wie man weiter vorgehen sollte?
Im Prinzip sollte das Endergebnis vergleichbar mit der Ansicht in z.B. Google Earth sein. Dort kann man mit Hilfe von .kml Dateien ebenfalls seine GPS Daten über der Karte darstellen.
Hoffe anichts vergessen zu haben und auch im richtigen Forum gelandet zu sein 😃
Gruß,
Peter
Hallo peterguy,
ich weiß auch nicht, wie jetzt die gefahrene Strecke über das Bild zeichen kann.
siehe [Artikel] Zeichnen in Windows-Programmen
herbivore
Hallo,
vom Grundkonzept würde ich es so anstellen.
Global definierten Zoomfaktor festlegen.
Bild Laden, ursprungsausmaße speichern.
Für die Pfade ne eigene Klasse erstellen(Nenne ich hier PfadObjekte).
Dort aus den GPS Daten nen Pfad erstellen.
PfadObjekte in Globale Liste packen
OnPaint überschreiben,
zuerst das Bild um den Zoomfaktor gestreckt zeichnen,
Liste mit den PfadObjekten auslesen, dann die jeweiligen Pfade gestreckt mit einer Matrix um den Zoomfaktor zeichnen lassen.
Als kleiner Tip, implementiere Double Buffer lieber gleich selbst, gibt sonst nen bößes Erwachen in hohen Zoomstufen.
Sone Standard gebufferte Bitmap kann dann schonmal 800 MB Groß werden ->Result: Out Of Memory Exception
Also nur das Buffern was auch zu sehen ist.
Der Rest ist ne Implementationssache, je nachdem wie die Bedienung des Programms ausfallen soll.
Wichtig: Komm gar nicht erst auf die Idee für diese PfadObjekte eigene Controls zu verwenden, sone Slideshow hast du noch nicht gesehen.
Ich spreche da aus Erfahrung.
Ich musste nehmlich erst kürzlich eine ganz ähnliche Problemstellung wie du sie hier beschreibst lösen.
Edit:
Double Buffer selbst implementiert:
http://www.bobpowell.net/doublebuffer.htm
gute erklärung. als ergänzung noch: [Artikel] Flackernde Controls und flackerndes Zeichnen vermeiden
[Tutorial] Gezeichnete Objekte mit der Maus verschieben
vor allem das 2. solltest du dir näher anschauen. das dort vorgestellte prinzip, wie man die modelldaten zeichnet ist für dich relevant.
Vielen Dank für die sehr hilfreichen Antworten, vor allem an Birne!
Wie in den Artikeln vorgeschlagen werde zwei übereinander liegende PictureBoxes nehmen, die obere davon transparent. In die untere zeichne ich die Karte, in die obere die Tracks. Später gibts dann noch evtl. eine dritte Box um zusätzliche Informationen einzublenden.
Beide Boxes sollen mit der Maus immer zusammen verschoben und gezoomt werde, um keine Abweichungen zu erhalten.
Da hätte ich gleich wieder ne Frage:
Ich vermute, dr beste Ansatz wäre hier, die Maus Event in der Form abzufangen, die Bewegung auszuwerten und die geänderten Offsets bzw. ZoomFaktoren an beide PictureBoxes weiterzuleiten, oder? Die Parameter würde ich dann dann dort im OnPaint entsprechend mit einfließen lassen. Kann man das so machen oder gibts bessere Wege?
Gruß,
Peter
Hallo peterguy,
kann man durchaus so machen.
Die Alternative, alles auf ein einAutoScroll-Panel selber zu zeichnen, ist aber auch nicht besonders aufwändig. Siehe Panel-Autoscroll ohne Controls.
herbivore
Hi!
Für gute performance und weiten zoombereich sollteste dir vermutlich Schnelles Zeichnen mit Lockbits reinziehen (auch wenns vb ist).
Zoomen, indem man das Bild-tragende Control vergrößert ist durch eine maximale Pixel-Zahl begrenzt, die Controls haben können.
Und der Ressourcenverbrauch ist glaub auch ziemlich heftig.
v.a. ist die dort gezeigte Geschwindigkeits-Optimierung erheblich.
Der frühe Apfel fängt den Wurm.
Hallo,
du könntest duch auch ganz einfach Vorhandene, kostenlose Komponenten für die Kartendarstellung nutzen, und in diesen Karten einfach deine GPS-Daten anzeigen lassen:
http://greatmaps.codeplex.com/
MFg,
Daniel
Hallo,
Bild laden, im Form verschieben und zoomen funktioniert jetzt bestens!
Selbst eine 175 Megabyte große .tiff Datei wird in akzptabler Zeit geladen und ruckelt nur leicht beim Verschieben. freu
Zeichnen klappt grundsätzlich auch schon, ich muss jetzt nur sehen wie ich die GPS Daten importiere / konvertiere, aber das ist ja ein anderes Problem =)
du könntest duch auch ganz einfach Vorhandene, kostenlose Komponenten für die Kartendarstellung nutzen, und in diesen Karten einfach deine GPS-Daten anzeigen lassen:
hm, ja sowas hatte ich ursprünglich im Sinn. Allerdings kann man dort wahrscheinlich nicht eigene (exakt referenzierte) Luftaufnahmen reinladen, oder? Die Genauigkeit, wie Google Earth sie beispielsweise bietet ist leider nicht ausreichend!
Gruß,
Peter