GPS Koordinaten auslesen (Standort)

  • VB.NET
  • .NET 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    GPS Koordinaten auslesen (Standort)

    Hallo Liebe Community

    Ist es möglich den aktuellen GPS Standort in Visual Basic auszulesen? Ich benutze kein externes GPS Gerät über COM Schnittstellen da mein Rechner einen integrierten GPS Sender/Empfänger besitzt

    Ich möchte gerne den aktuellen Standort meines Rechners mittels Breitengrad/Längengrad auslesen und in einer Textbox ausgeben. Im Format :
    Latitute = 47.463922
    Longitute = 7.839014

    Hat jemand von euch schon sowas ähnliches "gebastelt"?

    Vielen Dank vorab für eure Hilfe
    Grüsse aus der Schweiz
    Andy
    Hi,

    was sagst du zu:
    msdn.microsoft.com/de-de/libra…atewatcher(v=vs.110).aspx

    Edit:
    Kurz zusammengefasst... Den Verweis System.Device importieren...
    Ne Form bauen mit nem Button drauf namens Button1 und folgender Code:

    VB.NET-Quellcode

    1. Imports System.Device.Location
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim watcher As New System.Device.Location.GeoCoordinateWatcher()
    5. watcher.TryStart(False, TimeSpan.FromMilliseconds(1000))
    6. Dim coord As GeoCoordinate = watcher.Position.Location
    7. If coord.IsUnknown <> True Then
    8. MessageBox.Show(String.Format("Lat: {0}, Long: {1}", coord.Latitude, coord.Longitude))
    9. Else
    10. MessageBox.Show("Unknown latitude and longitude.")
    11. End If
    12. End Sub
    13. End Class

    Und schwups wirft er dir die Daten brav als Messagebox raus.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    Hallo MemoAnMichSelbst

    Funktioniert bestens! Herzlichen Dank

    Ein kleines Problem habe ich noch.... beim ersten drücken des buttons erhalte ich immer die fehlermeldung die lokalisierung nicht vornehmen kann... danach funktioniert es tadellos.... jedesmal nur beim ersten klick auf den button....

    hast du eine idee an was das liegen könnte?

    Gruss
    Andy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „andy_1977“ ()

    Ich täte darauf tippen, dass das GPS Modul zu langsam ist und einfach mal die TimeSpan nach oben schrauben und gucken ob das hilft.
    ​Ich habe hier keine Probleme gehabt. Schwer zu sagen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo Zusammen,

    der obige Code funktioniert im Visual Studio, jedoch wenn ich das Programm im Debug-Ordner öffne bekomme ich immer die Meldung ("Unknown latitude and longitude.")
    Sobald ich den Button im Viusal Studio das zweite mal Drücke erhalte ich auch den Fehler ("Unknown latitude and longitude.")

    Bitte um Hilfe.

    Vielen Dank :)

    Viele Grüße
    Frostbeule
    @Frostbeule Gibt es zu den Fehlern einen Code und eine Zeile?
    Mit welchem externen Gerät arbeitest Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    MemoAnMichSelbst schrieb:

    If coord.IsUnknown <> True Then
    Ist kein besonders schöner Code.
    Etwas schöner wäre:If Not coord.IsUnknown Then
    Und wenn du den If..Else-Zweig umkehrst, wird die Abfrage einfacher:

    VB.NET-Quellcode

    1. If coord.IsUnknown Then
    2. MessageBox.Show("Unknown latitude and longitude.")
    3. Else
    4. MessageBox.Show(String.Format("Lat: {0}, Long: {1}", coord.Latitude, coord.Longitude))
    5. End If




    Frostbeule schrieb:


    For i As Integer = 0 To seconds
    System.Threading.Thread.Sleep(10)
    Verwirrende Benamung!
    Die Variable heisst seconds und du wartest 10 Millisekunden.

    Frostbeule schrieb:

    Application.DoEvents()
    Das war selbst unter VB6 schon ein No-Go.
    Es geht auch anders:

    VB.NET-Quellcode

    1. Private Sub Wait(ms As Integer)
    2. Task.WaitAll(Task.Delay(ms))
    3. End Sub
    (Vielleicht hat ja einer sogar eine noch schönere Lösung eines nicht GUI-blockierenden Wait)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    petaod schrieb:

    Lösung eines nicht GUI-blockierenden Wait


    VB.NET-Quellcode

    1. Private Async Function Wait(ByVal ms As Integer) As Task
    2. Await Task.Run(Sub()
    3. Thread.Sleep(ms)
    4. End Sub)
    5. End Function
    6. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. MessageBox.Show("test")
    8. Await Wait(5000)
    9. MessageBox.Show("test2")
    10. End Sub


    Find ich eleganter und blockt die UI nicht.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    xChRoNiKx schrieb:

    Find ich eleganter
    Kürzer ist es aber auf keinen Fall ;)
    Und hat für mich den Nachteil, dass die aufrufende Routine ein Await verwenden muss und damit auch Async deklariert werden muss.
    Das erfordert halt die Modifikation jeder aufrufenden Routine.
    Will man das umgehen benötigt man schon zwei Routinen (rechnet man die anonyme Methode mit, sogar drei).

    VB.NET-Quellcode

    1. Private Async Sub Wait(ms As Integer)
    2. Await WaitAsync(ms)
    3. End Sub
    4. Private Async Function WaitAsync(ByVal ms As Integer) As Task
    5. Await Task.Run(Sub()
    6. System.Threading.Thread.Sleep(ms)
    7. End Sub)
    8. End Function
    Ist für mich jetzt eher unübersichtlicher als mein Einzeiler.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Nur so nebenbei: Das kann man auch etwas kürzen:

    VB.NET-Quellcode

    1. Await Task.Run(Sub() System.Threading.Thread.Sleep(ms))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @petaod ok da hast du natürlich recht.
    @VaporiZed danke dafür.

    Gibt es sonst noch Möglichkeiten ohne Async/Await zu warten ohne GUI-Block? Ich für meinen Wissensstand glaube nicht oder hat da jemand noch was?
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    .ContinueWith(), war der Standard in .NET 4.0. Mal abgesehen vom miserablen ExceptionHandling via .IsFaulted und AggregateException wird das ziemlich schnell ziemlich unschön mit etlichen anonymen Methoden in etlichen aneinandergeketteten Funktionsaufrufen.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen