Je travaille sur un modèle informatique de l'abondance de pollinisateurs sauvages à travers un paysage. Le modèle lui-même est complet et je suis maintenant aux prises avec une étape de post-traitement.
J'ai mon raster d'approvisionnement en pollinisateur GDAL qui ressemble à ceci (des couleurs plus claires signifient une fréquentation plus élevée des pollinisateurs au pixel près):
Et j'ai un fichier de formes OGR de points représentant des exemples d'emplacements dans le paysage:
J'essaie d'analyser les pixels situés sous ces points, mais pour ce faire, je dois pouvoir extraire la valeur d'un pixel sous un point.
Est-il possible d'extraire la valeur d'un pixel sous un point en utilisant uniquement OGR et GDAL via Python? Je préférerais éviter de lire l'intégralité du raster en mémoire ReadAsArray()
car mes rasters en sortie sont très très gros (trop gros pour être stockés dans la mémoire).
J'ai remarqué ce message , qui est similaire, mais nécessite un appel de ligne de commande.
Réponses:
Vous pouvez utiliser la méthode ReadRaster gdal.Dataset ou gdal.Band . Voir les tutoriels sur les API GDAL et OGR et l'exemple ci-dessous. ReadRaster n'utilise pas / require numpy, la valeur de retour correspond à des données binaires brutes et doit être décompressée à l'aide du module struct Python standard .
Un exemple:
Alternativement, puisque la raison que vous avez indiquée pour ne pas utiliser
numpy
était d'éviter de lire le tableau entier en utilisantReadAsArray()
, voici un exemple qui utilisenumpy
et ne lit pas le raster en entier.la source
px
/py
ont tort dans le cas où mx / my est en dehors des limites derb
, carint(-0.5) == 0
. Vous avez besoinfloor(...)
, puis vous devez vérifier qu'aucun despx
/py
n'est inférieur à zéro (ou le faire avant d'appelerint()
), car les indices négatifs fonctionnent (ils obtiennent l'autre côté du tableau). J'aimerais savoir s'il existe un moyen plus ordonné de traiter ce problème. Comment réécrire ces lignes pour qu'elles traitent correctement les rotations?