Positionierung (C++)

Standortbestimmung

Die Komponente Positioning der API Qt Location befasst sich mit der geografischen Position, Größe und Adresse eines Ortes. Positioning enthält eine Klasse QGeoCoordinate, die Breitengrad, Längengrad und Höhe in Metern enthält. QGeoLocation enthält eine Klasse QGeoCoordinate plus Adress- und Größeninformationen (ein Begrenzungsrahmen), so dass Positionen mehr als nur mathematische Punkte sein können. Die Bewegung in oder aus den definierten Bounding-Box-Bereichen kann überwacht werden. Die API ermöglicht es dem Entwickler auch, die Quelle der Positionsdaten zu kontrollieren.

Standortdaten umfassen eine genau spezifizierte Position auf der Erdoberfläche - wie sie durch eine Breitengrad-Längengrad-Koordinate bereitgestellt wird - zusammen mit zugehörigen Daten, wie z. B.:

  • das Datum und die Uhrzeit, zu der 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 einer Vielzahl von Methoden extrahiert werden. Eine der bekanntesten Methoden zur Positionsbestimmung ist GPS (Global Positioning System), ein öffentlich zugängliches System, das von in der Erdumlaufbahn befindlichen Satelliten empfangene Radiowellensignale nutzt, um die genaue Position und Zeit des Empfängers zu berechnen. Eine weitere gängige Methode ist die "Cell Identifier Positioning", bei der der ungefähre Standort des Empfangsgeräts anhand der Kennung der Zelle berechnet wird, in der sich das Gerät gerade befindet. Diese und andere Ortungsmethoden können alle mit der Standort-API verwendet werden. Die einzige Anforderung an eine Standortdatenquelle innerhalb der API ist, dass sie eine Koordinate für die geografische Breite und Länge mit einem Datums-/Zeitwert liefert, wobei die Möglichkeit besteht, die anderen oben aufgeführten Attribute bereitzustellen.

Standortdatenquellen werden durch Unterklassifizierung von QGeoPositionInfoSource und Bereitstellung von QGeoPositionInfo Objekten über das Signal QGeoPositionInfoSource::positionUpdated() erstellt. 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 den Aufruf der Funktion stopUpdates() gestoppt werden.

Auf einigen Plattformen kann eine Standardpositionsquelle verfügbar sein. Rufen Sie QGeoPositionInfoSource::createDefaultSource() auf, um eine Instanz der Standardpositionsquelle zu erstellen. Die Methode gibt nullptr zurück, wenn keine Standardquelle für die Plattform verfügbar ist.

Wenn ein Problem beim Zugriff auf die Informationsquelle auftritt, wird ein errorOccurred()-Signal ausgegeben.

Mit der Klasse QGeoAreaMonitorSource können Client-Anwendungen benachrichtigt werden, wenn sich das empfangende Gerät in einen bestimmten Bereich hinein oder aus diesem heraus bewegt hat, der durch eine Koordinate und einen Radius angegeben wird. Wenn die Plattform eine integrierte Unterstützung für die Bereichsüberwachung bietet, gibt die Methode QGeoAreaMonitorSource::createDefaultSource() eine Instanz der Standardbereichsüberwachung zurück.

Satelliteninformationen können auch über die Klasse QGeoSatelliteInfoSource verteilt werden. Rufen Sie QGeoSatelliteInfoSource::createDefaultSource() auf, um eine Instanz der Standard-Satellitendatenquelle für die Plattform zu erstellen, falls eine solche vorhanden ist. Alternativ können Clients die Klasse unterklassifizieren, um eine eigene Satellitendatenquelle bereitzustellen.

Anfordern von Standortdaten aus Datenquellen

Um Daten von einer Quelle zu empfangen, stellen Sie eine Verbindung zu ihrem positionUpdated()-Signal her und rufen dann entweder startUpdates() oder requestUpdate() auf, um zu beginnen.

Hier ist ein Beispiel für einen Client, der Daten von der Standard-Standortdatenquelle empfängt, wie sie von QGeoPositionInfoSource::createDefaultSource() zurückgegeben wird:

class MyClass : public QObject
{ Q_OBJECTpublic: MyClass(QObject *parent = 0) : QObject(parent) { QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(this); if (source) { connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionsaktualisiert(QGeoPositionInfo)));  source->startUpdates(); } }private slots: void positionUpdated(const QGeoPositionInfo &info)    {
        qDebug() << "Position updated:" << info;
    } };

