Maison développement back-end Tutoriel Python tutoriel python gdal : lecture de données raster avec gdal

tutoriel python gdal : lecture de données raster avec gdal

Dec 24, 2016 pm 05:07 PM
gdal

GDAL prend en charge nativement plus de 100 types de données raster, couvrant tous les formats de données SIG et RS courants, y compris

grilles ArcInfo, raster ArcSDE, Imagine, Idrisi, ENVI, GRASS, GeoTIFF

HDF4, HDF5

USGS DOQ, USGS DEM

ECW, MrSID

TIFF, JPEG, JPEG2000, PNG, GIF, BMP

Support complet pour le liste, veuillez vous référer à http://www.gdal.org/formats_list.html

Importer la bibliothèque de support GDAL

Ancienne version (avant 1.5) : importer gdal, gdalconst

Nouvelle version (1.6 et versions ultérieures) : depuis osgeo import gdal, gdalconst

Il est préférable d'importer à la fois gdal et gdalconst. Les constantes de gdalconst sont préfixées pour minimiser les conflits avec d'autres modules. Vous pouvez donc importer directement gdalconst comme ceci : depuis osgeo.gdalconst import *

Le pilote de données GDAL, similaire au pilote de données OGR, doit d'abord créer un certain type de pilote de données, puis créer l'ensemble de données raster correspondant.

Enregistrez tous les pilotes de données à la fois, mais ne pouvez que lire et non écrire : gdal.AllRegister()

Enregistrez un certain type de pilote de données séparément, afin qu'il puisse être lu et écrit, oui Créer un nouveau jeu de données :

driver = gdal.GetDriverByName('HFA')

driver.Register()

Ouvrir un jeu de données raster existant :

fn = 'aster.img'

ds = gdal.Open(fn, GA_ReadOnly)

si ds est Aucun :

imprimer 'Impossible d'ouvrir ' fn

sys.exit(1)

Lire le nombre de pixels dans la direction x, le nombre de pixels dans la direction y et le nombre de canaux de l'ensemble de données raster

cols = ds.RasterXSize

rows = ds.RasterYSize

bands = ds.RasterCount

Notez qu'il n'y a pas de crochets après, car ce sont des propriétés (propriétés) non méthodes (méthodes)

Lire Obtenir des informations de référence de coordonnées géographiques (informations de géoréférence)

GeoTransform est une liste qui stocke les informations de coordonnées géographiques de l'ensemble de données raster

adfGeoTransform[0] /* coin supérieur gauche x coin supérieur gauche x coordonnée* /

adfGeoTransform[1] /* w--e résolution en pixels résolution en pixels dans la direction est-ouest*/

adfGeoTransform[2] /* rotation, 0 si l'image est "nord vers le haut" Si le nord est orienté vers le haut, l'angle de rotation de la carte*/

adfGeoTransform[3] /* en haut à gauche y y coordonnée du coin supérieur gauche*/

adfGeoTransform[4] /* rotation, 0 si l'image est "nord vers le haut" Si le nord est vers le haut, l'angle de rotation de la carte*/

adfGeoTransform[5] /* n-s résolution en pixels résolution en pixels dans la direction nord-sud*/

Notez le jeu de données raster. Les coordonnées sont généralement basées sur le coin supérieur gauche.

L'exemple suivant consiste à prendre le Geotransform d'un ensemble de données raster sous forme de liste, puis à lire les données qu'il contient

geotransform = ds.GetGeoTransform()

originX = géotransformation [0]

originY = géotransform[3] originY = géotransform[3]

pixelWidth = géotransform[1]

pixelHeight = géotransformation[5]

Calculez la position relative (décalage de pixels) du pixel correspondant à une certaine coordonnée, c'est-à-dire la position relative de la coordonnée et du pixel dans le coin supérieur gauche, calculée en fonction du nombre de pixels. La formule de calcul est la suivante. suit :

xOffset = int((x – originX) / pixelWidth)

yOffset = int((y – originY) / pixelHeight)

Lecture de la valeur d'un certain le pixel nécessite deux étapes

Lire d'abord Obtenir une bande : GetRasterBand(), son paramètre est le numéro d'index de la bande

