Qt 定位 NMEA 插件
概述
Qt 定位包含一个位置插件,该插件解析 NMEA 语句以更新位置。此插件可以使用串行端口、套接字或文件作为源。
可以使用提供者名称 nmea 加载此插件。
参数
以下表格列出了可传递给 nmea 插件的可选参数。
参数 | 描述 |
---|---|
nmea.source | 用于获取 NMEA 数据的源。 |
nmea.baudrate | 串行端口连接使用的波特率,用正整数表示。通常它应该是来自 QSerialPort::BaudRate 枚举值之一。如果未指定参数或不包含正整数,则使用默认值 4800 。 |
nmea.satellite_info_simulation_interval | 在模拟模式下从文件读取卫星信息数据的间隔。 |
不同的来源需要不同的数据提供方式。以下表格列出了为套接字、串行端口和文件输入提供 nmea.source
参数的不同方式。
方案 | 示例 | 描述 |
---|---|---|
socket://hostname:port | socket://localhost:12345 | 使用 socket: 关键字来指定您希望从套接字获取 nmea 数据。将创建一个 TCP 套接字,并尝试使用端口 port 连接到主机 hostname 。在成功连接后,预计将从服务器接收到文本 NMEA 流。 |
serial:portname | serial:/dev/ttyUSB0 | 使用 serial: 关键字来指定您希望从串行端口获取 nmea 数据。插件将尝试建立到端口 portname 的连接,默认波特率为 4800 Bd(波特率值可以使用 nmea.baudrate 参数指定)。在成功连接后,预计将从串行端口接收到文本 NMEA 流。如果您使用 serial: 而不指定任何端口名称,则插件将尝试找到一些已知的串行设备(就像指定了 nmea.source = serial: )。然而,请注意,这不是推荐使用串行端口连接的方法,因为已知设备的列表很小,并且很可能不包括您的硬件。 |
serial:COM1 | ||
serial | ||
filepath | /home/user/nmealog.txt | 使用 file:/// 或完整文件路径来指定本地文件的路径。 |
file:///filepath | file:///home/user/nmealog.txt | |
qrc:///filepath | qrc:///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 公司以及其他世界各地的商标。所有其他商标均为其各自所有者的财产。