配置 (C++)
配置
Qt Location APIの「位置情報」コンポーネントは、ある場所の地理的な位置、サイズ、および住所に関するものです。「位置情報」には、緯度、経度、および高度(メートル単位)を含むQGeoCoordinate クラスが含まれています。QGeoLocation には、QGeoCoordinate に加え、住所およびサイズ情報(バウンディングボックス)が含まれており、位置情報を単なる数学的な点以上のものとして扱うことができます。 定義されたバウンディングボックス領域への進入や退出を監視することができます。また、このAPIを使用すると、開発者は位置情報の取得元を制御することも可能です。
位置データには、緯度・経度の座標によって表される地球表面上の正確に指定された位置に加え、次のような関連データが含まれます:
- 位置情報が報告された日時
- 位置情報を報告したデバイスの速度
- 報告された位置の高度(海抜)
- 真北を基準とした端末の方位(度単位)
このデータは、さまざまな方法で抽出することができます。位置特定において最もよく知られている方法の一つがGPS(全地球測位システム)です。これは、地球を周回する衛星から受信した電波信号を用いて、受信機の正確な位置と時刻を算出する、一般に利用可能なシステムです。 もう 1 つの一般的な手法は「セル識別子による位置特定」であり、これは現在受信デバイスをサービス提供している基地局のセル識別子を使用して、そのおおよその位置を算出します。 これらの位置特定手法やその他の手法はすべて、Location API で利用可能です。API 内の位置データソースに対する唯一の要件は、日付/時刻値を含む緯度・経度の座標を提供することであり、上記に挙げたその他の属性を提供することも可能です。
位置情報データソースは、QGeoPositionInfoSource をサブクラス化し、QGeoPositionInfoSource::positionUpdated()シグナルを通じてQGeoPositionInfo オブジェクトを提供することで作成されます。位置情報を必要とするクライアントは、positionUpdated()シグナルに接続し、startUpdates()またはrequestUpdate()を呼び出すことで、位置情報の配信をトリガーできます。位置情報の配信は、stopUpdates()関数を呼び出すことで停止できます。
一部のプラットフォームでは、デフォルトの位置情報ソースが利用可能な場合があります。QGeoPositionInfoSource::createDefaultSource() を呼び出すと、デフォルトの位置情報ソースのインスタンスを作成できます。そのプラットフォームでデフォルトのソースが利用できない場合、このメソッドはnullptr を返します。
情報ソースへのアクセスで問題が発生した場合、errorOccurred() シグナルが発信されます。
QGeoAreaMonitorSource クラスを使用すると、受信デバイスが座標と半径で指定された特定のエリア内に入ったとき、またはそのエリア外に出たときに、クライアントアプリケーションに通知することができます。プラットフォームがエリア監視の組み込みサポートを提供している場合、QGeoAreaMonitorSource::createDefaultSource() メソッドはデフォルトのエリアモニターのインスタンスを返します。
衛星情報も、QGeoSatelliteInfoSource クラスを介して配信できます。利用可能な場合は、QGeoSatelliteInfoSource::createDefaultSource() を呼び出して、プラットフォームのデフォルトの衛星データソースのインスタンスを作成します。あるいは、クライアントはこれをサブクラス化して、カスタム衛星データソースを提供することもできます。
データソースからの位置情報の取得
データソースからデータを受信するには、そのpositionUpdated()シグナルに接続し、startUpdates()またはrequestUpdate()のいずれかを呼び出して開始します。
以下は、QGeoPositionInfoSource::createDefaultSource() によって返されるデフォルトの位置情報データソースからデータを受信するクライアントの例です。
classMyClass :publicQObject
{
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:
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文のタイムスタンプに従って更新情報を送信し、記録されたデータの「再生」を行います。
通常、QGeoPositionInfoSource::createDefaultSource() によって返されるデフォルトの位置情報ソースが提供する機能と、QNmeaPositionInfoSource クラスを組み合わせれば、位置データの取得には十分です。ただし、場合によっては、開発者が独自の位置データソースを実装したいこともあるでしょう。
「ログファイル位置情報ソース (C++)」のサンプルでは、QGeoPositionInfoSource をサブクラス化してカスタム位置情報ソースを作成する方法を示しています。
サンプル
ログファイル位置ソースのサンプル
「ログファイル位置ソースの例」では、QGeoPositionInfoSource をサブクラス化して、カスタム位置指定ソースを作成する方法を示しています。
天気情報サンプル
「天気情報」のサンプルでは、QML用のC++プラグインにおいて、ユーザーの現在位置を使用してWebサービスからローカルコンテンツを取得する方法を示しています。
位置情報関連クラス
QGeoLocationの住所を表します | |
近接を監視するエリアまたは地域のパラメータを記述します | |
指定された座標セットに対する近接状態の変化を検出できるようにします | |
円形の地理的領域を定義します | |
地球の表面上の地理的位置を定義します | |
位置に関する基本情報を表します | |
地理的な経路を定義します | |
地理的多角形を定義します | |
特定の時点における全球的な位置、方向、および速度に関する情報を含む | |
位置情報の更新を配信するための抽象基底クラス | |
長方形の地理的領域を定義する | |
衛星に関する基本情報を含む | |
衛星情報の更新を配信するための抽象基底クラス | |
地理的領域を定義する | |
NMEAデータソースを使用した位置情報 | |
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.