Qt Positioning NMEA-Plugin

Übersicht

Qt Positioning enthält ein Positions-Plugin, das NMEA-Sätze in Positionsaktualisierungen parst. Dieses Plugin kann eine serielle Schnittstelle, einen Socket oder eine Datei als Quelle verwenden.

Dieses Plugin kann mit dem Providernamen nmea geladen werden.

Parameter

In der folgenden Tabelle sind die Parameter aufgeführt, die an das nmea-Plugin übergeben werden können.

ParameterBeschreibung
nmea.QuelleDie Quelle, die verwendet wird, um NMEA-Daten zu erhalten.
nmea.baudrateDie Baudrate, die von der seriellen Verbindung verwendet werden soll, ausgedrückt durch eine positive ganze Zahl. Normalerweise sollte es einer der Werte aus dem QSerialPort::BaudRate enum sein. Wird der Parameter nicht angegeben oder enthält er keine positive ganze Zahl, wird der Standardwert 4800 verwendet.
nmea.satellite_info_simulation_intervalDas Intervall für das Lesen von Satelliteninformationsdaten aus der Datei im Simulationsmodus.

Unterschiedliche Quellen erfordern unterschiedliche Methoden zur Bereitstellung der Daten. In der folgenden Tabelle sind die verschiedenen Möglichkeiten zur Bereitstellung der nmea.source Parameter für Socket-, serielle Port- und Dateieingänge aufgeführt.

SchemaBeispielBeschreibung
socket://hostname:portsocket://localhost:12345Verwenden Sie das Schlüsselwort socket:, um anzugeben, dass Sie die Nmea-Daten vom Socket abrufen möchten. Es wird ein TCP-Socket erstellt, der versucht, sich mit dem Host hostname über den Port port zu verbinden. Bei erfolgreicher Verbindung wird ein NMEA-Textstrom vom Server erwartet.
seriell:Anschlussnameserial:/dev/ttyUSB0Verwenden Sie das Schlüsselwort serial:, um anzugeben, dass Sie die NMEA-Daten von der seriellen Schnittstelle abrufen möchten. Das Plugin wird versuchen, eine Verbindung zum Port portname mit einer Standard-Baudrate = 4800 Bd herzustellen (der Wert der Baudrate kann mit dem Parameter nmea.baudrate angegeben werden). Nach erfolgreichem Verbindungsaufbau wird ein NMEA-Textstrom von der seriellen Schnittstelle erwartet. Wenn Sie serial: ohne einen Portnamen verwenden, versucht das Plugin, eines der bekannten seriellen Geräte anhand der Herstellerkennung zu finden. Beachten Sie jedoch, dass dies kein empfohlener Weg ist, die serielle Schnittstelle zu nutzen, da die Liste der bekannten Geräte klein ist und Ihre Hardware höchstwahrscheinlich nicht enthält.
serial:COM1
serial:
Dateipfad/home/user/nmealog.txtVerwenden Sie file:/// oder einfach den vollständigen Dateipfad, um einen Pfad zu einer lokalen Datei anzugeben.
file:///Dateipfadfile:///home/user/nmealog.txt
qrc:///dateipfadqrc:///nmealog.txtVerwenden Sie das Präfix qrc:///, um einen Pfad zu einer Datei in den Anwendungsressourcen anzugeben.

Hinweis: Wenn der Parameter nmea.source nicht angegeben wird, versucht das Plugin, eines der bekannten seriellen Geräte zu finden (als ob nmea.source = serial: angegeben wäre).

Beispiel für die Verwendung der Positionsquelle

Die folgenden Beispiele zeigen, wie ein nmea PositionSource unter Verwendung verschiedener Datenquellen erstellt werden kann.

QML

// text file
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "qrc:///nmealog.txt" }
}

// socket
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "socket://localhost:22222" }
}

// serial port
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "serial:/dev/ttyACM0" }
    PluginParameter { name: "nmea.baudrate"; value: 4800 }
}

C++

// text file
QVariantMap params;
params["nmea.source"] = "qrc:///nmealog.txt";
QGeoPositionInfoSource *textPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

// socket
params["nmea.source"] = "socket://localhost:22222";
QGeoPositionInfoSource *socketPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

// serial port
params["nmea.source"] = "serial:/dev/ttyACM0";
params["nmea.baudrate"] = 4800;
QGeoPositionInfoSource *serialPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

Hinweis: Sobald eine PositionSource erstellt wurde, kann sie nicht mehr für die Verwendung anderer Datenquellen umkonfiguriert werden.

Beispiel für die Verwendung einer Satelliteninformationsquelle

Neben den Positionsdaten kann das nmea-Plugin auch Satelliteninformationen bereitstellen.

QML

// serial port
SatelliteSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "serial:/dev/ttyUSB0" }
    PluginParameter { name: "nmea.baudrate"; value: 9600 }
}

// socket
SatelliteSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "socket://localhost:22222" }
}

C++

// serial port
QVariantMap parameters;
parameters["nmea.source"] = "serial:/dev/ttyUSB0";
params["nmea.baudrate"] = 9600;
QGeoSatelliteInfoSource *serialSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

// socket
parameters["nmea.source"] = "socket://localhost:22222";
QGeoSatelliteInfoSource *socketSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

Einstellungen der benutzerdefinierten Simulationsgeschwindigkeit

Wenn Sie QGeoSatelliteInfoSource zum Lesen von Dateien mit NMEA-Stream verwenden möchten, können Sie auch den zusätzlichen Parameter "nmea.satellite_info_simulation_interval" verwenden. Mit diesem Parameter wird die Wiedergaberate (in Millisekunden) für die Satelliteninformationsmeldungen festgelegt. Die minimal zulässige Frequenz wird durch minimumUpdateInterval() festgelegt. Wenn Sie einen kleineren Wert angeben, wird dieser ignoriert. Wenn kein Wert angegeben wird, ist der Standardwert qMax(100, minimumUpdateInterval()). Zur Laufzeit kann die Methode QNmeaSatelliteInfoSource::setBackendProperty() verwendet werden, um diesen Parameter zu aktualisieren.

// file
QVariantMap parameters;
parameters["nmea.source"] = "qrc:///nmealog.txt";
parameters["nmea.satellite_info_simulation_interval"] = 1000;
QGeoSatelliteInfoSource *fileSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

Dieser Parameter ist nicht auf die Positionsquelle anwendbar, da das NMEA-Protokoll bereits Zeitstempel in Positionsnachrichten enthält. Diese Zeitstempel werden verwendet, um die korrekte Nachrichtenrate zu simulieren, wenn QGeoPositionInfoSource mit einer Datei als Datenquelle verwendet wird.

Hinweis: Sobald eine QGeoSatelliteInfoSource erstellt wurde, kann sie nicht mehr für die Verwendung anderer Datenquellen umkonfiguriert werden.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.