Posicionamiento (C++)
Posicionamiento
El componente Posicionamiento de la API Qt Location trata sobre la posición geográfica, el tamaño y la dirección de algún lugar. Positioning contiene una clase QGeoCoordinate, que contiene la latitud, la longitud y la altitud en metros. QGeoLocation contiene una clase QGeoCoordinate más información sobre la dirección y el tamaño (un cuadro delimitador) para que las posiciones puedan ser algo más que puntos matemáticos. El movimiento dentro o fuera de las áreas definidas del cuadro delimitador puede controlarse. La API también permite al programador controlar la fuente de la información posicional.
Los datos de posición implican una posición especificada con precisión en la superficie de la Tierra - proporcionada por una coordenada de latitud-longitud - junto con datos asociados, como:
- la fecha y hora en que se comunicó la posición
- la velocidad del dispositivo que ha comunicado la posición
- la altitud de la posición notificada (altura sobre el nivel del mar)
- el rumbo del dispositivo en grados, en relación con el norte verdadero
Estos datos pueden extraerse mediante diversos métodos. Uno de los métodos de posicionamiento más conocidos es el GPS (Global Positioning System), un sistema de acceso público que utiliza señales de ondas de radio recibidas de satélites en órbita terrestre para calcular la posición precisa y la hora del receptor. Otro método popular es el "Cell Identifier Positioning" (posicionamiento por identificador de célula), que utiliza el identificador de la célula que da servicio al dispositivo receptor para calcular su ubicación aproximada. Estos y otros métodos de posicionamiento se pueden utilizar con la API de localización; el único requisito para una fuente de datos de localización dentro de la API es que proporcione una coordenada de latitud-longitud con un valor de fecha/hora, con la opción de proporcionar los otros atributos enumerados anteriormente.
Las fuentes de datos de localización se crean subclasificando QGeoPositionInfoSource y proporcionando objetos QGeoPositionInfo a través de la señal QGeoPositionInfoSource::positionUpdated(). Los clientes que necesiten datos de localización pueden conectarse a la señal positionUpdated() y llamar a startUpdates() o requestUpdate() para activar la distribución de datos de localización. La distribución de datos de localización puede detenerse llamando a la función stopUpdates().
En algunas plataformas puede existir una fuente de posición por defecto. Llama a QGeoPositionInfoSource::createDefaultSource() para crear una instancia de la fuente de posición por defecto. El método devuelve nullptr si no hay ninguna fuente por defecto disponible para la plataforma.
Si se produce un problema con el acceso a la fuente de información, se emite una señal errorOccurred().
La clase QGeoAreaMonitorSource permite que las aplicaciones cliente reciban una notificación cuando el dispositivo receptor se ha movido dentro o fuera de un área determinada, especificada por una coordenada y un radio. Si la plataforma proporciona soporte integrado para la monitorización de áreas, el método QGeoAreaMonitorSource::createDefaultSource() devuelve una instancia del monitor de áreas predeterminado.
La información sobre satélites también puede distribuirse a través de la clase QGeoSatelliteInfoSource. Llame a QGeoSatelliteInfoSource::createDefaultSource() para crear una instancia de la fuente de datos de satélite predeterminada para la plataforma si hay una disponible. Alternativamente, los clientes pueden subclasificarla para proporcionar una fuente de datos de satélite personalizada.
Solicitud de datos de localización a fuentes de datos
Para recibir datos de una fuente, conéctese a su señal positionUpdated() y, a continuación, llame a startUpdates() o requestUpdate() para comenzar.
A continuación se muestra un ejemplo de un cliente que recibe datos de la fuente de datos de localización predeterminada, tal y como devuelve QGeoPositionInfoSource::createDefaultSource():
clase MyClass : public QObject { Q_OBJECTpublic: MiClase(QObject *parent = 0) : QObject(padre) { QGeoPositionInfoSource *fuente = QGeoPositionInfoSource::createDefaultSource(this); if (fuente) { connect(fuente, SIGNAL(posicionActualizado(QGeoPositionInfo)), this, SLOT(posiciónActualizada(QGeoPositionInfo))); source->startUpdates(); } }private slots: void positionUpdated(const QGeoPositionInfo &info) { qDebug() << "Position updated:" << info; } };
Control de los aspectos de las fuentes de datos
El método QGeoPositionInfoSource::setUpdateInterval() puede utilizarse para controlar la frecuencia con la que se reciben las actualizaciones de posición. Por ejemplo, si la aplicación cliente sólo requiere actualizaciones una vez cada 30 segundos, puede llamar a setUpdateInterval(30000). Si no se establece ningún intervalo de actualización, o se llama a setUpdateInterval() con un valor de 0, la fuente utiliza un intervalo predeterminado o alguna otra lógica interna para determinar cuándo deben proporcionarse las actualizaciones.
QGeoPositionInfoSource::setPreferredPositioningMethods() permite a las aplicaciones cliente solicitar que se utilice un determinado tipo de método de posicionamiento. Por ejemplo, si la aplicación prefiere utilizar sólo el posicionamiento por satélite, que ofrece un posicionamiento exterior bastante preciso pero puede consumir muchos recursos energéticos, puede llamar a este método con el valor QGeoPositionInfoSource::SatellitePositioningMethods. Sin embargo, este método sólo debe utilizarse en aplicaciones cliente especializadas; en la mayoría de los casos, los métodos de posicionamiento por defecto no deben modificarse, ya que una fuente puede utilizar internamente diversos métodos de posicionamiento que pueden ser útiles para la aplicación.
Datos NMEA
NMEA es un protocolo común basado en texto para especificar datos de navegación. Por comodidad, QNmeaPositionInfoSource permite a las aplicaciones cliente leer y distribuir datos NMEA en modo de tiempo real (por ejemplo, cuando se transmiten desde un dispositivo GPS) o en modo de simulación (por ejemplo, cuando se leen desde un archivo de registro NMEA). En modo simulación, la fuente emitirá actualizaciones según la marca de tiempo de cada frase NMEA para producir una "repetición" de los datos registrados.
Generalmente, las capacidades proporcionadas por la fuente de posición por defecto tal y como las devuelve QGeoPositionInfoSource::createDefaultSource(), junto con la clase QNmeaPositionInfoSource, son suficientes para recuperar datos de localización. Sin embargo, en algunos casos los desarrolladores pueden desear escribir su propia fuente de datos de posición personalizada.
El ejemplo Log File Position Source (C++) demuestra cómo subclasificar QGeoPositionInfoSource para crear una fuente de posicionamiento personalizada.
Ejemplos
Ejemplo de fuente de posición de archivo de registro
El Ejemplo de Fuente de Posición de Archivo de Registro demuestra cómo subclasificar QGeoPositionInfoSource para crear una fuente de posicionamiento personalizada.
Ejemplo de información meteorológica
El ejemplo Weather Info muestra cómo utilizar la posición actual del usuario para recuperar contenido local de un servicio web en un plugin C++ para QML.
Clases de posicionamiento
Representa una dirección de un QGeoLocation | |
Describe los parámetros de un área o región a ser monitoreada por proximidad | |
Permite la detección de cambios de proximidad para un conjunto especificado de coordenadas | |
Define un área geográfica circular | |
Define una posición geográfica en la superficie de la Tierra | |
Representa información básica sobre una ubicación | |
Define una trayectoria geográfica | |
Define un polígono geográfico | |
Contiene información recogida sobre una posición, dirección y velocidad globales en un momento determinado | |
Clase base abstracta para la distribución de actualizaciones de posición | |
Define un área geográfica rectangular | |
Contiene información básica sobre un satélite | |
Clase base abstracta para la distribución de actualizaciones de información sobre satélites | |
Define un área geográfica | |
Información posicional utilizando una fuente de datos NMEA | |
Información sobre satélites utilizando una fuente de datos NMEA |
© 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.