世界海洋地图集(WOA)数据使用方法介绍
1、WOA 数据简介
世界海洋地图集(WOA)是根据世界海洋数据库(WOD)的剖面数据,经过客观分析、质 量控制的温度、盐度、溶解氧、磷酸盐、硅酸盐、硝酸盐、混合层深度、密度、电导率、氧 饱和百分比、表观氧利用率平均值的集合。它可用于为各种海洋模型创建边界和/或初始条 件,验证海洋的数值模拟,以及验证卫星数据。网站提供下载的数据类型包括 nc、csv 与 ArcGis 兼容的 shape 文件和压缩网格格式。该数据集的地理坐标系统为 EPSG:4326(WGS84), 数据集的主页为https://www.ncei.noaa.gov/products/world-ocean-atlas
WOA 由美国国家海洋和大气管理局(NOAA)气候与全球变化项目资助,地图集所依据的 数据在 WOD2018 中,由美国国家环境信息中心(NCEI)在线发布。许多数据是从政府间海洋 学委员会国际海洋资料和信息交换委员会(IOC/IODE)全球海洋学数据考古和救援项目 (GODAR)以及 IOC/IODE 世界海洋数据库项目(WOD)获得的。
WOA 数据从 1994 年至 2018 年共发布过 7 个版本,分别为 1994、1998、2001、2005、2009、 2013 和 2018 版,新版本的 WOA 与 WOD 的每一次重大更新一起发布,其中 WOD 是世界上最大 的公开可用、格式统一、质量可控的海表以下海洋剖面数据集合。
WOA18 于 2018 年 9 月 30 日发布,是目前的最新版本。它包括增加到 WOD 的大约 300 万 个新的海洋学模型,以及更新和修正的质量控制。WOA18 温度和盐度场的发布是为了从 WOA 用户社区获得源质量保证,该用户社区已经成功地识别出先前版本中的可疑特征。
WOA18 提供数据和元数据的下载,以及选定区域对指定变量的图像进行在线预览。关于 各类数据的处理方法,见 WOA2018 的 Publications 板块。
以下介绍网格分辨率、可用统计场的类型,以及这些变量的标准深度等级、时间跨度、 时间周期,以及文件的命名规则。
1.1 可用网格分辨率
WOA18 客观分析了 1/4°和 1°经纬度网格下的气候态平均场。用于质量控制的统计场 (但不是客观分析的气候态平均值)可在 5°经纬度网格下使用。
1.2 可用时间跨度和时间周期
时间跨度是指在气候态平均值和统计场中表示的年份。时间周期是指对一个日历年的划 分。时间周期分年度、季度(冬季为 1-3 月;春季为 4-6 月;夏季为 7-9 月;秋季为 10-12 月)和月度。时间跨度主要是十年跨度,但也包括“全部”,表示不分年份使用的所有数据, 以及“decav”,所有可用(特定年份)时间跨度的平均值。对特定时间周期的客观分析代 表给定时间跨度内的该时间周期。表 1 列出了属于 WOA18 的所有时间跨度。

1.3 可用的场
表 2 给出了统计场列表以及可用场的网格分辨率。1/4°场将世界表示为 1440x720 的经 /纬度框。1°场将世界表示为 360x180 的经/纬度框。5°场将世界划分为 72x36 的经/纬度 框。5°统计场用于标准差窗口检查以筛选数据;通过这些统计检查的数据可用于计算 1/4° 和 1°气候场。

除了 https://www.nodc.noaa.gov/OC5/WOA18/woadata18.html 提供的统计场,还有两 种类型的掩码文件(以后缀.msk 结尾)。这些文件包含用于计算统计场的信息。
landsea_XX.msk 文件包含整个世界在每 1/4°2或 1°2处第一次遇到海底的标准深度 等级编号。Land 的值为 1,对应于海表面。表 3 列出了标准深度等级的数值。
basin_XX.msk 文件包含从地面到 5500m 深处的每个标准深度处为每个网格正方形定 义的盆地代码。每个盆地由 1 到 58 的代码编号标识。给定 1/4°2和 1°2的盆地代码可能会 随着深度的增加而变化。附录 1 列出了盆地的地理名称、与每个盆地相关的代码编号以及首 次遇到给定盆地的标准深度。
上述掩码名称中的 XX 为 01(1°)或 04(1/4°),取决于用于生成陆海和盆地遮码的 分辨率。这些掩码文件位于 https://data.nodc.noaa.gov/woa/WOA18/MASKS/。
1.4 数据格式

