Spec-Zone.ru › Qt 5.6

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

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

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

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

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

Эти данные можно извлечь с помощью различных методов. Одним из наиболее известных методов позиционирования является GPS (Глобальная система позиционирования), общедоступная система, использующая радиоволновые сигналы, принимаемые от спутников на орбите Земли, для расчета точного местоположения и времени приемника. Другим популярным методом является «Позиционирование по идентификатору ячейки», которое использует идентификатор ячейки базовой станции, которая в настоящее время обслуживает принимающее устройство, для расчета приблизительного местоположения. Эти и другие методы позиционирования могут быть использованы с API местоположений; единственное требование к источнику данных местоположения в 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 в режиме реального времени (например, при потоковой передаче данных со спутникового приемника GPS) или в режиме моделирования (например, при чтении из файла журнала NMEA). В режиме моделирования источник будет генерировать обновления в соответствии со временем метки каждой фразы NMEA, чтобы воспроизвести «повтор» записанных данных.

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

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

Примеры

Пример Flickr

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

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

QGeoAddress

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

QGeoAreaMonitorInfo

Описывает параметры области или региона для мониторинга близости

QGeoAreaMonitorSource

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

QGeoCircle

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

QGeoCoordinate

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

QGeoLocation

Представляет основную информацию о местоположении

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/archives/qt-5.6/location-positioning-cpp.html

Spec-Zone.ru

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