C# GPS-Standort Win10 - Immer wieder starke Abweichungen

frajen

Lieutenant
Registriert
Mai 2008
Beiträge
552
Hallo an Alle,
Ich wollte euch mal bitten mir eure Erfahrungen im Umgang mit der GPS-Schnittelle von Microsoft oder generell dem GPS im Laptop mitzuteilen.

Aktuell arbeite ich an einer Software die mittels GPS-Daten einen Standortabgleich durchführt.
Die Software läuft auf Laptops mit Windows 10 und eingebautem GPS-Modul. Oft funktioniert dieser Abgleich auch ohne Probleme.
Aber immer wieder gibt es Probleme, dass der Standort 100 Km vom tatsächlichen Standort entfernt angezeigt wird. Dabei habe ich herausgefunden, dass das Problem nicht bei dem einen Laptop auftritt, sondern bei verschiedenen (auch vers. Herstellern). Oft wird der letztmalig erfasste Standort (z.B. vom vor Tag) als aktuell angezeigt, manchmal vermute ich eine Lokalisierung über die ISP-IP-Adresse. In diesen Fällen weigert sich der Laptop einfach eine neue Standortbestimmung per GPS durchzuführen. Die Laptops befinden sich meist unter freiem Himmel, Hoch und Runterfahren des Gerätes bringt nichts, "Position" in Windows Aus- und wieder Einschalten bringt auch nichts. Zunächst habe ich zum Testen in dem Programm eine Nadel in eine Weltkarte eingezeichnet um zusehen wo die Position lokalisiert wird, dabei habe ich oben genanntes festgestellt.
Jetzt dachte ich, dass das Problem an meiner Software lag aber ich habe einfach mal die Karten App von Microsoft geöffnet und diese hat die selbe Position angezeigt und hat den Standort auch nicht geändert. Ich bin mir also relativ sicher, dass es nicht an meinem Programm liegt.

Programmiert ist die Software mit C# (WPF) und .Net 4.7.2.

Für den Zugriff auf den Standort benutze ich das PositionChangedEvent des GeoCoordinateWatcher mit der Genauigkeit "High".
Aus der Beschreibung der Schnittstelle lese ich heraus, dass für das erfassen der Position nicht nur das GPS-Modul genutzt wird sonder auch WLAN-Netzwerke oder die IP-Adresse des ISP, falls kein GPS Signal erfasst werden kann.
Ich sehe aber keine Möglichkeit über .Net eine erneute Bestimmung über GPS anzustoßen auch kann ich nicht herausfinden worüber die Lokalisierung aktuell gemacht wird (GPS oder IP oder WLAN). Ein Neustarten des GeoCoordinateWatchers bringt hier auch nichts.

Zu dem Thema habe ich verschiedene Berichte gefunden (auch von Microsoft) die etwas ähnliches beschreiben Hier oder Hier. Diese sind aber alle schon ein paar Jahre alt und ich frage mich, dass ich doch nicht der einzige sein kann der solche Probleme hat und Microsoft hier nichts tut?!

Aktuell bin ich an einem Punkt an dem ich nicht sehe wie ich das Problem lösen kann, da es nicht an meinem Programm liegt sonder an der Schnittelle oder am GPS-Modul das in den Laptops verbaut ist.

Falls ihr Erfahrung in dem Bereich habt:
Wie habt ihr den Standort bestimmt oder mit welcher Schnittelle habt ihr gearbeitet? Gibt es alternativen die besser funktionieren?
Kennt Ihr das oben beschrieben Verhalten auch von euren Laptops und GPS Nutzung?

Danke schon mal für eure Erfahrungen.

Mfg
Frajen
 
In Innenräumen hast du oftmals keinen GPS Empfang, daher denke ich eher in folgende Richtung:
- Dienst im Hintergrund laufen lassen, die den Standort der letzten 24 Stunden trackt und eine plausiblitätsprüfung durchführt, nach dem Motto: Ich war bei den letzten 10 Messungen innerhalb von 2 Stunden in Berlin, jetzt sagt die Position: Hannover - das kann nicht sein.

- Anbindung an eine App auf dem Smartphone

- Ansonsten würde ich mal schauen, was passiert, wenn du die Genauigkeit der Positionsanfrage änderst, oder bei dem GPS mal die Höhenmeter oder aktuelle Fahrgeschwindigkeit abfragst...

