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