Laden...

GPS Daten + Karte in Windows Form anzeigen

Erstellt von peterguy vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.750 Views
P
peterguy Themenstarter:in
23 Beiträge seit 2009
vor 14 Jahren
GPS Daten + Karte in Windows Form anzeigen

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

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo peterguy,

ich weiß auch nicht, wie jetzt die gefahrene Strecke über das Bild zeichen kann.

siehe [Artikel] Zeichnen in Windows-Programmen

herbivore

B
67 Beiträge seit 2009
vor 14 Jahren

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.

  • MouseMoveEvents abfangen und stets Prüfen ob einer der GraphicPath's von den PfadObjekten aus der Liste unter der aktuellen MousePosition sichtbar 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

Gelöschter Account
vor 14 Jahren

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.

P
peterguy Themenstarter:in
23 Beiträge seit 2009
vor 14 Jahren

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

49.485 Beiträge seit 2005
vor 14 Jahren

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

5.299 Beiträge seit 2008
vor 14 Jahren

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.

R
317 Beiträge seit 2006
vor 14 Jahren

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

P
peterguy Themenstarter:in
23 Beiträge seit 2009
vor 14 Jahren

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