AIS数据下载并处理(python)

23 篇文章 4 订阅
8 篇文章 1 订阅

最近由于项目需求,需要下载AIS数据,其实也就是船舶位置数据。

首先通过百度发现目前一些网站下载的AIS数据都是收费的,如船达通等等。

船达通是只能查找近一个月的船舶轨迹信息,下载需要支付收费。

但是最后我终于找到了一个免费下载AIS数据的网站,并且下面附上了处理说明,可以通过python代码批量处理

通过以下的文档可以详细了解如何下载数据,将AIS数据中的时间、经度、纬度、航速提取出来。

最后通过ArcMap处理成为shp,方便可视化。

我是从中国海洋卫星数据网站下载的。

网站地址:https://osdds.nsoas.org.cn/#/

需要注册后使用。

有关网站注册和注册登录不上的问题,可以去邮件网络官方,我当时用没问题,不了解。

另外不方便借账号。

一、数据说明文档

首先从首页的下载AIS 0-1级产品数据格式说明V1.0.pdf

打开后可以看到,HY-C/D的L1A产品是可以直接使用的,因此从网站上下载该产品

二、数据下载

点击网站首页的数据获取,点击左边的海洋水色卫星数据获取可以得到右边这个界面。

按需求选择。

加入订单,下载即可,我觉得有点麻烦的是,批量勾选,每勾选一次自动跳回第一页= =。

最后就等等审批(应该很快,几分钟?),然后就可以下载了/

推荐使用DownThemAll批量下载器,火狐的插件。

三、数据处理

数据下载下来,压缩包格式,解压后,L1A后缀文件才是AIS数据,是csv格式的,并且用逗号分隔,可以用excel打开。

那么批量处理我主要是分成两个程序了。

1、解压

# -*- coding: utf-8 -*-
"""
Created on Sat Feb  6 22:02:47 2021
解压tar.gz文件
@author: 就是一只白
"""

import tarfile
import os
import glob
def untar(fname, dirs):
    t = tarfile.open(fname)
    t.extractall(path = dirs) 
rootdir = "H:\\AIS\\20210104_20210119\\"
outfolder='H:\\AIS\\20210104_20210119\\process\\'
files = glob.glob(rootdir+"*.tar.gz")
#filelist = os.listdir(rootdir)
for file in files:
    print(file)
    untar(file,outfolder)

2、提取时间、位置等数据

报文的解析可以看pdf文件,CSV文件每行代表一个报文消息,每一列是该条信息的一个字段(如速度、时间)。一共有27个报文类型,不同类型的报文后面的信息字段不同。

我下面的代码只筛选了几种进行处理,因为通过excel表筛选发现其他的我这边没有。

以下代码可以获取两个csv文件,代码注释写了两个文件的区别。

最后其实只需要用position的文件即可,数据有四项:时间、航速、经度、纬度

通过修改下方的mmsi号修改查找的船舶

# -*- coding: utf-8 -*-
"""
Created on Sun Feb  7 10:24:29 2021

@author: jiushiyizhibai
"""


import os
import glob
from pandas.core.frame import DataFrame
import csv
import numpy as np
import datetime
#按照mmsi号查找报文信息
rootdir = "H:\\AIS\\20210104_20210119\\process\\"
outfolder='H:\\AIS\\20210104_20210119\\csv\\'
mmsi='309351666'
files = glob.glob(rootdir+"*.l1a")
result=[]
#filelist = os.listdir(rootdir)
for file in files:
    print(file)
    table=open(file,'r')
    s = [i[:-1].split(',') for i in table.readlines()]
    s=[n for n in s if n[5]==mmsi]
    print(len(s))
    if len(s)>0 :
        for i in s:
            result.append(i)
data=DataFrame(result)
time=[]
speed=[]
lon=[]
lat=[]
for row in data.itertuples():
    if row[4]=='1' or row[4]=='3':
        time.append(datetime.datetime.strptime(row[1],'%Y-%m-%d %H:%M:%S'))
        speed.append(float(row[9]))
        lon.append(float(row[11]))
        lat.append(float(row[12]))
    elif row[4]=='27':
        time.append(datetime.datetime.strptime(row[1],'%Y-%m-%d %H:%M:%S'))
        speed.append(float(row[12]))
        lon.append(float(row[10]))
        lat.append(float(row[11]))
    else:
        print("没有查到此类报文:",row[4])
        
presult = DataFrame({'time':time,
                      'speed':speed,
                      'lon':lon,
                      'lat':lat})
presult=presult.sort_values(by='time')
#['time','speed','lon','lat']
#print(data)
data=data.values
#输出文件csv,这里是只输出时间速度和位置
presult.to_csv(outfolder+mmsi+'_AIS_position.csv',index = False)
#输出所有报文信息的文件
csvfile = open(outfolder+mmsi+'_AIS.csv', 'w')  #打开方式还可以使用file对象
writer = csv.writer(csvfile)
writer.writerows(data)
csvfile.close()

3、将csv转成点和线的shapefile轨迹文件(ArcMap)