Alles nur Ideen - stecke nicht drin in C#/Windows 10
 
Sephe schrieb:
In Innenräumen hast du oftmals keinen GPS Empfang, daher denke ich eher in folgende Richtung:
- Dienst im Hintergrund laufen lassen, die den Standort der letzten 24 Stunden trackt und eine plausiblitätsprüfung durchführt, nach dem Motto: Ich war bei den letzten 10 Messungen innerhalb von 2 Stunden in Berlin, jetzt sagt die Position: Hannover - das kann nicht sein.

- Anbindung an eine App auf dem Smartphone

- Ansonsten würde ich mal schauen, was passiert, wenn du die Genauigkeit der Positionsanfrage änderst, oder bei dem GPS mal die Höhenmeter oder aktuelle Fahrgeschwindigkeit abfragst...

Alles nur Ideen - stecke nicht drin in C#/Windows 10
Danke für deine Antwort Sephe.

Leider läuft die Software nicht immer sondern nur für bestimmte Aufgaben und dann sollte der Standort möglichst stimmen.

Die Höhenmeter könnte ich mir nochmal ansehen für eine Plausibilitätsprüfung die habe ich bisher ganz außer acht gelassen. Ideal wäre es aber auch nicht ;-)

Zum Testen könnte man die Genauigkeit ja mal auf "ungenauer" stellen (genauer geht nicht) vielleicht fängt er, dann mit einer neuen Ermittlung an ...
 
Ich kenne mich zwar in der Programmierung und den Schnittstellen bei GPS nicht aus, aber ich würde erstmal mit einem GPS_Tracker o.ä. versuchen herauszufinden, ob an den Standpunkten ein GPS-Signal vorhanden ist und was es bei einem unabhängigen Drittgerät anzeigt.

Falls da alles ok ist würde wahrscheinlich ganz simpel testweise das GPS-Modul komplett ab- und wieder einschalten. Dann müsste es doch eine Neubestimmung vornehmen. Und falls dann immer noch Murks angezeigt wird, kann das GPS-Signal vielleicht für die eingebauten Module zu schwach sein und dann auf die beschriebenen Alternativen zurück greifen.
Alles unter der Annahme meinerseits, dass das programmiertechnisch möglich ist. ;)
 
Demon_666 schrieb:
Ich kenne mich zwar in der Programmierung und den Schnittstellen bei GPS nicht aus, aber ich würde erstmal mit einem GPS_Tracker o.ä. versuchen herauszufinden, ob an den Standpunkten ein GPS-Signal vorhanden ist und was es bei einem unabhängigen Drittgerät anzeigt.

Falls da alles ok ist würde wahrscheinlich ganz simpel testweise das GPS-Modul komplett ab- und wieder einschalten. Dann müsste es doch eine Neubestimmung vornehmen. Und falls dann immer noch Murks angezeigt wird, kann das GPS-Signal vielleicht für die eingebauten Module zu schwach sein und dann auf die beschriebenen Alternativen zurück greifen.
Alles unter der Annahme meinerseits, dass das programmiertechnisch möglich ist. ;)
Danke auch für deine Gedanken.

Interessanterweise funktioniert es manchmal an den selben Orten und manchmal nicht. Bei meinen Tests war ich mal auf der Autobahn wo es geht und mal ging es nicht (an den selben Abschnitt).

Das Problem ist auch, dass er sich dann erst mal auch nicht wieder fängt nachdem er sich mal verloren hat. Nicht mal wenn man wieder an einem Ort ist wo es eigentlich funktionieren sollte.
 
Hi, ich weiß nicht ob das hilft, aber mir scheint in dem nachfolgenden Codeabschnitt findet eine Aktualisierung des Längen -und Breitengrades statt.
C#:
    bool m_fetching;

    void gps_LocationChanged(object sender, LocationChangedEventArgs args)
    {
        if (m_fetching) return;

        if (args.Position.LatitudeValid && args.Position.LongitudeValid)
        {
            ThreadPool.QueueUserWorkItem(UpdateProc, args);
        }
    }

    private void UpdateProc(object state)
    {
        m_fetching = true;

        LocationChangedEventArgs args = (LocationChangedEventArgs)state;
        try
        {
            // do this async
            var image = image_request2(args.Position.Latitude, args.Position.Longitude);

            // now that we have the image, do a synchronous call in the UI
            pictureBox1.Invoke((UpdateMap)delegate()
            {
                center.Latitude = args.Position.Latitude;
                center.Longitude = args.Position.Longitude;
                LatLongToPixel(center);
                image;
            });
        }
        finally
        {
            m_fetching = false;
        }
    }
 
