Qt 定位 NMEA 插件

概述

Qt 定位包含一个位置插件,该插件解析 NMEA 语句以更新位置。此插件可以使用串行端口、套接字或文件作为源。

可以使用提供者名称 nmea 加载此插件。

参数

以下表格列出了可传递给 nmea 插件的可选参数。

参数描述
nmea.source用于获取 NMEA 数据的源。
nmea.baudrate串行端口连接使用的波特率,用正整数表示。通常它应该是来自 QSerialPort::BaudRate 枚举值之一。如果未指定参数或不包含正整数,则使用默认值 4800
nmea.satellite_info_simulation_interval在模拟模式下从文件读取卫星信息数据的间隔。

不同的来源需要不同的数据提供方式。以下表格列出了为套接字、串行端口和文件输入提供 nmea.source 参数的不同方式。

方案示例描述
socket://hostname:portsocket://localhost:12345使用 socket: 关键字来指定您希望从套接字获取 nmea 数据。将创建一个 TCP 套接字,并尝试使用端口 port 连接到主机 hostname。在成功连接后,预计将从服务器接收到文本 NMEA 流。
serial:portnameserial:/dev/ttyUSB0使用 serial: 关键字来指定您希望从串行端口获取 nmea 数据。插件将尝试建立到端口 portname 的连接,默认波特率为 4800 Bd(波特率值可以使用 nmea.baudrate 参数指定)。在成功连接后,预计将从串行端口接收到文本 NMEA 流。如果您使用 serial: 而不指定任何端口名称,则插件将尝试找到一些已知的串行设备(就像指定了 nmea.source = serial:)。然而,请注意,这不是推荐使用串行端口连接的方法,因为已知设备的列表很小,并且很可能不包括您的硬件。
serial:COM1
serial
filepath/home/user/nmealog.txt使用 file:/// 或完整文件路径来指定本地文件的路径。
file:///filepathfile:///home/user/nmealog.txt
qrc:///filepathqrc:///nmealog.txt使用 qrc:/// 前缀来指定应用程序资源中的文件路径。

注意: 如果未指定 nmea.source 参数,则插件将尝试找到已知的串行设备(就像指定了 nmea.source = serial:)。

位置源使用示例

以下示例展示了如何使用不同的数据源创建一个 nmea 位置源

QML

// text file
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "qrc:///nmealog.txt" }
}

// socket
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "socket://localhost:22222" }
}

// serial port
PositionSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "serial:/dev/ttyACM0" }
    PluginParameter { name: "nmea.baudrate"; value: 4800 }
}

C++

// text file
QVariantMap params;
params["nmea.source"] = "qrc:///nmealog.txt";
QGeoPositionInfoSource *textPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

// socket
params["nmea.source"] = "socket://localhost:22222";
QGeoPositionInfoSource *socketPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

// serial port
params["nmea.source"] = "serial:/dev/ttyACM0";
params["nmea.baudrate"] = 4800;
QGeoPositionInfoSource *serialPositionSource = QGeoPositionInfoSource::createSource("nmea", params, this);

注意:一旦创建了一个 位置源,就不能重新配置它以使用其他类型的源数据。

卫星信息源使用示例

除了位置信息之外,nmea 插件还能够提供卫星信息。

QML

// serial port
SatelliteSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "serial:/dev/ttyUSB0" }
    PluginParameter { name: "nmea.baudrate"; value: 9600 }
}

// socket
SatelliteSource {
    name: "nmea"
    PluginParameter { name: "nmea.source"; value: "socket://localhost:22222" }
}

C++

// serial port
QVariantMap parameters;
parameters["nmea.source"] = "serial:/dev/ttyUSB0";
params["nmea.baudrate"] = 9600;
QGeoSatelliteInfoSource *serialSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

// socket
parameters["nmea.source"] = "socket://localhost:22222";
QGeoSatelliteInfoSource *socketSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

设置自定义模拟速度

如果您想使用 QGeoSatelliteInfoSource 来读取 NMEA 流格式的文件,您也可以使用额外的参数 "nmea.satellite_info_simulation_interval"。此参数用于指定卫星信息消息的播放速率(以毫秒为单位)。最小允许频率由 minimumUpdateInterval() 指定。如果您指定了一个更小的值,它将被忽略。如果没有指定值,则默认值为 qMax(100, minimumUpdateInterval())。在运行时,可以使用 QNmeaSatelliteInfoSource::setBackendProperty() 方法更新此参数。

// file
QVariantMap parameters;
parameters["nmea.source"] = "qrc:///nmealog.txt";
parameters["nmea.satellite_info_simulation_interval"] = 1000;
QGeoSatelliteInfoSource *fileSource = QGeoSatelliteInfoSource::createSource("nmea", parameters, this);

此参数不适用于位置源,因为 NMEA 协议已经在位置消息中包含时间戳。这些时间戳在用文件作为数据源与 QGeoPositionInfoSource 一起使用时,用于模拟正确的信息速率。

注意:一旦创建了一个 QGeoSatelliteInfoSource,就不能重新配置它以使用其他类型的源数据。

© 2024 Qt 公司 Ltd。本文件中的文档贡献者享有其各自版权。本文件提供的文档是根据 Free Software Foundation 发布的 GNU自由文档许可证版本 1.3 的条款提供的。Qt 以及相应的标志是芬兰的 Qt 公司以及其他世界各地的商标。所有其他商标均为其各自所有者的财产。