You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AIS数据集中的负COG值转换为0-360度标准范围?

解决AIS数据中COG负值转换为0-360度的问题

嘿,这个问题我在处理AIS船舶数据的时候刚好碰到过!其实解决起来很简单,核心是利用航向角度的周期性特点——毕竟航向是环形的,负值本质上就是从0度逆时针偏移的角度,转换成0-360范围的逻辑非常直观。

转换规则与公式

最严谨且通用的公式就是对360取模,不管原COG值是正还是负,这个方法都能直接得到0-360范围内的正确航向:
cog_normalized = cog % 360

举几个实际例子验证:

  • -10 % 360 = 350(逆时针10度等价于顺时针350度)
  • -180 % 360 = 180(正负180度是同一个航向)
  • 370 % 360 = 10(超过360的异常正值也能自动修正)
  • -365 % 360 = 355(连续绕圈的负值也能正确归一化)

Python实现方案

1. 处理单个COG数值

如果只是处理单个值,可以写个简单的函数:

def normalize_cog(cog):
    return cog % 360

# 测试用例
print(normalize_cog(-10))   # 输出 350
print(normalize_cog(180))   # 输出 180
print(normalize_cog(370))   # 输出 10
print(normalize_cog(-365))  # 输出 355

2. 用Pandas批量处理数据集

如果你的AIS数据存在Pandas DataFrame中,直接对COG列应用取模运算即可,效率极高:

import pandas as pd

# 假设你的数据集名为ais_df,COG字段列名为'COG'
# 添加归一化后的新列
ais_df['COG_normalized'] = ais_df['COG'] % 360

# 若要直接替换原COG列,可执行:
# ais_df['COG'] = ais_df['COG'] % 360

3. 处理含异常值的数据集

如果数据里存在非数值类型的异常值(比如字符串、空值),可以先做一步类型转换和过滤:

# 先将非数值的COG值转为NaN
ais_df['COG'] = pd.to_numeric(ais_df['COG'], errors='coerce')

# 只对非空值做归一化处理
ais_df['COG_normalized'] = ais_df['COG'].apply(lambda x: x % 360 if pd.notna(x) else x)

内容的提问来源于stack exchange,提问作者faring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:17:43