Aspekte von Datenquellen steuern

Die Methode QGeoPositionInfoSource::setUpdateInterval() kann verwendet werden, um die Häufigkeit zu steuern, mit der Positionsaktualisierungen empfangen werden. Wenn die Client-Anwendung zum Beispiel nur alle 30 Sekunden eine Aktualisierung benötigt, kann sie setUpdateInterval(30000) aufrufen. Wenn kein Aktualisierungsintervall festgelegt ist oder setUpdateInterval() mit einem Wert von 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 Positionierungsmethode zu verlangen. Wenn die Anwendung z. B. nur die Satellitenortung verwenden möchte, die eine recht genaue Positionierung im Freien ermöglicht, aber viel Strom verbraucht, kann sie diese Methode mit dem Wert QGeoPositionInfoSource::SatellitePositioningMethods aufrufen. Diese Methode sollte jedoch nur in spezialisierten Client-Anwendungen verwendet werden; in den meisten Fällen sollten die Standard-Ortungsmethoden nicht geändert werden, da eine Quelle intern eine Vielzahl von Ortungsmethoden verwenden kann, die für die Anwendung nützlich sein können.

NMEA-Daten

NMEA ist ein gängiges textbasiertes Protokoll für die Angabe von Navigationsdaten. Der Einfachheit halber wird 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 Lesen aus einer NMEA-Protokolldatei) lesen und weitergeben können. Im Simulationsmodus gibt die Quelle Aktualisierungen entsprechend dem Zeitstempel jedes NMEA-Satzes aus, um eine "Wiedergabe" der aufgezeichneten Daten zu erzeugen.

Im Allgemeinen sind die von der Standard-Positionsquelle bereitgestellten Fähigkeiten, wie sie von QGeoPositionInfoSource::createDefaultSource() zurückgegeben werden, zusammen mit der Klasse QNmeaPositionInfoSource ausreichend für den Abruf von Positionsdaten. In manchen Fällen möchten Entwickler jedoch ihre eigene benutzerdefinierte Positionsdatenquelle schreiben.

Das Beispiel Log File Position Source (C++) zeigt, wie die Unterklasse QGeoPositionInfoSource eine eigene Positionsdatenquelle erstellen kann.

Beispiele

Log File Position Source Beispiel

Das Beispiel für die Positionsquelle für Protokolldateien zeigt, wie die Unterklasse QGeoPositionInfoSource eine benutzerdefinierte Positionsquelle erstellen kann.

Beispiel für Wetterinformationen

Das Wetterinformations-Beispiel zeigt, wie man die aktuelle Position des Benutzers verwendet, um lokale Inhalte von einem Webdienst in einem C++-Plugin für QML abzurufen.

Positionierungs-Klassen

QGeoAddress

Repräsentiert eine Adresse eines QGeoLocation

QGeoAreaMonitorInfo

Beschreibt die Parameter eines Gebiets oder einer Region, die auf Nähe überwacht werden soll

QGeoAreaMonitorSource

Ermöglicht die Erkennung von Näherungsänderungen für eine bestimmte Menge von Koordinaten

QGeoCircle

Definiert ein kreisförmiges geografisches Gebiet

QGeoCoordinate

Definiert eine geografische Position auf der Oberfläche der Erde

QGeoLocation

Repräsentiert grundlegende Informationen über einen Standort

QGeoPath

Definiert einen geografischen Pfad

QGeoPolygon

Definiert ein geografisches Polygon

QGeoPositionInfo

Enthält Informationen über eine globale Position, Richtung und Geschwindigkeit zu einem bestimmten Zeitpunkt

QGeoPositionInfoSource

Abstrakte Basisklasse für die Verteilung von Positionsaktualisierungen

QGeoRectangle

Definiert ein rechteckiges geografisches Gebiet

QGeoSatelliteInfo

Enthält grundlegende Informationen über einen Satelliten

QGeoSatelliteInfoSource

Abstrakte Basisklasse für die Verteilung von Aktualisierungen der Satelliteninformationen

QGeoShape

Definiert ein geographisches Gebiet

QNmeaPositionInfoSource

Positionsinformationen über eine NMEA-Datenquelle

QNmeaSatelliteInfoSource

Satelliteninformationen unter Verwendung einer NMEA-Datenquelle

© 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.