跳转到主要内容

一个简单的AIS解析器

项目描述

我需要一个简单的AIS解码器来完成一个小型艺术项目。我没有找到,所以我在我的需求上创建了一个最小限度的工具。解码器是从公共协议文档自动生成的,但由于我使用的字段很少,我没有验证大部分解码。此代码相当粗糙,不注重正确性,因此不应用于任何重要的事情。特别是,它不应该用于船舶导航。

SimpleAIS还提供了一些实用的命令行工具,包括

  • aisgrep - 提取符合给定标准的句子

  • aist - 每行一个文本句子

  • aisburst - 将大量句子文件分割为每个发送者一个文件

  • aisinfo - 为句子文件提供摘要报告,可选地提供每个发送者的详细信息

  • aisdump - 详细输出单个句子,包括位

  • aisstat - 对字段进行基本统计

  • aisrefine - 一种AIS文件的损失性压缩

  • ais2json - 将AIS句子转换为JSON结构

如果您想试用它,但没有AIS数据,请尝试tests/sample.ais。

欢迎贡献。

库使用

以下是一个示例,是aist工具的简化版本,它打印每条完整的AIS消息一行

for sentence in sentences_from_sources(sys.argv[1:):
    result = []
    if sentence.time:
        result.append(sentence.time.strftime(TIME_FORMAT))
    result.append("{:2}".format(sentence.type_id()))
    result.append("{:9}".format(str(sentence['mmsi'])))
    location = sentence.location()
    if location:
        result.append("{:9.4f} {:9.4f}".format(location[0], location[1]))
    if sentence.type_id() == 5:
        result.append("{}->{}".format(sentence['shipname'], sentence['destination']))

    print(" ".join(result))

sentence_from_sources() 函数将从各种来源(本地文件、串行端口、HTTP URL)中提取,只提供到达的完整句子。每个句子都有广泛的可读信息。所有记录的字段都可以通过名称引用。例如,sentence['mmsi']sentence['shipname']location() 方法将返回一个元组,形式为 (longitude, latitude)。缺失或无效的字段将返回 None

命令行使用

假设您有一个包含旧金山地区大量AIS数据的文件。您想从中提取各种类型船只的位置传输,然后绘制信号密度图。此外,您想用星号标记Fort Point和Fort Mason的位置,以便您对所看到的内容有一个大概的了解。为此,您可以使用aisgrep获取相关数据包,并使用aisinfo绘制地图。

$ aisgrep -t 1 -t 2 -t 3 -t 5 -t 18 -t 19 bayarea.ais | \
aisinfo --map --point -122.4775 37.8108 --point -122.4321 37.8065

Found 51 senders in 15419 good sentences with 39 invalid (0.25%).
      top left: -122.9261, 37.9233
  bottom right: -122.3013, 37.5967
         width: 55.06 km
        height: 36.33 km
+------------------------------------------------------------+
|                                            .   .           |
|                                                 .          |
|                                             . . ..         |
|                                         ..1... ....        |
|                                           ...........      |
|                                          ......1... ..     |
|                                       ....*..1*19.....     |
|        .                          ......          . ..    .|
|              .....          .......                        |
|                   . .........                              |
|                       ...                                  |
|                    ... .                                   |
|                 ....  .                                    |
|                ..     .                                    |
|                       .                                    |
|          ..                                                |
|                                                            |
|                                                            |
|.                                                           |
+------------------------------------------------------------+

来源

我的主要协议信息来源在这里:http://catb.org/gpsd/AIVDM.html

更多协议信息在这里:http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-5-201402-I!!PDF-E.pdf

协议校验和在这里:https://en.wikipedia.org/wiki/NMEA_0183

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分布

此版本没有提供源分布文件。请参阅生成分布存档的教程

构建分布

simpleais-0.7.3-py3-none-any.whl (26.4 kB 查看哈希值)

上传时间 Python 3

支持者