Tornhoof schrieb:
Hast du zb mal das UWP Beispiel von Microsoft https://docs.microsoft.com/en-us/samples/microsoft/windows-universal-samples/geolocation/ oder ein anderes Tool nebenbei laufen lassen um zu sehen was die ausspucken?
Das ist noch eine gute Idee. Da lese ich mich mal in UWP ein ... ^^
Ergänzung ()

G-Red schrieb:
Hi, ich weiß nicht ob das hilft, aber mir scheint in dem nachfolgenden Codeabschnitt findet eine Aktualisierung des Längen -und Breitengrades statt.
C#:
    bool m_fetching;

    void gps_LocationChanged(object sender, LocationChangedEventArgs args)
    {
        if (m_fetching) return;

        if (args.Position.LatitudeValid && args.Position.LongitudeValid)
        {
            ThreadPool.QueueUserWorkItem(UpdateProc, args);
        }
    }

    private void UpdateProc(object state)
    {
        m_fetching = true;

        LocationChangedEventArgs args = (LocationChangedEventArgs)state;
        try
        {
            // do this async
            var image = image_request2(args.Position.Latitude, args.Position.Longitude);

            // now that we have the image, do a synchronous call in the UI
            pictureBox1.Invoke((UpdateMap)delegate()
            {
                center.Latitude = args.Position.Latitude;
                center.Longitude = args.Position.Longitude;
                LatLongToPixel(center);
                image;
            });
        }
        finally
        {
            m_fetching = false;
        }
    }

Hmmm... sieht glaube ich so aus als ob hier auch "nur" auf das Event reagiert wird und bei gültige nDaten etwas mit einem Bild gemacht wird (wahrscheinlich eine Art Pin auf der Karte?).

Aber Danke für das Raussuchen :)
 
Zuletzt bearbeitet:
Habe es eben noch einmal probiert.
Es scheint mit dem GPS-Signal zusammen zuhängen sowohl die Karten-App von Microsoft als auch das UWP-Beispiel und auch Google-Maps im Browser haben die falsche Position.

In Microsofts Karten-App wird aber noch gewarnt, dass die Position nicht korrekt ermittelt wurde.

Anscheinend ist der GPS-Empfang in Laptops so bescheiden... :grr:
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Demon_666
Du bist nur vom Handy verwöhnt weil das auch das Mobilfunk Netz und WLANs zur Lokalisierung verwendet, bis ein GPS Signal vorliegt. Den Vergleich mit einem reinen GPS Tracker fand ich als Vorschlag schon gut...
 
Drexel schrieb:
Du bist nur vom Handy verwöhnt weil das auch das Mobilfunk Netz und WLANs zur Lokalisierung verwendet, bis ein GPS Signal vorliegt. Den Vergleich mit einem reinen GPS Tracker fand ich als Vorschlag schon gut...
Ja das habe ich fast befürchtet, zumal ja ein modernes Smartphone nicht nur GPS zur Ortung nutzt, wie du ja auch schreibst. Trotzdem habe ich nicht damit gerechnet, dass GPS so schlecht auf dem Laptop funktioniert bzw. Hätte ich gedacht, dass diese Technik aus einem Smartphone auch in einem 1500 € Laptop ist.

Es gibt für Android die App "GNSS Compare" mit der kann man prüfen welche Ortungssateliten in der Nähe sind und wie viele.
Damit kann man das Smartphone als "GPS-Tracker" nutzen.

So eine App wäre für Windows gut :confused_alt:
 
Ich kenn mich nicht wirklich gut mit GPS aus, weiß nur, dass Handys auch andere Daten zur Lokalisierung nehmen.

Jetzt mein Halbwissen: Rein mit GPS dauert es ne Weile, bis der Sensor Kontakt zu ausreichend GPS Satelliten hat, wenn er offline war. gerade wenn man still steht dauert es noch länger. Habt Ihr ausreichend lang Mal abgewartet?
 
