J'ai un ensemble de données de valeurs sur une grille de km dans le continent américain. Les colonnes sont "latitude", "longitude" et "observation", par exemple:
"lat" "lon" "yield"
25.567 -120.347 3.6
25.832 -120.400 2.6
26.097 -120.454 3.4
26.363 -120.508 3.1
26.630 -120.562 4.4
ou, en tant que trame de données R:
mydata <- structure(list(lat = c(25.567, 25.832, 26.097, 26.363, 26.63),
lon = c(-120.347, -120.4, -120.454, -120.508, -120.562),
yield = c(3.6, 2.6, 3.4, 3.1, 4.4)), .Names = c("lat",
"lon", "yield"), class = "data.frame", row.names = c(NA, -5L))
(le jeu de données complet peut être téléchargé en tant que csv ici )
Les données sont générées à partir d'un modèle de culture (destiné à être utilisé) sur une grille de 30 km sur 30 km (d'après Miguez et al, 2012 ).
Comment puis-je les convertir en un fichier raster avec des métadonnées liées au SIG telles que la projection cartographique?
Idéalement, le fichier serait un fichier texte (ASCII?), Car je souhaiterais qu'il soit indépendant de la plate-forme et du logiciel.
proj +proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +lon_0=-145.5 +lat_0=1.0
. Je ne suis pas sûr de ce que vous demandez en ce qui concerne un autre fichier csv - en quoi cela diffère-t-il de celui qui est lié à la question ou de la réponse acceptée?Réponses:
Plusieurs étapes requises:
Vous dites que c'est une grille régulière de 1 km, mais cela signifie que les lat-long ne sont pas réguliers. Vous devez d’abord le transformer en un système de coordonnées de grille régulier afin que les valeurs X et Y soient régulièrement espacées.
une. Lisez-le dans R en tant que trame de données, avec les colonnes x, y, donnez.
b. Convertissez le cadre de données en un fichier SpatialPointsDataFrame à l’aide du package sp et reproduisez les éléments suivants:
c. Convertissez votre système habituel en km en lui indiquant d'abord de quel CRS il s'agit, puis spTransform vers la destination.
ré. Dites à R que cela est maillé:
À ce stade, vous obtiendrez une erreur si vos coordonnées ne se trouvent pas sur une belle grille régulière.
Maintenant, utilisez le package raster pour convertir en un raster et définir son CRS:
Regardez maintenant:
Maintenant, écrivez-le en tant que fichier geoTIFF en utilisant le paquetage raster:
Ce fichier geoTIFF doit être lisible dans tous les principaux packages SIG. La pièce manquante évidente ici est la chaîne proj4 à convertir: ce sera probablement une sorte de système de référence UTM. Difficile à dire sans plus de données ...
la source
r = Import[ "https://ebi-forecast.igb.illinois.edu/bety/miscanthusyield.csv", "Data"];
. Vous pouvez ensuite obtenir un aperçu rapide des points viadata = Rest[r]; ListPlot[data[[;; , {3, 2}]]]
(ouListPointPlot3D[data[[;; , {3, 2, 4}]]]
). Pour les reprojections, commencez par l'aideGeoGridPosition
, puis faites des suppositions intelligentes et des références croisées pour comprendre ce qui se passe :-). BTW, l'explication de Spacedman est vraiment pertinente: la distorsion métrique de 25 à 49 degrés est égale à cos (25) / cos (49) = 1,38; c'est substantiel.Depuis la dernière réponse à la question, une solution beaucoup plus simple existe en utilisant la
rasterFromXYZ
fonction du package raster qui encapsule toutes les étapes nécessaires (y compris la spécification de la chaîne CRS).la source
/tmp/
lorsque j’ai manqué d’espace disque.merge()
les résultats.