Positionierung (C++)
Positionierung
Die Positionierungskomponente der „ Qt Location “-API befasst sich mit der geografischen Position, der Größe und der Adresse eines Ortes. Die Positionierung umfasst eine „ QGeoCoordinate “-Klasse, die Breitengrad, Längengrad und Höhe in Metern enthält. „ QGeoLocation “ enthält eine „ QGeoCoordinate “-Klasse sowie Adress- und Größenangaben (eine Begrenzungsbox), sodass Positionen mehr als nur mathematische Punkte sein können. Das Betreten oder Verlassen der definierten Begrenzungsrahmenbereiche kann überwacht werden. Die API ermöglicht es dem Entwickler zudem, die Quelle der Positionsdaten zu steuern.
Standortdaten umfassen eine genau angegebene Position auf der Erdoberfläche – wie sie durch Breiten- und Längengradkoordinaten angegeben wird – sowie zugehörige Daten, wie zum Beispiel:
- Das Datum und die Uhrzeit, zu denen die Position gemeldet wurde
- Die Geschwindigkeit des Geräts, das die Position gemeldet hat
- Die Höhe der gemeldeten Position (Höhe über dem Meeresspiegel)
- Die Peilung des Geräts in Grad, relativ zum geografischen Norden
Diese Daten können mit verschiedenen Methoden ermittelt werden. Eine der bekanntesten Methoden zur Positionsbestimmung ist GPS (Global Positioning System), ein öffentlich zugängliches System, das mithilfe von Funkwellen, die von Satelliten in der Erdumlaufbahn empfangen werden, die genaue Position und Zeit des Empfängers berechnet. Eine weitere beliebte Methode ist die „Cell Identifier Positioning“, bei der die Zellkennung der Funkzelle, die das empfangende Gerät gerade versorgt, zur Berechnung seines ungefähren Standorts herangezogen wird. Diese und andere Ortungsmethoden können alle mit der Location-API verwendet werden; die einzige Anforderung an eine Standortdatenquelle innerhalb der API ist, dass sie eine Längen- und Breitengradkoordinate mit einem Datums-/Zeitwert bereitstellt, wobei die Angabe der anderen oben aufgeführten Attribute optional ist.
Standortdatenquellen werden durch Unterklassenbildung von „ QGeoPositionInfoSource “ erstellt und stellen über das Signal „ QGeoPositionInfoSource::positionUpdated()“ Objekte vom Typ „ QGeoPositionInfo “ bereit. Clients, die Standortdaten benötigen, können sich mit dem Signal „ positionUpdated()“ verbinden und „ startUpdates()“ oder „ requestUpdate()“ aufrufen, um die Verteilung von Standortdaten auszulösen. Die Verteilung der Standortdaten kann durch Aufruf der Funktion „ stopUpdates()“ gestoppt werden.
Auf einigen Plattformen ist möglicherweise eine Standard-Positionsquelle verfügbar. Rufen Sie „ QGeoPositionInfoSource::createDefaultSource()“ auf, um eine Instanz der Standard-Positionsquelle zu erstellen. Die Methode gibt „ nullptr “ zurück, wenn für die Plattform keine Standardquelle verfügbar ist.
Tritt beim Zugriff auf die Informationsquelle ein Problem auf, wird ein Signal „ errorOccurred()“ ausgelöst.
Die Klasse „ QGeoAreaMonitorSource “ ermöglicht es Client-Anwendungen, benachrichtigt zu werden, wenn sich das empfangende Gerät in einen bestimmten Bereich bewegt hat oder diesen verlassen hat, der durch Koordinaten und einen Radius festgelegt ist. Wenn die Plattform eine integrierte Unterstützung für die Bereichsüberwachung bietet, gibt die Methode „ QGeoAreaMonitorSource::createDefaultSource()“ eine Instanz des Standard-Bereichsmonitors zurück.
Satellitendaten können ebenfalls über die Klasse „ QGeoSatelliteInfoSource “ bereitgestellt werden. Rufen Sie „ QGeoSatelliteInfoSource::createDefaultSource()“ auf, um eine Instanz der Standard-Satellitendatenquelle für die Plattform zu erstellen, sofern eine verfügbar ist. Alternativ können Clients eine Unterklasse davon erstellen, um eine benutzerdefinierte Satellitendatenquelle bereitzustellen.
Abfrage von Standortdaten aus Datenquellen
Um Daten von einer Quelle zu empfangen, stellen Sie eine Verbindung zu deren Signal ` positionUpdated()` her und rufen Sie anschließend entweder ` startUpdates()` oder ` requestUpdate()` auf, um den Empfang zu starten.
Hier ist ein Beispiel für einen Client, der Daten aus der Standard-Standortdatenquelle empfängt, wie sie von ` QGeoPositionInfoSource::createDefaultSource()` zurückgegeben wird:
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject*parent = 0)
: QObject(parent)
{
QGeoPositionInfoSource*source = QGeoPositionInfoSource::createDefaultSource(this);
if (source) {
connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
this, SLOT(positionUpdated(QGeoPositionInfo)));
source->startUpdates();
}
}
private slots:
void positionUpdated(const QGeoPositionInfo&info)
{
qDebug() << "Position updated:" << info;
}
};Steuerung von Aspekten der Datenquellen
Mit der Methode ` QGeoPositionInfoSource::setUpdateInterval()` lässt sich die Häufigkeit steuern, mit der Positionsaktualisierungen empfangen werden. Wenn die Client-Anwendung beispielsweise nur alle 30 Sekunden Aktualisierungen benötigt, kann sie ` setUpdateInterval(30000)` aufrufen. Wenn kein Aktualisierungsintervall festgelegt ist oder ` setUpdateInterval()` mit dem Wert 0 aufgerufen wird, verwendet die Quelle ein Standardintervall oder eine andere interne Logik, um zu bestimmen, wann Aktualisierungen bereitgestellt werden sollen.
QGeoPositionInfoSource::setPreferredPositioningMethods() ermöglicht es Client-Anwendungen, die Verwendung einer bestimmten Art von Positionsbestimmungsmethode anzufordern. Wenn die Anwendung beispielsweise bevorzugt ausschließlich die Satellitenortung nutzen möchte – die zwar eine recht präzise Positionsbestimmung im Freien bietet, aber unter Umständen einen hohen Energieverbrauch verursacht –, kann sie diese Methode mit dem Wert „ QGeoPositionInfoSource::SatellitePositioningMethods “ aufrufen. Diese Methode sollte jedoch nur in speziellen Client-Anwendungen verwendet werden; in den meisten Fällen sollten die Standard-Ortungsmethoden nicht geändert werden, da eine Quelle intern möglicherweise verschiedene Ortungsmethoden nutzt, die für die Anwendung nützlich sein können.
NMEA-Daten
NMEA ist ein gängiges textbasiertes Protokoll zur Spezifizierung von Navigationsdaten. Der Einfachheit halber wird der Wert „ QNmeaPositionInfoSource “ bereitgestellt, damit Client-Anwendungen NMEA-Daten entweder im Echtzeitmodus (z. B. beim Streaming von einem GPS-Gerät) oder im Simulationsmodus (z. B. beim Einlesen aus einer NMEA-Protokolldatei) lesen und weitergeben können. Im Simulationsmodus sendet die Quelle Aktualisierungen entsprechend dem Zeitstempel jedes NMEA-Satzes aus, um eine „Wiedergabe“ der aufgezeichneten Daten zu erzeugen.
Im Allgemeinen reichen die Funktionen der Standard-Positionsquelle, die von ` QGeoPositionInfoSource::createDefaultSource()` zurückgegeben wird, zusammen mit der Klasse ` QNmeaPositionInfoSource ` aus, um Positionsdaten abzurufen. In einigen Fällen möchten Entwickler jedoch möglicherweise eine eigene, benutzerdefinierte Positionsdatenquelle erstellen.
Das Beispiel „Log File Position Source (C++) “ veranschaulicht, wie man eine Unterklasse von ` QGeoPositionInfoSource ` erstellt, um eine benutzerdefinierte Positionsquelle zu erstellen.
Beispiele
Beispiel für eine Log-Datei-Positionsquelle
Das Beispiel „Log-Datei-Positionsquelle“ veranschaulicht, wie man eine Unterklasse von „ QGeoPositionInfoSource “ erstellt, um eine benutzerdefinierte Positionsquelle zu erstellen.
Beispiel für Wetterinformationen
Das Beispiel „Wetterinformationen“ zeigt, wie man in einem C++-Plugin für QML die aktuelle Position des Benutzers nutzt, um lokale Inhalte von einem Webdienst abzurufen.
Positionsbestimmungs-Klassen
Stellt eine Adresse eines QGeoLocation dar | |
Beschreibt die Parameter eines Bereichs oder einer Region, die auf Annäherung überwacht werden sollen | |
Ermöglicht die Erkennung von Änderungen der Nähe für einen bestimmten Koordinatensatz | |
Definiert einen kreisförmigen geografischen Bereich | |
Definiert eine geografische Position auf der Erdoberfläche | |
Stellt grundlegende Informationen zu einem Standort dar | |
Definiert eine geografische Route | |
Definiert ein geografisches Polygon | |
Enthält Informationen über eine globale Position, Richtung und Geschwindigkeit zu einem bestimmten Zeitpunkt | |
Abstrakte Basisklasse für die Verteilung von Positionsaktualisierungen | |
Definiert ein rechteckiges geografisches Gebiet | |
Enthält grundlegende Informationen über einen Satelliten | |
Abstrakte Basisklasse für die Verteilung von Aktualisierungen der Satelliteninformationen | |
Definiert ein geografisches Gebiet | |
Positionsdaten unter Verwendung einer NMEA-Datenquelle | |
Satelliteninformationen unter Verwendung einer NMEA-Datenquelle |
© 2026 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.