Je suis nouveau sur R et j'utilise le package raster. J'ai un problème pour extraire les polygones d'un fichier raster existant. Si j'utilise
extract(raster, poly_shape)
fonction sur le raster, il crée toujours une liste avec les données. Ce que je veux vraiment, c'est extraire un autre fichier raster que je peux charger à nouveau avec ArcGIS. Après avoir lu un peu plus, je pense que la fonction de recadrage est ce dont j'ai vraiment besoin. Mais quand j'essaie d'utiliser cette fonction
crop(raster, poly_shape)
Je reçois cette erreur:
Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap
Les fichiers raster et poly_shape sont les mêmes pour les deux fonctions. Pouvez-vous me dire ce qui pourrait mal se passer ici? Est-il même exact que la fonction de recadrage crée un autre raster et non une liste?
EDIT : La fonction extend () ne fonctionne pas pour moi. Je reçois toujours la même erreur. Mais je suis sûr que les 2 jeux de données se chevauchent! Avec le
extract(raster, poly_shape)
J'en tire les bonnes données. Juste comme une liste et non comme un raster comme je veux l'avoir. Je viens de charger les jeux de données dans ArcGIS auparavant et ils s'adaptent très bien, donc je n'ai pas vérifié la projection. Maintenant j'ai essayé
projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"
et vous pouvez voir que les projections ne correspondent pas. La fonction d'extraction semble être capable de transformer automatiquement les fichiers de la bonne manière. Je le sais parce que j'ai fait ce qui suit:
- J'ai découpé la partie exacte du polygone que j'ai extrait dans R également dans ArcGIS
- J'ai calculé la somme de toutes les valeurs du polygone R extrait (liste)
- J'ai calculé la somme de toutes les cellules raster que j'ai découpées dans ArcGIS
Les 2 ont exactement le même résultat, donc je suppose que la conclusion devrait être que la fonction d'extraction a fonctionné correctement. Maintenant, j'ai deux options:
- J'ai besoin d'un moyen d'extraire à nouveau un raster de la liste extraite ou
- Les 2 jeux de données (raster + poly_shape) doivent utiliser la même projection et la fonction de recadrage devrait fonctionner
Que suggéreriez-vous de faire ici?
Réponses:
La fonction d'extraction se comporte exactement comme elle le devrait. Vous pouvez forcer la fonction de recadrage à utiliser l'étendue du polygone, puis masquer l'objet pour renvoyer le raster exact représentant la zone du polygone. Si vous continuez à recevoir l'erreur, cela signifie que vos données, en fait, ne se chevauchent pas.
N'oubliez pas que R n'effectue pas de projection "à la volée", vérifiez donc vos projections. Vous pouvez vérifier si vos extensions se chevauchent en utilisant la fonction "extend ()".
Voici un exemple de recadrage en utilisant l'étendue du polygone, puis en masquant le raster résultant en utilisant le polygone "tramé".
la source
spTransform
à partir dusp
package (qui est parfois automatiquement chargé avec d'autres packages spatiaux R) permet une reprojection afin que les deux fichiers soient dans la même projection, par exemple.good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
Ce que j'ai recherché, c'est la
mask()
fonction.mask(raster, poly_shape)
fonctionne sans erreur et renvoie ce que j'ai recherché.
la source
projection(raster) = projection(poly_shape)
et dans l'autre sens ,projection(poly_shape) = projection(raster)
mais les deux sens produire la même erreur:Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap
. Existe-t-il un moyen de voir quelle projection est utilisée à la volée en utilisant la fonction extract () (car celle-ci fonctionne évidemment)?mask(raster, poly_shape)
fonctionne sans erreur et renvoie ce que j'ai recherché.L'étendue fonctionne très bien ... Je pense que les Xmin, Xmax, Ymin et Ymax de votre étendue sont différents des X et Y de votre raster - c'est-à-dire qu'ils sont opposés
la source