Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
GPS Daten + Karte in Windows Form anzeigen
peterguy
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Kölner Raum

Themenstarter:

GPS Daten + Karte in Windows Form anzeigen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo peterguy,
Zitat
ich weiß auch nicht, wie jetzt die gefahrene Strecke über das Bild zeichen kann.
siehe [Artikel] Zeichnen in Windows-Programmen

herbivore
private Nachricht | Beiträge des Benutzers
Birne
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Hamburg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Birne am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
peterguy
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Kölner Raum

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
robbyrc
myCSharp.de - Member



Dabei seit:
Beiträge: 317
Herkunft: Passau

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
peterguy
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Kölner Raum

Themenstarter:

beantworten | zitieren | melden

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 =)


Zitat von robbyrc
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
private Nachricht | Beiträge des Benutzers