最近由于项目需求,需要下载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)
看上面的即可,点转线用的是点集转线这个功能。
PS:XY建立点数据的时候,选择坐标系统,不要选择投影系统!!不然就会出现点不知在哪的情况
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o