Spec-Zone.ru › Qt 5.12

Позиционирование (C++)

Позиционирование

Компонент позиционирования API Qt Location связан с географическим положением, размером и адресом места. Позиционирование содержит класс QGeoCoordinate, содержащий широту, долготу и высоту в метрах. QGeoLocation содержит QGeoCoordinate плюс информацию об адресе и размерах (прямоугольник ограничивающей рамки), так что позиции могут быть больше, чем просто математические точки. Можно отслеживать перемещения в пределах или за пределами определенных областей ограничивающей рамки. API также позволяет разработчику контролировать источник информации о местоположении.

Данные местоположения включают точно определённое положение на поверхности Земли — как предоставляется координатами широты и долготы — вместе с сопутствующими данными, такими как:

  • Дата и время, в которые было сообщено о положении
  • Скорость устройства, которое сообщило о положении
  • Высота сообщённого положения (высота над уровнем моря)
  • Азимут устройства в градусах, относительно истинного севера

Эти данные могут быть извлечены различными способами. Один из наиболее известных методов позиционирования — GPS (Глобальная система позиционирования), общедоступная система, которая использует радиоволновые сигналы, принимаемые со спутников, вращающихся вокруг Земли, для расчёта точного положения и времени приёмника. Другой популярный метод — «Позиционирование по идентификатору ячейки», который использует идентификатор ячейки соты, которая в данный момент обслуживает приёмное устройство, для расчёта его приблизительного местоположения. Эти и другие методы позиционирования могут использоваться с API Location; единственное требование к источнику данных местоположения в API — это предоставление координат широты и долготы со значением даты/времени, с возможностью предоставления других указанных выше атрибутов.

Источники данных местоположения создаются путём наследования от QGeoPositionInfoSource и предоставления объектов QGeoPositionInfo через сигнал QGeoPositionInfoSource::positionUpdated(). Клиенты, которым требуются данные о местоположении, могут подключиться к сигналу positionUpdated() и вызвать startUpdates() или requestUpdate(), чтобы инициировать распределение данных о местоположении. Распределение данных о местоположении может быть остановлено путём вызова функции stopUpdates().

На некоторых платформах может быть доступен источник позиций по умолчанию. Вызовите QGeoPositionInfoSource::createDefaultSource() для создания экземпляра источника позиций по умолчанию; метод возвращает 0, если для платформы нет источника по умолчанию.

Если возникает проблема с доступом к источнику информации, то генерируется сигнал error().

Класс QGeoAreaMonitorSource позволяет клиентским приложениям получать уведомления, когда принимающее устройство вошло или вышло из определённой области, заданной координатами и радиусом. Если платформа поддерживает мониторинг области, QGeoAreaMonitorSource::createDefaultMonitor() возвращает экземпляр монитора области по умолчанию.

Информацию о спутниках также можно распространять через класс QGeoSatelliteInfoSource. Вызовите QGeoSatelliteInfoSource::createDefaultSource() для создания экземпляра источника данных о спутниках по умолчанию для платформы, если он доступен. В противном случае клиенты могут наследовать от него, чтобы предоставить собственный источник данных о спутниках.

Запрос данных о местоположении от источников данных

Чтобы получить данные от источника, подключитесь к его сигналу positionUpdated(), а затем вызовите либо startUpdates(), либо requestUpdate(), чтобы начать.

Вот пример клиента, который получает данные от источника данных местоположения по умолчанию, возвращённого QGeoPositionInfoSource::createDefaultSource():

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;
    }
};

Управление аспектами источников данных

Метод QGeoPositionInfoSource::setUpdateInterval() может использоваться для управления скоростью получения обновлений местоположения. Например, если клиентскому приложению требуется обновление один раз в 30 секунд, оно может вызвать setUpdateInterval(30000). (Если интервал обновления не установлен или setUpdateInterval() вызывается со значением 0, источник использует интервал по умолчанию или какую-либо другую внутреннюю логику для определения того, когда должны быть предоставлены обновления.)

QGeoPositionInfoSource::setPreferredPositioningMethods() позволяет клиентским приложениям запросить использование определённого типа метода позиционирования. Например, если приложение предпочитает использовать только спутниковое позиционирование, которое обеспечивает довольно точное позиционирование на открытом воздухе, но может быть большим потребителем ресурсов питания, оно может вызвать этот метод со значением QGeoPositionInfoSource::SatellitePositioningMethods. Однако этот метод следует использовать только в специализированных клиентских приложениях; в большинстве случаев методы позиционирования по умолчанию не следует изменять, так как источник может использовать различные методы позиционирования, которые могут быть полезны приложению.

Данные NMEA

NMEA — это распространённый текстовый протокол для указания навигационных данных. Для удобства предоставляется QNmeaPositionInfoSource, чтобы позволить клиентским приложениям читать и распространять данные NMEA в режиме реального времени (например, при потоковой передаче данных со спутникового устройства) или в режиме моделирования (например, при чтении из файла журнала NMEA). В режиме моделирования источник будет генерировать обновления в соответствии со временем отметки каждого предложения NMEA, чтобы воспроизвести «воспроизведение» записанных данных.

Как правило, возможности, предоставляемые источником позиций по умолчанию, возвращённым QGeoPositionInfoSource::createDefaultSource(), наряду с классом QNmeaPositionInfoSource, достаточны для получения данных о местоположении. Однако в некоторых случаях разработчики могут захотеть написать свой собственный источник данных о местоположении.

Пример «Источник позиций файла журнала» (C++) демонстрирует, как наследовать от QGeoPositionInfoSource, чтобы создать пользовательский источник позиционирования.

Примеры

Пример Flickr

Пример Flickr использует текущее местоположение для загрузки миниатюрных изображений из Flickr, относящихся к текущему местоположению.

Классы позиционирования

QGeoAddress

Представляет адрес QGeoLocation

QGeoAreaMonitorInfo

Описывает параметры области или региона, которые необходимо отслеживать для близости

QGeoAreaMonitorSource

Включает возможность обнаружения изменений близости для набора заданных координат

QGeoCircle

Определяет круговую географическую область

QGeoCoordinate

Определяет географическое положение на поверхности Земли

QGeoLocation

Представляет основные сведения о местоположении

QGeoPath

Определяет географический путь

QGeoPolygon

Определяет географический многоугольник

QGeoPositionInfo

Содержит информацию, собранную о глобальном положении, направлении и скорости в определённый момент времени

QGeoPositionInfoSource

Абстрактный базовый класс для распространения обновлений местоположения

QGeoRectangle

Определяет прямоугольную географическую область

QGeoSatelliteInfo

Содержит основные сведения о спутнике

QGeoSatelliteInfoSource

Абстрактный базовый класс для распространения обновлений информации о спутниках

QGeoShape

Определяет географическую область

QNmeaPositionInfoSource

Информация о местоположении, использующая источник данных NMEA

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/location-positioning-cpp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API