Drexel schrieb:
Ich kenn mich nicht wirklich gut mit GPS aus, weiß nur, dass Handys auch andere Daten zur Lokalisierung nehmen.

Jetzt mein Halbwissen: Rein mit GPS dauert es ne Weile, bis der Sensor Kontakt zu ausreichend GPS Satelliten hat, wenn er offline war. gerade wenn man still steht dauert es noch länger. Habt Ihr ausreichend lang Mal abgewartet?
Du hast recht das Smartphone nutzt noch andere Möglichkeiten zur Lokalisierung.
Leider habe ich es noch nicht mit dem Smartphone und Laptop parallel probiert um zu überprüfen wie viele Satelliten in der Nähe sind. Ich habe es aber mit einem Auto Navi parallel verglichen, dort hatte nur der Laptop Probleme. Es kann jetzt natürlich sein, dass das Auto auch noch weitere Möglichkeiten zur Ortung hat als der Laptop.

Meine aktuelle Vermutung ist, dass das GPS im Laptop tatsächlich einfach schlecht funktioniert oder dass es am Windows liegt. Habe irgendwo gelesen, dass es mit Linux besser funktioniert soll aber das ist nur hören sagen ich kann das leider nicht vergleichen.


In meinem Programm habe ich es nun so gelöst, dass ich bei einer ungenaue Ortung (hohe Abweichungen oder ungültige Position) den Nutzer darauf hinweise und dieser kann die GPS-Ortung neustarten. Manchmal hilft das - aber nicht immer.

Parallel habe ich jetzt eine App für das Smartphone erstellt und damit funktioniert es ohne Probleme. Ist trotzdem nicht der ideale umweg über eine App.

Aber Falls noch jemand einen Laptop hat und mir sagen könnte wie das GPS bei ihm funktioniert hätte ich nichts dagegen. :heilig:;)
 
Hallo,

ich habe ein ähnliches Problem. Ich verwende ein .NET Event bei einer Koordinatenänderung. (Programmiersprache: C#)

aus
Windows.Devices.Geolocation.Geolocator

Locator.PositionChanged += Locator_PositionChanged;

private void Locator_PositionChanged(Windows.Devices.Geolocation.Geolocator sender, Windows.Devices.Geolocation.PositionChangedEventArgs args) { ... }

Es werden immer wieder keine neuen GPS Koordinaten gefunden. Interessanterweise bewirkt ein Öffnen der Windows eigenen Karten App, dass wieder Koordinaten empfangen werden. Die Karten App darf allerdings nicht im minimierten Zustand sein.

Konnte dieses Problem auch schon jemand beobachten?
 
@Markus179
Hi,
Mittlerweile stecke ich auch nicht mehr so tief drin in dem Thema aber wie in meinem letzten Beitrag erwähnt hat es (manchmal) geholfen ein neues "Locator" Objekt zu erzeugen und so dem GPS einen Tritt zu verpassen.

Hast du mal versucht in dem Fall, wenn kein Signal kommt mal den "Locator" im Programm neu zu instanziieren?
 
@frajen ja hatte ich tatsächlich schon mal versucht. Hat auch manchmal geholfen. Manchmal hilft es auch, im Gerätemanager den GPS-Sensor zu deaktivieren und gleich wieder zu aktivieren. :confused_alt:
 
Hmm... mehr habe ich dazu leider nicht herausgefunden. Sehr unbefriedigend ... Leider.

Welche .Net Framework Version nutzt du für dein Programm?
 
Ich kann mir nicht vorstellen, dass es an einem bestimmten Laptop liegt.
Zumindest das von mir geschilderte Problem tritt auf Laptops verschiedener Hersteller (Fujitsu, HP, Lenovo) auf. :freak:


frajen schrieb:
Dabei habe ich herausgefunden, dass das Problem nicht bei dem einen Laptop auftritt, sondern bei verschiedenen (auch vers. Herstellern).
 
Glaube auch das es nicht an dem Treiber oder Laptop liegt. Bei mir ist es ein HP Elite X2 G8 Tablet mit Windows 10. Verwende .NET Framework 4.7.2.
 
Zurück
Oben