Qt 定位 NMEA 插件¶
读取NMEA流以提供位置更新。
概述¶
Qt Positioning 包含一个位置插件,该插件将 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数据。插件将尝试以默认波特率=4800 Bd(波特率值可以使用nmea.baudrate参数指定)连接到端口
portname。成功连接后,预计将从串行端口接收到文本NMEA流。如果您使用serial:而不指定任何端口名称,插件将尝试使用供应商标识符查找已知的串行设备之一。但请注意,这不是推荐的使用串行端口连接的方式,因为已知设备列表很小,很可能不包括您的硬件。
serial:COM1
serial:文件路径
/home/user/nmealog.txt使用 file:/// 或直接使用完整文件路径来指定本地文件的路径。
file:///home/user/nmealog.txtqrc:///filepath
qrc:///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())。在运行时,可以使用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,就无法重新配置以使用其他类型的源数据。