WOA 提供四种可获取的数据格式:
·气候与预测(CF)兼容的网络通用数据格式(NetCDF);
·逗号分隔值(csv)格式;
·与 ArcGIS 兼容的 shape 文件;
·压缩网格格式(传统的 WOA ASCII 格式)。
旧的 ASCII 格式文件是为在以前的 WOA 版本中设置为读取此格式的应用程序提供的。不 鼓励使用这种格式,因为它没有明确给出深度,可能导致在为 WOA 先前版本设置的软件中读 取 WOA18 文件时出现混淆,反之亦然。
有关传统WOA ASCII格式的信息,请参阅 https://data.nodc.noaa.gov/woa/WOA18/DOC/woa18documentation.pdf。每个 csv 文件包 含单个统计场的所有深度;请注意,这与为 WOA18 发布的 csv 文件不同。
1.5 文件命名规则
所有文件,无论格式如何,都遵循相同的命名约定:
woa18_[DECA]_[v][tp][ft][gr].[form_end]
其中:
[DECA]表示十年,客观分析平均值和表 1 中列出的其他统计场表示的时间跨度(年);
[v] 用表 4 所列的一个字母代码表示海洋变量;
[tp]表示平均周期,两位数代码如下:
00–年度统计,所有使用的数据;
01 至 12–月度统计(从 01–1 月开始,到 12–12 月);
13 至 16–季节统计:
第 13 季-北半球冬季(1 月-3 月);
第 14 季-北半球春季(4 月-6 月);
第 15 季-北半球夏季(7 月至 9 月);
第 16 季-北半球秋季(10 月-12 月);
[ft]表示场类型,描述文件中表示的计算统计信息,如表 2 所示;
[gr]表示网格大小,两位代码如下:
04–1/4°网格分辨率
01–1°网格分辨率
5d–5°网格分辨率
[form_end]格式后缀(文件扩展名),取决于以下格式:
csv–逗号分隔值格式
nc–netCDF 格式
dbf、shp、shx–shapefile(下载时将一起保存在.tar 文件中)
dat–压缩网格数据格式(传统 WOA ASCII 格式)
示例:woa18_95A4_s02an01.nc 是一个 WOA18 的数据文件,该文件以 netCDF 格式以 1°网格 分辨率客观分析了 1995-2004 年 2 月的盐度。
2、WOA18 数据下载
根据 WOA 按不同年份发布的数据,进行全球数据的整体下载。
可供下载的数据包括温度、盐度、密度、电导率、混合层深度、溶解氧、氧饱和度百分比 、 表观氧利用率 、 硅酸盐 、 磷酸盐 、 硝酸盐数据 。数据获取网址为https://www.ncei.noaa.gov/access/world-ocean-atlas-2018/,点击左侧变量可进入数据 选择界面,如下图。