puis utiliser ReadAsArray(, < ;yoff>, ,

band = ds.GetRasterBand(1)

data = band.ReadAsArray(xOffset, yOffset, 1, 1)

Si vous souhaitez lire un texte entier bande à une image temporelle, puis définissez le décalage sur 0 et la taille sur la taille de l'image entière, par exemple :

data = band.ReadAsArray(0, 0, cols, rows)

Mais veuillez noter que pour lire la valeur d'un certain pixel à partir de données, vous devez utiliser data[yoff, xoff]. Attention à ne pas le faire à l'envers. Une matrice en mathématiques c’est [row,col], mais ici c’est tout le contraire ! Ici, row correspond à l'axe y et col correspond à l'axe x.

Faites attention à libérer de la mémoire lorsque cela est approprié, comme band = None ou dataset = None. Surtout lorsque l'image est très grande

Comment lire les données raster plus efficacement ? Évidemment, lire un par un est très inefficace. Ce n'est pas une bonne idée de regrouper l'intégralité du jeu de données raster dans un tableau à deux dimensions, car cela prend encore beaucoup de mémoire. Une meilleure approche consiste à accéder aux données par blocs et à mettre uniquement le bloc dont vous avez besoin en mémoire. L'exemple de code de cette semaine comporte un module utils capable de lire la taille du bloc.

Par exemple :

import utils

blockSize = utils.GetBlockSize(band)

xBlockSize = blockSize[0]

yBlockSize = taille de bloc[1]

Tile (carrelé), c'est-à-dire que les données raster sont stockées en blocs. Certains formats, comme GeoTiff, ne sont pas carrelés et chaque ligne est un bloc. Le format Erdas imagine est carrelé de 64x64 pixels.

Si une ligne est un bloc, alors la lecture par ligne permet d'économiser davantage de ressources.

S'il s'agit d'une structure de données en mosaïque, définir la valeur du paramètre ReadAsArray() afin qu'il ne puisse lire qu'un seul bloc à la fois est la méthode la plus efficace. Par exemple :

lignes = 13, cols = 11, xBSize = 5, yBSize = 5

pour i dans la plage (0, lignes, yBSize) :

si je yBSize < lignes :

numRows = yBSize

else :

numRows = lignes – i

pour j dans la plage (0, cols, xBSize) :

si j xBSize < cols :

numCols = xBSize

sinon :

numCols = colsnumCols = col s – j

data = band.ReadAsArray(j, i, numCols, numRows)

Ce code est universel et peut être utilisé de temps en temps.

Ce qui suit présente quelques compétences en matière de traitement de tableaux bidimensionnels

Deux bibliothèques sont utilisées ici, Numeric et numpy. Le numérique est plus ancien et FWTools l'utilise. Si vous l'installez et le configurez vous-même, vous devez utiliser le numpy plus puissant.

Conversion de type de données :

data = band.ReadAsArray(j, i, nCols, nRows)

data = data.astype(Numeric.Float) # Numeric

data = data.astype(numpy.float) # numpy

Ou écrivez simplement une phrase simple

data = band.ReadAsArray(j, i, nCols, nRows).astype (Numeric.Float)

Masque

C'est la fonction des bibliothèques numériques et numpy. Il entre un tableau et une condition et génère un tableau binaire. Par exemple

mask = Numeric.greater(data, 0)mask = Numeric.greater(data, 0)

>>> , 6, 0, 2])

>>> imprimer un

[0 4 6 0 2]

>>> . Greater(a, 0)

>>> masque d'impression

[0 1 1 0 1]

Somme du tableau

> >> a = Numeric.array([0, 4, 6, 0, 2])

>>> imprimer a>> imprimer un

[ 0 4 6 0 2]

>>> print Numeric.sum(a)

12

S'il s'agit d'un tableau à deux dimensions, alors la somme sera renvoie un tableau unidimensionnel

>>> b = Numeric.array([a, [5, 10, 0, 3, 0]])

>> > imprimer b

[[ 0 4 6 0 2]

[ 5 10 0 3 0]]

>>> )> >> print Numeric.sum(b)

[ 5 14 6 3 2]

Donc, la somme des tableaux bidimensionnels est comme ça

>> ;> print Numeric.sum(Numeric.sum(b))

30

Voici une petite astuce Pour compter le nombre de pixels supérieur à 0, vous pouvez. utiliser le masque et la somme ensemble. Fonction

>>> imprimer un

[0 4 6 0 2]

>>> supérieur(a, 0)

>>> masque d'impression

[0 1 1 0 1]

>>> masque)

3