如何将Excel经纬度坐标数据导入ArcGIS

看上面的即可,点转线用的是点集转线这个功能。

PS:XY建立点数据的时候,选择坐标系统,不要选择投影系统!!不然就会出现点不知在哪的情况

  • 21
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
### 回答1: AIS(Automatic Identification System)是一种基于无线电技术的自动识别系统,常用于航海领域的船舶定位和通信。使用Python进行AIS数据的可视化是一种常见且有效的方式。 要进行AIS数据的可视化,首先需要获取AIS数据。可以通过相关的API或者数据库来获得实时或历史AIS数据。在Python中,可以使用合适的库(如pandas)来处理和读取数据。 一旦获得AIS数据,接下来可以使用各种Python的可视化库,如matplotlib和seaborn,来创建图表和图形。下面是一些常用的AIS数据可视化方法: 1. 船舶位置可视化:使用地图库如basemap或者folium,可以将AIS数据中的船舶位置点绘制在地图上,以显示船舶在海洋中的实时位置。 2. 航线可视化:通过将船舶的历史位置点用线条连接起来,可以绘制出船舶的航线轨迹。这可以帮助分析船舶的移动模式和航线选择。 3. 船舶状态可视化:AIS数据中通常包含了船舶的速度、航向等信息。可以使用柱形图、折线图等方式将这些数据可视化,以便更好地理解和分析船舶的状态变化。 4. 船舶密度热力图:将AIS数据中的船舶位置点进行聚类,并使用热力图展示各个聚类区域的密度变化,可以帮助我们了解船舶活动的热点区域。 5. 船舶速度分布直方图:根据AIS数据中的船舶速度信息,可以创建直方图,以展示船舶速度的分布情况。这有助于了解船舶的运行状态和速度特征。 使用Python进行AIS数据的可视化可以帮助我们更好地理解和分析船舶的行为模式、流量分布以及异常情况。同时,Python具有丰富的数据处理和可视化库,使得我们可以轻松地实现对AIS数据的可视化分析。 ### 回答2: AIS数据是指船舶自动识别系统(Automatic Identification System)所产生的船舶信息数据。使用Python进行AIS数据的可视化可以帮助我们更好地理解和分析船舶活动、交通流量等情况。 要进行AIS数据可视化,首先需要获取AIS数据。可以通过各种途径获得,例如航运公司的数据提供商、船舶跟踪网站等。获取到AIS数据后,我们可以使用Python数据处理库(例如Pandas)来读取和处理数据。 在数据处理阶段,我们可以对AIS数据进行筛选、清洗和预处理。例如,可以根据时间、地理位置等条件筛选出特定区域、特定时间段的数据。同时,我们还可以将AIS数据与其他地理信息数据(例如地图数据)进行整合,以便进行更全面的可视化分析。 接下来,我们可以使用Python数据可视化库(例如Matplotlib、Seaborn)来进行AIS数据的可视化。常见的可视化方式包括散点图、折线图、热力图等。例如,我们可以使用散点图来展示船舶在不同时间和地理位置的分布情况,以及船舶的速度和航向等信息。同时,我们也可以使用折线图来展示船舶的轨迹和航线等。 此外,我们还可以进行更高级的可视化分析,例如基于AIS数据的航行路径规划、船舶活动热点分析等。这些分析可以帮助航运公司、港口管理机构等从AIS数据中获得更多有价值的信息,并支持相关决策的制定和优化。 总之,利用Python进行AIS数据的可视化可以帮助我们更好地理解和分析船舶活动情况。通过适当选择和应用数据处理和可视化工具,我们可以更直观地展示AIS数据的特征和规律,为相关行业和领域提供更好的决策支持。 ### 回答3: AIS数据(船舶自动识别系统)是一种用于船舶位置和运行状态的全球性信息系统。通过AIS数据,可以获取船舶的位置、航向、航速、船名等信息。将AIS数据进行可视化是一种将数据以图形化形式展示的方法,能够更直观地了解船舶的位置和运行状态。 Python是一种功能强大的编程语言,拥有丰富的数据处理和可视化库。在Python中,可以使用著名的数据处理库pandas来处理AIS数据。首先,我们可以使用pandas读取AIS数据,并对数据进行清洗和整理,剔除无效或重复的数据。 接着,可以使用Python的可视化库matplotlib对AIS数据进行可视化。使用matplotlib可以绘制折线图、散点图、热力图等多种图表,以直观地展示船舶的位置和运行状态。例如,可以通过绘制散点图来表示船舶在海上的分布情况,使用不同的颜色或大小来表示船舶的不同属性。 此外,还可以使用Python的地理信息处理库geopandas来将AIS数据与地理信息数据进行融合,实现更丰富的可视化效果。例如,可以将AIS数据与地图数据进行叠加,以在地图上显示船舶的位置和运行路径。 综上所述,通过使用Python进行AIS数据可视化,我们可以更直观地了解船舶的位置和运行状态。这不仅有助于海事监管和船舶管理,还可以提供有关船舶运输和航行安全的重要信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是一只白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值