3、WOA18 数据使用
3.1 nc 数据读取
使用 matlab 软件 ncread 命令读取文件,m_map 包进行绘图。以电导率数据为例:
Source:
C:\Users\xxx\xxx\woa18_A5B7_C01_01.nc //文件路径
Format:
netcdf4_classic //文件格式
Global Attributes:
Conventions = 'CF-1.6' //协议
title = 'World Ocean Atlas 2018 : sea_water_electrical_conductivity January 2005-2017 1.00 degree' //标题
summary = 'Climatological mean conductivity for the global ocean from in situ profile data' //摘要
references = 'Reagan, J.R., M.M. Zweng, D. Seidov, T.P. Boyer, R.A. Locarnini, A.V. Mishonov, O.K. Baranova, H.E. Garcia, K.W. Weathers, C.R. Paver, I.V. Smolyar, and R.H. Tyler (2019). World Ocean Atlas 2018, Volume 6: Conductivity. A. Mishonov Technical Editor, NOAA Atlas NESDIS 86.'
institution = 'NOAA National Center for Environmental Information (NCEI)'
comment = 'Global Climatology as part of the World Ocean Atlas Project'
id = 'woa18_A5B7_C01_01.nc'
naming_authority = 'gov.noaa.ncei' //命名机构
time_coverage_start = '2005-01-01' //开始时间
time_coverage_duration = 'P13Y' //时间覆盖时长
time_coverage_resolution = 'P01M' //时间覆盖分辨率
geospatial_lat_min = -90 //地理空间最小纬度
geospatial_lat_max = 90 //地理空间最大纬度
geospatial_lon_min = -180 //地理空间最小经度
geospatial_lon_max = 540 //地理空间最大经度
geospatial_vertical_min = 0 //地理空间垂向最小值
geospatial_vertical_max = 1500 //地理空间垂向最大值
geospatial_lat_units = 'degrees_north' //地理空间纬 度单位
geospatial_lat_resolution = '1.00 degrees' //地理空间纬度 分辨率
geospatial_lon_units = 'degrees_east' //地理空间经 度单位
geospatial_lon_resolution = '1.00 degrees' //地理空间经度 分辨率
geospatial_vertical_units = 'm' //地理空间垂向单位
geospatial_vertical_resolution = '' //地理空间垂向分辨率
geospatial_vertical_positive = 'down' //地理空间垂向正方向
creator_name = 'Ocean Climate Laboratory'
creator_email = 'NCEI.Info@noaa.gov'
creator_url = 'http://www.ncei.noaa.gov'
project = 'World Ocean Atlas'
processing_level = 'processed'
keywords = 'Oceans, Ocean Conductivity'
keywords_vocabulary = 'ISO 19115, GCMD'
standard_name_vocabulary = 'CF-1.6'
contributor_name = 'Ocean Climate Laboratory'
contributor_role = 'Calculation of climatologies'
featureType = 'Grid' cdm_data_type = 'Grid'
publisher_name = 'National Center for Environmental Information (NCEI)'
publisher_url = 'http://www.ncei.noaa.gov/'
publisher_email = 'NCEI.Info@noaa.gov' ncei_template_version = 'NCEI_NetCDF_Grid_Template_v1.0'
license = 'These data are openly available to the public. Please acknowledge the use of these data with the text given in the acknowledgment attribute.'
Metadata_Conventions = 'Unidata Dataset Discovery v1.0'
metadata_link = 'https://www.ncei.noaa.gov/products/world-ocean-atlas'
date_created = '2020-05-18 '
date_modified = '2020-05-18 '
Dimensions:
nbounds = 2 //边界
lat = 180 //纬度
lon = 360 //经度
depth = 57 //深度
time = 1 //时间
3.2 海表温度 1/4°分辨率客观分析平均场(Miller Cylindrical 投影) (2005-2017)

MATLAB 代码:
clc;clear;
source=('D:\woa18_A5B7_t01_04.nc');
ncdisp(source);
lat=double(ncread(source,'lat'));
latcount=length(lat);
lon=double(ncread(source,'lon'));
loncount=length(lon);
depth=ncread(source,'depth');
time=ncread(source,'time');
ticount=length(time);
t_an=double(ncread(source,'t_an'));
boundary = input('输入绘图范围,格式:[起始经度 终止经度 起始纬度 终止纬度]\n');
[~,lon1]=min(abs(lon-boundary(1)));
[~,lon2]=min(abs(lon-boundary(2)));
[~,lat1]=min(abs(lat-boundary(3)));
[~,lat2]=min(abs(lat-boundary(4)));
varname = input('输入变量:','s');
disp('时间层数为:')
disp(ticount);for t=1:ticount
lon_scope = find(lon >= lon(lon1) & lon<=lon(lon2));
lat_scope = find(lat >= lat(lat1) & lat<=lat(lat2));
lon_number = length(lon_scope);
lat_number = length(lat_scope);
start = [lon_scope(1),lat_scope(1),1,1];
count = [lon_number,lat_number,1,ticount];
stride = [1,1,1,1];
t_an1 = ncread(source,varname,start,count,stride);
t_an_plot = imrotate(t_an1(:,:,t),90);
t_an_plot=flipud(t_an_plot);
[r,c]=size(t_an_plot);
for i = 1:r
for k = 1:c
if isnan(t_an_plot(i,k))
end
end
end
m_proj('Miller Cylindrical','lat',[lat(lat1) lat(lat2)],'lon',[lon(lon1) lon(lon2)]);
lat_1=linspace(lat(lat1),lat(lat2),lat_number);
lon_1=linspace(lon(lon1),lon(lon2),lon_number);
[plon,plat]=meshgrid(lon_1,lat_1);
hold on
set(gcf,'position',[0,0, 1600, 900]);
m_pcolor(plon,plat,t_an_plot);
m_coast('patch',[0.75 0.75 0.75],'edgecolor',[0 0 0],'linewidth',1);
m_grid('linestyle','none','tickdir','in','linewidth',3);
colormap jet;
hold on
h = colorbar('h');
h.Label.String = '℃';
h.Label.FontSize=13;
hold on
End
3.3 海表各网格温度 1/4°分辨率观测数量图像(Miller Cylindrical 投影) (2005-2017)

