2016-05-23 1 views
0

Rworldmap ressemble exactement à ce dont j'ai besoin pour cartographier les données climatiques, mais j'ai un problème pour aligner la carte de base avec les données climatiques. Ce que je suis cartographie est des données de température de l'océan à partir JAMSTEC pour Août 2015 à partir d'ici:rworldmap coordonnées, comment faire correspondre les données NetCDF à la carte?

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

Le nom du jeu de données est TS_201508_GLB.nc. Le script R que j'utilise est ci-dessous. Les contours du pays sont très bien, mais les données sont pour les océans seulement et les données ne montrent pas dans les océans qu'il est compensé en quelque sorte. Pouvez-vous me dire comment aligner les données sur la carte?

J'ai lu beaucoup d'articles mais je ne sais pas comment les aligner. Les données que j'ai sont la longitude et la latitude. La latitude sud est négative et la longitude ouest est négative, je ne vois pas comment ils pourraient être confus. Comment est montrée la carte, y a-t-il une sorte de convention spéciale pour les lat/longs?

Merci pour toute aide que vous pouvez fournir. Le code:

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) 
+0

Bienvenue chez SO. S'il vous plaît ranger votre code (tous les paquets vraiment nécessaires? Tous les commentaires précédés par '#'? ...). En outre, une capture d'écran illustrant le problème peut s'avérer utile. Et last but not least, cela pourrait être mieux adapté pour http://gis.stackexchange.com. – lukeA

+0

J'apprécie ce que vous dites, mais quand j'essaie de mettre les commentaires, je reçois un message d'erreur. Je l'ai eu l'air bien, mais il ne posterait pas. Il n'acceptera pas "#". –

+0

Merci à Dave2e pour avoir corrigé les commentaires! J'ai besoin d'apprendre comment faire ça. –

Répondre

0

J'ai finalement compris. rworldmap veut que les données soient organisées à partir du coin supérieur gauche de la carte (coin nord-ouest), c'est-à-dire Long = -180, Lat = 90. Les données NetCDF commencent à Long = 0 et Lat = -90 (le milieu de la carte et le bord sud). Nous devons donc inverser les valeurs dans la direction Nord-Sud:

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

Mettez ensuite les valeurs de longitude est et la longitude ouest:

# 
#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) 

Alors tout le reste fonctionne.