Ce qui précède est le tutoriel python gdal : utiliser gdal pour lire des données raster. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Mar 05, 2025 am 09:58 AM

Ce tutoriel montre comment utiliser Python pour traiter le concept statistique de la loi de Zipf et démontre l'efficacité de la lecture et du tri de Python de gros fichiers texte lors du traitement de la loi. Vous vous demandez peut-être ce que signifie le terme distribution ZIPF. Pour comprendre ce terme, nous devons d'abord définir la loi de Zipf. Ne vous inquiétez pas, je vais essayer de simplifier les instructions. La loi de Zipf La loi de Zipf signifie simplement: dans un grand corpus en langage naturel, les mots les plus fréquents apparaissent environ deux fois plus fréquemment que les deuxième mots fréquents, trois fois comme les troisième mots fréquents, quatre fois comme quatrième mots fréquents, etc. Regardons un exemple. Si vous regardez le corpus brun en anglais américain, vous remarquerez que le mot le plus fréquent est "th

Comment utiliser la belle soupe pour analyser HTML? Comment utiliser la belle soupe pour analyser HTML? Mar 10, 2025 pm 06:54 PM

Cet article explique comment utiliser la belle soupe, une bibliothèque Python, pour analyser HTML. Il détaille des méthodes courantes comme find (), find_all (), select () et get_text () pour l'extraction des données, la gestion de diverses structures et erreurs HTML et alternatives (Sel

Filtrage d'image en python Filtrage d'image en python Mar 03, 2025 am 09:44 AM

Traiter avec des images bruyantes est un problème courant, en particulier avec des photos de téléphones portables ou de caméras basse résolution. Ce tutoriel explore les techniques de filtrage d'images dans Python à l'aide d'OpenCV pour résoudre ce problème. Filtrage d'image: un outil puissant Filtre d'image

Comment travailler avec des documents PDF à l'aide de Python Comment travailler avec des documents PDF à l'aide de Python Mar 02, 2025 am 09:54 AM

Les fichiers PDF sont populaires pour leur compatibilité multiplateforme, avec du contenu et de la mise en page cohérents sur les systèmes d'exploitation, les appareils de lecture et les logiciels. Cependant, contrairement aux fichiers de texte brut de traitement Python, les fichiers PDF sont des fichiers binaires avec des structures plus complexes et contiennent des éléments tels que des polices, des couleurs et des images. Heureusement, il n'est pas difficile de traiter les fichiers PDF avec les modules externes de Python. Cet article utilisera le module PYPDF2 pour montrer comment ouvrir un fichier PDF, imprimer une page et extraire du texte. Pour la création et l'édition des fichiers PDF, veuillez vous référer à un autre tutoriel de moi. Préparation Le noyau réside dans l'utilisation du module externe PYPDF2. Tout d'abord, l'installez en utilisant PIP: pip is p

Comment se cacher en utilisant Redis dans les applications Django Comment se cacher en utilisant Redis dans les applications Django Mar 02, 2025 am 10:10 AM

Ce tutoriel montre comment tirer parti de la mise en cache Redis pour augmenter les performances des applications Python, en particulier dans un cadre Django. Nous couvrirons l'installation redis, la configuration de Django et les comparaisons de performances pour mettre en évidence le bien

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Mar 10, 2025 pm 06:52 PM

Cet article compare TensorFlow et Pytorch pour l'apprentissage en profondeur. Il détaille les étapes impliquées: préparation des données, construction de modèles, formation, évaluation et déploiement. Différences clés entre les cadres, en particulier en ce qui concerne le raisin informatique

Introduction à la programmation parallèle et simultanée dans Python Introduction à la programmation parallèle et simultanée dans Python Mar 03, 2025 am 10:32 AM

Python, un favori pour la science et le traitement des données, propose un écosystème riche pour l'informatique haute performance. Cependant, la programmation parallèle dans Python présente des défis uniques. Ce tutoriel explore ces défis, en se concentrant sur l'interprète mondial

Comment implémenter votre propre structure de données dans Python Comment implémenter votre propre structure de données dans Python Mar 03, 2025 am 09:28 AM

Ce didacticiel montre la création d'une structure de données de pipeline personnalisée dans Python 3, en tirant parti des classes et de la surcharge de l'opérateur pour une fonctionnalité améliorée. La flexibilité du pipeline réside dans sa capacité à appliquer une série de fonctions à un ensemble de données, GE

See all articles