MATLAB 代码:
clc;clear;
source=('D:\woa18_A5B7_t01_04.nc');
ncdisp(source);
lat=double(ncread(source,'lat'));
latcount=length(lat);
lon=double(ncread(source,'lon'));
loncount=length(lon);
depth=ncread(source,'depth');
time=ncread(source,'time');
ticount=length(time);
t_dd=double(ncread(source,'t_dd'));
boundary = input('输入绘图范围,格式:[起始经度 终止经度 起始纬度 终止纬度]\n');
[~,lon1]=min(abs(lon-boundary(1)));
[~,lon2]=min(abs(lon-boundary(2)));
[~,lat1]=min(abs(lat-boundary(3)));
[~,lat2]=min(abs(lat-boundary(4)));
varname = input('输入变量:','s');
disp('时间层数为:')disp(ticount);
for t=1:ticount
lon_scope = find(lon >= lon(lon1) & lon<=lon(lon2));
lat_scope = find(lat >= lat(lat1) & lat<=lat(lat2));
lon_number = length(lon_scope);
lat_number = length(lat_scope);
start = [lon_scope(1),lat_scope(1),1,1];
count = [lon_number,lat_number,1,ticount];
stride = [1,1,1,1];
t_dd1 = ncread(source,varname,start,count,stride);
t_dd_plot = imrotate(t_dd1(:,:,t),90);
t_dd_plot=flipud(t_dd_plot);
[r,c]=size(t_dd_plot);
for i = 1:r
for k = 1:c
if isnan(t_dd_plot(i,k))
end
end
end
m_proj('Miller Cylindrical','lat',[lat(lat1) lat(lat2)],'lon',[lon(lon1) lon(lon2)]);
lat_1=linspace(lat(lat1),lat(lat2),lat_number);
lon_1=linspace(lon(lon1),lon(lon2),lon_number);
[plon,plat]=meshgrid(lon_1,lat_1);
t_dd_plot(t_dd_plot(:,:)>=50&t_dd_plot(:,:)=30&t_dd_plot(:,:)<50)=175;
t_dd_plot(t_dd_plot(:,:)>=10&t_dd_plot(:,:)<30)=125;
t_dd_plot(t_dd_plot(:,:)>=2&t_dd_plot(:,:)<10)=75;
t_dd_plot(t_dd_plot(:,:)>=1&t_dd_plot(:,:)<2)=25;
t_dd_plot(t_dd_plot(:,:)==0)=NaN;
hold on
set(gcf,'position',[0,0, 1600, 900]);
m_pcolor(plon,plat,t_dd_plot)
m_coast('patch',[0.75 0.75 0.75],'edgecolor',[0 0 0],'linewidth',1);
m_grid('linestyle','none','tickdir','in','linewidth',3);
a=[0,0,1;0.47,1,0.53;1,1,0;1,0.47,0;1,0,0];
colormap(a);
caxis([0,250]);
hold on
h = colorbar('h');
h.TickLabels={1,2,10,30,50,''};
hold on
End
3.4 海表温度1/4°分辨率统计学平均场(Miller Cylindrical 投 影)(2005-2017)

3.5 海表温度1/4 °分辨率平均值标准误(Miller Cylindrical 投影)(2005-2017)

3.6 海表温度 1/4°分辨率标准差(Miller Cylindrical 投影)(2005-2017)

3.7 海表温度 1/4°分辨率一月平均值减年平均值(Miller Cylindrical 投影) (2005-2017)

3.8 海表温度 1/4°分辨率统计分析场减客观分析场(Miller Cylindrical 投 影)(2005-2017)

