rworldmap坐标,如何将NetCDF数据与地图相匹配?

时间:2016-05-23 22:55:25

标签: r netcdf rworldmap

Rworldmap看起来就像我需要的气候数据映射一样,但我在使用气候数据排列基本地图时遇到了问题。我所绘制的是来自JAMSTEC 2015年8月的海洋温度数据:

http://www.jamstec.go.jp/ARGO/argo_web/ancient/MapQ/Mapdataset_e.html

数据集名称为TS_201508_GLB.nc。我正在使用的R脚本如下。国家概述很好,但数据仅适用于海洋,而数据并未显示在海洋中,而是以某种方式抵消。你能告诉我如何将数据与地图对齐吗?

我读了很多文章,但我不知道如何调整两者。我的数据是经度和纬度。南纬是负的,西经是负的,我看不出他们怎么会混淆。如何显示地图,是否存在某种特殊惯例?

感谢您提供的任何帮助。 代码:

library(RNetCDF)
library(sp)
library(rworldmap)
library(rgeos)
library(RColorBrewer)
library (classInt)
library(grid)
library(spam)
library(maps)
library(maptools)
library(fields)
library(methods)
library(rgdal)
library(rworldxtra)

fname <- "G:/Climate_Change/Ocean_Warming/MOAA_GPV_Jamstec_Temperature/TS_201508_GLB.nc"
moaa <- open.nc(fname)
# moaa
print.nc(moaa)
file.inq.nc(moaa)
#TOI is the temperature array extracted from the NCDF file
TOI = var.get.nc(moaa,"TOI",start=c(1,1,1),count=c(360,132,25))
TOI[1,1,1]
Long = var.get.nc(moaa,"LONGITUDE")
Lat = var.get.nc(moaa, "LATITUDE")
Pres = var.get.nc(moaa,"PRES")

# create grid
offset=c(-179.5,-60.50)
cellsize = c(abs(Long[1]-Long[2]),abs(Lat[1]-Lat[2]))
cells.dim = c(dim(Long), dim(Lat))

# create gt
gt <- GridTopology(cellcentre.offset=offset,cellsize=cellsize,cells.dim=cells.dim)

# create map window
mapDevice()
# Create a color pallette
colourPalette=c('blue','lightblue','white',brewer.pal(9,'YlOrRd'))
# Values at 2000 decibar for August 2015
ncMatrix <- TOI[,,25]
# Gridvalues
gridVals <-data.frame(att=as.vector(ncMatrix))

# create a spatialGridDataFrame
sGDF <-SpatialGridDataFrame(gt,data=gridVals)
# Vector to classify data
catMethod=seq(from=0,to=4,by=.33)
# plotting the map and getting params for legend
mapParams <- mapGriddedData( sGDF, nameColumnToPlot='att',catMethod=catMethod,colourPalette=colourPalette,addLegend=FALSE)

1 个答案:

答案 0 :(得分:0)

我终于明白了。 rworldmap希望从地图左上角(西北角)组织数据,即Long = -180,Lat = 90。 NetCDF数据从Long = 0和Lat = -90(地图中间和南边缘)开始。所以我们必须扭转南北方向的价值:

#
# Flip the Latitude values so south is last
 ncMatrix2 <- ncMatrix[,dim(Lat):1]

然后切换东经和西经的值:

#
#Longitude values need to be from -180 to 0 then 0 to 180
# So we divide into East and West, then recombine with rbind
East_Long_values <-ncMatrix2[1:180,]
West_Long_Values <-ncMatrix2[181:360,]
ncMatrix3 <- rbind(West_Long_Values,East_Long_values)

然后其他一切都有效。