扭曲定位

twisted.positioning:扭曲中的地理定位

介绍

twisted.positioning 是一个用于使用扭曲进行地理空间定位(尝试找出您在地球上的位置)的包。

高级概述

twisted.positioning 中,您编写一个 IPositioningReceiver 实现,该实现将在每次知道有关您位置的一些信息时被调用(例如位置、海拔、航向……)。该包提供了一个基类,BasePositioningReceiver 您可能想使用它来实现所有接收器方法作为存根。

其次,您将需要一个定位源,它将调用您的 IPositioningReceiver。目前,twisted.positioning 提供了一个 NMEA 实现,它是一个由许多定位设备(通常通过串行端口)使用的标准协议。

示例

nmealogger.py

#!/usr/bin/env python
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
"""
Connects to an NMEA device, logs beacon information and position.
"""

import sys

from twisted.internet import reactor, serialport
from twisted.positioning import base, nmea
from twisted.python import log, usage


class PositioningReceiver(base.BasePositioningReceiver):
    def positionReceived(self, latitude, longitude):
        log.msg(f"I'm at {latitude} lat, {longitude} lon")

    def beaconInformationReceived(self, beaconInformation):
        template = "{0.seen} beacons seen, {0.used} beacons used"
        log.msg(template.format(beaconInformation))


class Options(usage.Options):
    optParameters = [
        ["baud-rate", "b", 4800, "Baud rate (default: 4800)"],
        ["serial-port", "p", "/dev/ttyS0", "Serial Port device"],
    ]


def run():
    log.startLogging(sys.stdout)

    opts = Options()
    try:
        opts.parseOptions()
    except usage.UsageError as message:
        print(f"{sys.argv[0]}: {message}")
        return

    positioningReceiver = PositioningReceiver()
    nmeaReceiver = nmea.NMEAAdapter(positioningReceiver)
    proto = nmea.NMEAProtocol(nmeaReceiver)

    port, baudrate = opts["serial-port"], opts["baud-rate"]
    serialport.SerialPort(proto, port, reactor, baudrate=baudrate)

    reactor.run()


if __name__ == "__main__":
    run()
  • 连接到串行端口上的 NMEA 设备,并在收到位置时报告。