2017-02-07 3 views
1

J'ai un ensemble de fichiers tiff qui affichent des conditions météorologiques convectives à travers le continent américain (projection NAD83) dans des emplacements de pixels de Iowa State University. Mon objectif est la transformation des emplacements de pixels en données lat/lon. Je lis dans les données du fichier tiff comme SpatialGridDataFrame avec ...rDGAL, fichiers Tiff et WorldFile

imageData = readGDAL(fileNameDir, silent = TRUE) 

je lis quelque part que readGDAL cherchera un fichier mondial si aucune donnée de projection existent dans le fichier tiff, donc je créé un tel fichier (nad83WorldFile. wld) avec les informations requises, see info at ESRI. J'ai mis le fichier wld dans le même répertoire que mes scripts R. Les coefficients pour le fichier wld sont:

A = 0.01 
B = 0.0 
C = 0.0 
D = -0.01 
E = -126.0 
F = 50.0 

je cherche des conseils et des conseils sur la projection pixel à la latitude/longitude. Un fichier de données pour l'exemple readGDAL de fileNameDir et une documentation sur le format World File sont fournis dans les liens hypertextes ci-dessus. J'ai dû changer l'extension de fichier de * .png en * .tiff.

Répondre

1

Normalement, si vous savez que vos données sont projetées, mais que cette projection ne fait pas partie de votre fichier TIF, votre pouvez simplement ajouter dans votre objet R après l'importation:

proj4string(imageData) <- CRS("your projection") 

J'aime en utilisant EPSG pour cela, si votre TIF était en projection GoogleEarth par exemple, je le ferais:

proj4string(imageData) <- CRS("+init=EPSG:4326") 

trouve juste ce que vous NAD83 projection exacte (ce site peut aider http://spatialreference.org/).

Ensuite, vous pouvez reprojeter dans le choix de la projection:

imageDataProj <- spTransform(imageDataProj, CRS("your new projection")) 

Comme une note de côté, je préfère toujours en utilisant le paquet raster pour le traitement des formats raster. Cependant, changer la projection d'un gros fichier raster avec R peut être fastidieux, alors maintenant j'utilise directement GDAL (via gdalwarp). Vous pouvez appeler toutes les options gdal assez facilement dans R avec le package gdalUtils, mais vous devrez réimporter les résultats dans R après la main.

de commentaire ci-dessous EDITS OP:

Utilisation du package raster:

library(raster) 

Chargement du TIF:

rr <- raster("C:\\temp\\n0r_201601011100.tif") 

Enregistrer vous coordonnées pixels équations dans les fonctions.Je remarquai changé la fonction Lat (enlevé le signe négatif, il ne fonctionne pas avec elle, vous devrez valider)

Lon = function(JJ) 0.01 * JJ + 162 
Lat = function(II) 0.01 * II + 50.0 

Obtenez l'étendue de votre trame brute en coordonnées pixel:

ext.rr <- extent(rr) 

Préparer une nouvelle trame vide qui sera projeté, ont la bonne résolution et l'étendue:

rr2 <- raster(nrows=nrow(rr), ncols=ncol(rr), xmn=Lon([email protected]), xmx=Lon([email protected]), ymn=Lat([email protected]), ymx=Lat([email protected])) 

Remplissez ce nouveau raster avec vos valeurs modifiées (après l'équation que vous avez donné dans la comm ents):

values(rr2) <- (values(rr) - 7) * 5 

Et vous obtenez:

rr2 
    class  : RasterLayer 
    dimensions : 2600, 6000, 15600000 (nrow, ncol, ncell) 
    resolution : 0.01, 0.01 (x, y) 
    extent  : 162, 222, 50, 76 (xmin, xmax, ymin, ymax) 
    coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
    data source : in memory 
    names  : layer 
    values  : -35, 50 (min, max) 

Notez que la projection lat long a été prise en charge automatiquement par la fonction de trame. J'espère que c'est ce que vous cherchez.

+0

Ceci est utile. Mes données sont en coordonnées de pixels: 'Lat = -0.01 * I + 50.0',' Lon = 0.01 * J + 162.', où I et J sont les coordonnées rectilignes de chaque cellule de la grille. Donc, je dois le faire avant d'effectuer des changements de projection. Aussi, quel est le meilleur moyen de transformer les valeurs entières dans chaque cellule avec: 'y = (intX - 7) * 5'? –

+0

J'ai mis à jour ma réponse suite à votre commentaire – Bastien

+0

Je m'incline humblement. Je vous remercie. –