ポジショニング (C++)
ポジショニング
Qt Location API のポジショニング・コンポーネントは、ある場所の地理的な位置、大きさ、住所に関するものです。ポジショニングには、緯度、経度、高度(メートル単位)を含むQGeoCoordinate クラスがあります。QGeoLocation には、QGeoCoordinate に住所とサイズ情報(バウンディングボックス)を加えたものがあり、位置を数学的な点以上にすることができます。定義されたバウンディング・ボックス領域への移動や、領域外への移動を監視することができます。このAPIでは、開発者が位置情報のソースを制御することもできます。
位置情報には、緯度経度座標によって提供される、地球表面上の正確に指定された位置と、以下のような関連データが含まれます:
- 位置が報告された日時
- 位置を報告したデバイスの速度
- 報告された位置の高度(海面からの高さ)
- 真北に対するデバイスの方位(度単位
このデータは様々な方法で抽出することができる。最もよく知られている測位方法の一つはGPS(全地球測位システム)であり、地球周回衛星から受信した電波信号を利用して受信機の正確な位置と時刻を計算する一般に利用可能なシステムである。もう一つの一般的な方法は「セル識別子測位」であり、これは受信デバイスに現在サービスを提供しているセルサイトのセル識別子を使用して、そのおおよその位置を計算する。API内の位置情報データソースの唯一の要件は、緯度経度座標と日付/時刻値を提供することであり、オプションで上記の他の属性を提供することもできる。
ロケーション・データ・ソースは、QGeoPositionInfoSource をサブクラス化し、QGeoPositionInfo オブジェクトをQGeoPositionInfoSource::positionUpdated() シグナルで提供することで作成される。位置データを必要とするクライアントは、positionUpdated ()シグナルに接続し、startUpdates ()またはrequestUpdate ()を呼び出して、位置データの配布をトリガーすることができる。stopUpdates ()関数を呼び出すことで、位置情報の配信を停止することができる。
プラットフォームによっては、デフォルトの位置ソースが利用できる場合があります。QGeoPositionInfoSource::createDefaultSource() を呼び出して、既定の位置ソースのインスタンスを作成します。プラットフォームで既定のソースが使用できない場合、このメソッドはnullptr
を返します。
情報ソースへのアクセスで問題が発生すると、errorOccurred() シグナルが出力されます。
QGeoAreaMonitorSource クラスを使用すると、受信デバイスが座標と半径で指定された特定のエリアに移動したとき、またはエリアから移動したときに、クライアント・アプリケーションに通知を送ることができます。プラットフォームがエリア・モニタのビルトイン・サポートを提供している場合、QGeoAreaMonitorSource::createDefaultSource ()メソッドはデフォルトのエリア・モニタのインスタンスを返します。
衛星情報は、QGeoSatelliteInfoSource クラスを使用して配信することもできます。QGeoSatelliteInfoSource::createDefaultSource() を呼び出して、プラットフォームのデフォルトの衛星データ・ソースのインスタンスを作成します。または、クライアントがこのクラスをサブクラス化して、カスタムの衛星データ・ソースを提供することもできます。
データソースからの位置情報の要求
データ・ソースからデータを受信するには、positionUpdated() シグナルに接続し、startUpdates() またはrequestUpdate() を呼び出して開始する。
以下は、QGeoPositionInfoSource::createDefaultSource ()によって返されたデフォルトの位置情報データ・ソースからデータを受信するクライアントの例である:
クラスMyClass :publicQObject { Q_OBJECTpublic: MyClass(QObject*parent = 0) : QObject(parent) { *source = 0 QGeoPositionInfoSource*source =QGeoPositionInfoSource::createDefaultSource(this);if(source) { connect(source,SIGNAL(positionUpdated(QGeoPositionInfo)), this,SLOT(positionUpdated(QGeoPositionInfo))); source->startUpdates(); } }private slots:voidpositionUpdated(constQGeoPositionInfo&info) { qDebug() << "Position updated:" << info; };
データ・ソースの側面を制御する
QGeoPositionInfoSource::setUpdateInterval() メソッドを使用すると、位置の更新を受け取る速度を制御できる。たとえば、クライアント・アプリケーションが 30 秒に 1 回の更新しか必要としない場合、setUpdateInterval(30000)
を呼び出すことができます。更新間隔が設定されていない場合、またはsetUpdateInterval() が値 0 で呼び出された場合、ソースは既定の間隔を使用するか、その他の内部ロジックを使用して更新のタイミングを決定します。
QGeoPositionInfoSource::setPreferredPositioningMethods() を使用すると、クライアント・アプリケーションは、特定のタイプの位置決め方法の使用を 要求できるようになる。たとえば、アプリケーションで衛星測位のみを使用することを希望する場合、かなり正確な屋外測位が可能ですが、電力リソースを大量に消費する可能性があるため、QGeoPositionInfoSource::SatellitePositioningMethods の値でこのメソッドを呼び出すことができます。ただし、このメソッドは特殊なクライアント・アプリケーションでのみ使用する必要があります。ほとんどの場合、デフォルトの測位方法を変更すべきではありません。
NMEAデータ
NMEAは、航法データを指定するための一般的なテキストベースのプロトコルである。便宜上、QNmeaPositionInfoSource 、クライアント・アプリケーションがリアルタイム・モード(GPSデバイスからストリーミングする場合など)またはシミュレーション・モード(NMEAログ・ファイルから読み込む場合など)のいずれかでNMEAデータを読み取り、配信できるようにします。シミュレーション・モードでは、ソースは各NMEAセンテンスのタイムスタンプに従って更新を発行し、記録されたデータの「リプレイ」を生成します。
一般的に、QNmeaPositionInfoSource クラスとともにQGeoPositionInfoSource::createDefaultSource() によって返されるデフォルトの位置ソースによって提供される機能は、位置データを取得するのに十分です。しかし、場合によっては、開発者は独自のカスタム位置データソースを書きたいと思うかもしれない。
ログファイル位置情報ソース(C++)の例では、QGeoPositionInfoSource をサブクラス化してカスタム位置情報ソースを作成する方法を示しています。
例
ログファイル位置ソースの例
ログファイルポジションソースの例では、QGeoPositionInfoSource をサブクラス化し、カスタムポジショニングソースを作成する方法を示します。
天気情報の例
Weather Info の例では、QML の C++ プラグインで、ユーザーの現在位置を利用してウェブサービスからローカルコンテンツを取得する方法を示しています。
測位クラス
QGeoLocation のアドレスを表します。 | |
近接を監視するエリアや地域のパラメータを記述します。 | |
指定された座標セットに対する近接の変化の検出を有効にする | |
円形の地理領域を定義します | |
地球の表面上の地理的位置を定義する | |
位置に関する基本情報を表す | |
地理パスを定義 | |
地理的な多角形を定義する | |
特定の時点における全地球的な位置、方向、速度に関する情報が含まれています。 | |
位置の更新を配信するための抽象的な基本クラスです。 | |
矩形の地理エリアを定義する | |
衛星の基本情報を含む | |
衛星情報更新配信のための抽象ベースクラス | |
地理エリアを定義する | |
NMEA データソースを使用した位置情報 | |
NMEA データソースを使用した衛星情報 |
© 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.