Qt Positioning NMEA 插件

概述

Qt Positioning 包含一个位置插件,可将 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:/dev/ttyUSB0使用serial:关键字指定要从串行端口获取 NMEA 数据。插件将尝试与portname 端口建立连接,默认波特率为 4800 Bd(可使用nmea.baudrate参数指定波特率值)。连接成功后,预计将从串行端口接收文本 NMEA 数据流。如果使用serial:(串口:)而不使用任何端口名称,插件将尝试使用供应商标识符查找已知的串口设备。但请注意,这不是使用串行端口连接的推荐方式,因为知名设备列表较小,很可能不包括您的硬件。
serial:COM1
serial:
文件路径/home/user/nmealog.txt使用file:///或全文件路径指定本地文件的路径。
file:///filepathfile:///home/user/nmealog.txt
qrc:///filepathqrc:///nmealog.txt使用qrc:///前缀指定应用程序资源中的文件路径。

注意: 如果未指定nmea.source 参数,插件将尝试查找一个众所周知的串行设备(如同指定了nmea.source = serial: )。

位置源使用示例

以下示例展示了如何使用不同的数据源创建nmea PositionSource

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

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

卫星信息源使用示例

除位置信息外,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 ,就无法重新配置以使用其他类型的源数据。

© 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.