Suite

Comment accéder au tableau GeoTransform depuis gdal sur la ligne de commande ?

Comment accéder au tableau GeoTransform depuis gdal sur la ligne de commande ?


J'utilise la bibliothèque gdal via OSGeo pour Windows et je me demandais simplement comment accéder au tableau de géotransformation pour un fichier .ecw.


Cela peut être trouvé à partir degdalinfo, sauf qu'il a trois formes :

  1. Si coefficients de rotation/cisaillement (adfGeoTransform[2]etadfGeoTransform[4]) sont nuls, la sortie est simplifiée :
    Origine = (%.15f,%.15f) % adfGeoTransform[0], adfGeoTransform[3]
    Taille de pixel = (%.15f,%.15f) % adfGeoTransform[1], adfGeoTransform[5]

  2. Si les coefficients de rotation/cisaillement ne sont pas nuls, les 6 coefficients complets sont affichés :
    GéoTransformer =
    %.16g, %.16g, %.16g % adfGeoTransform[0], adfGeoTransform[1], adfGeoTransform[2]
    %.16g, %.16g, %.16g % adfGeoTransform[3], adfGeoTransform[4], adfGeoTransform[5]

  3. S'il n'y a pas d'informations GeoTransform, aucun des deux formulaires ci-dessus n'est affiché.

L'ordre des coefficients utilisés par GDAL est important et est documenté ici.


En C#, vous pouvez accéder à GDAL à condition que les bibliothèques soient installées. Référence gdal_csharp.dll. Ce tutoriel aide un peu.

en utilisant OSGeo.GDAL ; // plus tard dans la classe OSGeo.GDAL.Gdal.AllRegister(); // IMPORTANT ou rien ne fonctionnera // ouvrir le jeu de données ECW dans GDAL OSGeo.GDAL.Dataset pInDS = Gdal.Open(ECW_Path, OSGeo.GDAL.Access.GA_ReadOnly); // récupère la GeoTransform à partir du jeu de données double[] pGT= new double[6]; pInDS.GetGeoTransform(pGT); // utilise les paramètres CellWidth = pGT[1]; Hauteur de cellule = pGT[5] ; OrigineX = pGT[0] ; OrigineY = pGT[3] ; // lignes et colonnes pour le raster Rows = (ulong)pInDS.RasterYSize; Cols = (ulong)pInDS.RasterXSize;

L'objet GeoTransform est :

adfGeoTransform[0] /* en haut à gauche x */ adfGeoTransform[1] /* nous résolution en pixels */ adfGeoTransform[2] /* 0 */ adfGeoTransform[3] /* en haut à gauche y */ adfGeoTransform[4] /* 0 * / adfGeoTransform[5] /* résolution en pixels ns (valeur négative) */

C'est la même chose pour tous les formats raster GDAL pris en charge.


Échec de l'installation de GDAL (CentOS 8)

Pendant la majeure partie de la journée, j'ai essayé de comprendre comment installer GDAL sur mon serveur CentOS 8.

J'ai fait des recherches sur de nombreuses réponses et solutions différentes sur différents sites et sur StackOverflow et rien ne semble fonctionner ! (Il me manque probablement quelque chose d'évident quelque part)

J'essaie d'installer GDAL à l'aide de la commande pip3 install gdal

Ce qui en retour, produit l'erreur suivante :

  • Projet 6
  • GÉOS
  • epel-release (Pour CentOS 8)
  • gdal-libs
  • PowerTools (j'ai également activé les powertools)

L'erreur que j'ai repérée dans la sortie ci-dessus est cpl_port.h : aucun fichier ou répertoire de ce type et j'ai recoupé cette erreur sur d'autres forums, qui ont conseillé d'exécuter la commande suivante :

sudo apt-get installer libgdal-dev

Et enfin, exécutez la commande pip3 install gdal.

Bien que, depuis que j'exécute CentOS 8, je n'ai pas accès à "apt-get" et j'ai plutôt essayé d'utiliser "Yum" mais je n'ai pas eu de chance de faire fonctionner la solution proposée ci-dessus.


La géotransformation est utilisée pour convertir les coordonnées cartographiques en pixels et inversement à l'aide d'une transformation affine. Les 3e et 5e paramètres sont utilisés (avec les 2e et 4e) pour définir la rotation si votre image n'a pas de 'nord en haut'.

Mais la plupart des images sont orientées vers le nord, puis les 3e et 5e paramètres sont à zéro.

La transformation affine se compose de six coefficients renvoyés par GDALDataset::GetGeoTransform() qui mappent les coordonnées pixel/ligne dans l'espace géoréférencé à l'aide de la relation suivante :

Voir la section sur la géotransformation affine sur : http://www.gdal.org/gdal_datamodel.html

Reprojeter les coordonnées à l'aide de la bibliothèque GDAL

Le problème est que vous devez permuter l'ordre de vos axes pour utiliser l'espace cartésien X/Y ou Lon/Lat, et non l'ordre "Lat/Lon". Ce réglage devrait fonctionner. double x = -45,49159617 // Lon double y = -23,57014667 // Lat La différence que vous avez constatée avec votre conversion aller-retour provenait de la projection à l'extérieur.

Erreur lors de l'utilisation de la liaison java gdal

J'ai essayé d'exécuter votre code source et j'ai eu l'erreur Le chargement de la bibliothèque native a échoué. java.lang.UnsatisfiedLinkError : pas d'osrjni dans java.library.path Ainsi, le simple ajout de gdal.jar dans le chemin de génération de votre projet n'est pas suffisant pour exécuter votre programme. Il existe des dépendances de bibliothèque natives externes. Consultez ce lien, https://trac.osgeo.org/gdal/ticket/3598. C'est ici.

Travailler avec des rasters dans une géodatabase fichier (.gdb) avec GDAL

Actuellement, les pilotes FileGDB et OpenFileGDB ne gèrent que les ensembles de données vectorielles. La prise en charge des rasters ne fait pas partie de l'API FGDB d'Esri. Vous devrez utiliser les outils Esri pour exporter les rasters dans un autre format, tel que GeoTIFF.

Convertir .dbf .prj .shp .shx en GeoJson

Collectivement, ces fichiers sont appelés « ESRI Shapefile ». Le minimum requis est .shp, .shx et .dbf, mais il peut aussi y avoir .prj, .sbn, .sbx, .fbn, .fbx, .ain, .aih, .ixs, .mxs, .atx, .shp Fichiers .xml ou .cpg (sans blague !) En règle générale, vous ne faites référence qu'au fichier .shp, mais les autres fichiers doivent le faire.

Informations sur la projection Python gdal

Une idée est que vous pourriez modifier gdal_polygonize.py pour re-projeter le résultat. Utilisez un pilote MEM pour stocker le résultat polygonisé intermédiaire de dst_layer, puis reprojetez à l'aide du module osr. Une autre idée beaucoup plus simple consiste à créer une base de données VIEW qui projette la colonne de géométrie d'une table avec SRID=4326.

Le sérialiseur Django n'existe pas 'geojson' ?

Vous devez inclure le sérialiseur geojson dans settings.py SERIALIZATION_MODULES = < "geojson": "django.contrib.gis.serializers.geojson", >.

Max() implémenté avec des opérateurs de base

un autre : (A+100)*(A>-100) - 100 ici, la valeur minimale sera déplacée à 0 pour correspondre à la limite inférieure, puis replacée à -100.

Impossible de se connecter à postgres avec GDAL ogr2ogr à distance

La syntaxe de la chaîne de connexion est importante, notamment avec l'utilisation de guillemets. Voir le pilote PostgreSQL pour un exemple de ce à quoi cela devrait ressembler. Par exemple, essayez : $ ogrinfo PG:"host=172.17.2.176 port=5432 user='user' password='password' dbname='dbname'" De plus, si vous vous connectez fréquemment à cette base de données, vous pouvez utiliser des variables d'environnement.

Erreur Android libgdal.so : impossible de charger la bibliothèque « libgdal.so.1 »

Après plusieurs jours d'essais et d'erreurs (principalement des erreurs), j'ai trouvé une solution à mon problème. Je l'écris comme réponse à ma question afin qu'elle puisse être utile à d'autres. Le problème était pendant le temps de liaison de GDAL. En bref : l'éditeur de liens a créé le "vrai nom".

Comment extraire le nom du fichier d'entrée pour le fichier de sortie lors de l'utilisation de python ?

Vous pouvez spécifier le répertoire de départ et en fonction du processus d'extension, tout le fichier qu'il contient, voici ce que je ferais. import os import fnmatch filenamels = [] inputExtension = ".nc" outputExtension = ".img" inputDir = "C:Users" for filename in os.listdir(inputDir): if fnmatch.fnmatch(filename, '* ' + inputExtension): filenamels.append(filename[:-len(inputExtension)]) pour fn.

Utilisez topojson pour projeter des fichiers de formes avec différentes étendues

N'utilisez pas --width et --height pour spécifier l'échelle de la projection et traduire à la place, et vous obtiendrez une projection fixe qui sera la même pour toutes les entrées. En fait, étant donné que la mise à l'échelle et la traduction par défaut de d3.geo.albers sont conçues pour s'adapter à une fenêtre d'affichage 960 × 500, vous pouvez simplement dire : topojson -o.

Autoriser une application Web PHP + application GDAL à utiliser les services Google via OAuth2

Vous avez raison, vous essayez d'utiliser une clé d'authentification côté serveur en utilisant le flux d'authentification côté client, cela ne fonctionnera pas. Ce que vous devez faire est plutôt de transmettre votre jeton d'accès au pilote GDAL GME. Vous pouvez le faire de l'une des manières suivantes : Ajoutez simplement a.

Description des paramètres de GDAL SetGeoTransform

La géotransformation est utilisée pour convertir les coordonnées cartographiques en pixels et inversement à l'aide d'une transformation affine. Les 3e et 5e paramètres sont utilisés (avec les 2e et 4e) pour définir la rotation si votre image n'a pas de 'nord en haut'. Mais la plupart des images sont au nord, puis les deux.

Python gdal a cessé de fonctionner lors de l'utilisation d'ogr Within, Contains ou autre

Le crash est très probablement un piège bien documenté. Un travail similaire peut être fait avec Shapely, qui n'a pas ce piège. En outre, la requête dans la boucle for peut être effectuée plus rapidement en utilisant un index Rtree, il existe quelques questions-réponses liées à shapely + Rtree.

Installation de GDAL avec le support ECW

Cela fonctionne pour GDAL 1.11.2, mais cela devrait fonctionner de nouveau à 1.10.0. Téléchargez la dernière version de la bibliothèque ECW ici (actuellement 5.2.1) : http://download.intergraph.com/download-portal $ unzip erdas-ecwjp2sdk-v5.2.1-linux.zip $ chmod +x ERDAS_ECWJP2_SDK-5.2 .1.bin $ ./ERDAS_ECWJP2_SDK-5.2.1.bin Choisissez Desktop Read-Only et acceptez la licence. Un répertoire nommé hexagone est extrait. Copiez-le dans.

Réplication d'un chropleth dans D3.js en utilisant d3.tsv

Votre code s'attend à ce que les comtés soient indexés par prop id, par ex. rateById.set(d.id, +d.rate). Cependant, votre tsv les appelle "Mun", comme dans "Mun" "rate" "01001" 350058.5 "01002" 224305 "01003" 132115 Donc changez d.id en d.Mun (en 2 endroits), ou renommez "Mun" .

Configuration de Django avec GeoDjango Support dans AWS Beanstalk ou l'instance EC2

J'ai donc maintenant un workflow ebextensions fonctionnel sur la pile 2013.09 et ami-35792c5c. Pour la pile 2014.09 voir l'autre solution. La solution ci-dessous fonctionne avec postgis en installant le composant gdal nécessaire, 00_repo.config doit ressembler à ceci : files : "/etc/yum.repos.d/pgdg-93-redhat.repo": mode: "000644" propriétaire : groupe racine : contenu racine : | [pgdg93].

Conversion de DTED vers un autre format

Bon je pense avoir compris : à moins de passer par un raster virtuel, je ne devrais pas utiliser de bandes raster mais juste CreatCopy. Voici un code de travail pour moi : #include <iostream> #include "gdal_priv.h" #include "cpl_conv.h" // pour CPLMalloc() en utilisant l'espace de noms std int main(int argc, char *argv[]) < QApplication a(argc , argv).

Impossible d'installer rgdal dans ubuntu 14.04 (non défini pour faire référence à 'pj_ctx_fclose')

Enfin, j'ai résolu ce problème. Premièrement, en supprimant proj4-4.8 par apt-get. sudo apt-get remove libproj-dev Deuxièmement, ajouter mon chemin lib proj4-4.9 compilé dans un nouveau fichier de configuration (tel que rgdal.conf) sous le chemin '/etc/ld.so.conf.d/'. cd /etc/ld.so.conf.d sudo touch rgdal.conf echo 'le chemin de la lib de proj4-4.9' | sudo tee -a.

Python gdal symbole non défini GDALRasterBandGetVirtualMem

Si une version de gdal est déjà installée, ce problème se produira même si vous vous êtes lié à la version installée dans

/.local. Une solution est donnée dans un article de Planet MYSQL ici : Dans ce cas, nous pouvons dire à l'éditeur de liens de précharger notre nouvelle bibliothèque 1.11.0 dans notre shell this.

Installation de gdal à utiliser avec topo json et D3

Le moyen le plus simple d'installer GDAL sur Windows est d'utiliser le programme d'installation OSGEO4W. Utilisez simplement l'option "Avancé" et vous pouvez choisir GDAL dans "Commandline_Utilities"-"gdal". Le programme d'installation vous permet également d'avoir plusieurs versions de GDAL côte à côte, si jamais vous en avez besoin.

Erreur d'installation de fiona dans OSX 10.9

Si vous utilisez XCode 5.1, le problème est probablement des options non reconnues dans Clang. Voir ici pour plus de détails sur la façon de résoudre ce problème : http://bruteforce.gr/bypassing-clang-error-unknown-argument.html

Comment configurer le projet GDAL 1.9.2 CPP sur Windows VS C++?

Pour l'installation, je l'ai fait. partagez simplement pour que quelqu'un puisse gagner du temps Étape 1 Téléchargez ce projet à partir d'ici Ce projet est juste un fichier de projet. Vous devez y copier le code source de GDAL dans les étapes suivantes. Étape 2 Extrayez-le. Étape 3 Maintenant, copiez-collez tous les dossiers/fichiers de gdal-1.11.1.

Fichier de projection manquant dans le package rgdal de R pour l'analyse géospatiale

J'ai eu un rapide Google et suis tombé sur ce post qui suggère qu'il s'agissait d'une erreur OS X où les packages ont été construits de manière incorrecte. Sur mon système Mac, je n'ai pas pu reproduire votre erreur, donc pour ce que ça vaut j'ai installé mes versions de rgdal et rgeos à partir de http://www.kyngchaos.com/software:frameworks.

Ne peut pas ouvrir le fichier d'inclusion expat.h GDAL? Comment configurer la bibliothèque XML d'expatriés ?

Je l'ai résolu. Juste partager pour la connaissance. Téléchargez et installez la bibliothèque XML dans le lecteur C et indiquez son chemin dans les répertoires d'inclusion via View.Propery Manager. C:Expat-2.0.0Sourcelib .

Convertir les caractéristiques d'un GeoJSON « multifonctions » en objets spatiaux R

Vous pouvez utiliser le paramètre require_geomType pour diverses fonctions GDAL afin d'extraire les fonctionnalités dont vous avez besoin : library(rgdal) ogrListLayers("test.geojson") ## [1] "OGRGeoJSON" ## attr(,"driver") ## [ 1] "GeoJSON" ## attr(,"nlayers") ## [1] 1 # Cela échoue mais vous pouvez au moins voir les geoms qu'il gémit à propos de ogrInfo("test.geojson", "OGRGeoJSON") ## Erreur.

Fonction GDAL pour diviser une grande image en morceaux spécifiques

Vous pouvez diviser l'image en morceaux/tuiles avec gdal2tiles. Vous pouvez également le diviser en plusieurs parties en fonction de la quantité de pixels pour chaque morceau en utilisant gdal_translate avec l'option -srcwin. Cependant, cela nécessiterait que vous écriviez un script bash/batch pour parcourir vos 30 morceaux d'image. Si votre.

Impossible d'ouvrir le fichier d'entrée libpng15-vc9.lib

vous devez donner le chemin absolu d:/libpng-16/libpng16.lib ou Ajouter le chemin (d:/libpng-16) dans Linker->General->Additional Library Directives Il en va de même pour toutes les autres bibliothèques. .

Masque GTiff avec shapefile en python avec gdal, ogr, etc.

Cette fonctionnalité est déjà intégrée dans les utilitaires de ligne de commande gdal. Compte tenu de votre cas, je ne vois aucune raison pour laquelle vous voudriez le faire vous-même en Python. Vous pouvez parcourir les géométries avec OGR et pour chacune appeler gdalwarp avec les paramètres appropriés. import ogr sous-processus d'importation.

Comment obtenir les coordonnées d'une cellule dans un géotif ?

Utilisez la matrice de transformation affine, qui mappe les coordonnées des pixels aux coordonnées du monde. Ainsi, par exemple, utilisez le package affine. (Il existe d'autres façons de faire la même chose, en utilisant des calculs simples.) from affine import Affine fname = '/path/to/raster.tif' Voici deux façons d'obtenir la matrice de transformation affine, T0. Par exemple, en utilisant.

Numpy Read as Array échoue lors de l'utilisation de float 32

Comment traiteriez-vous plus de 4 Go avec un processus 32 bits ? En fait, vous êtes généralement limité à 2 Go. Il peut être configuré pour être davantage sur les machines Unix, mais sur Windows, les processus 32 bits sont toujours limités à 2 Go. Passez plutôt à python 64 bits.

Convertir un PNG avec 4 bandes en n'importe quel format avec 1 bande et une table de couleurs

Peut-être que cette commande : convert E8.png -colors 256 E8-256colors.bmp vous rapproche de ce que vous voulez ? Il est un peu grand, cependant, ce bitmap. (129 Mo). Donc celui-ci devrait être plus petit : convert E8.png -type palette -colors 256 E8-palette-256colors.bmp Le dernier ne fait que 16 Mo. Votre titre dit "tout format".

Écriture de fichiers netCDF4 compressés avec raster

Les fichiers ncdf ne sont pas écrits via GDAL car le package rgdal (au moins la version binaire sous Windows) n'est pas fourni avec le pilote ncdf. Au lieu de cela, writeRaster utilise le package ncdf ou (de préférence) ncdf4, vous devrez donc utiliser les arguments fournis par le package ncdf4 (dans la fonction ncvar_def). Ce.

Aucun module nommé osgeo.ogr

Le problème est résolu de cette manière : (VIRTUAL_ENV)[email protected] :

$ pip install --no-install GDAL==1.11.2 1.11.2 car ma version GDAL est 1.11.2 : (VIRTUAL_ENV)[email protected]ntu :

$ gdal-config --version 1.11.2 suivant : (VIRTUAL_ENV)[email protected] :

/.virtualenvs/VIRTUAL_ENV/build/GDAL$ python setup.py build_ext --include-dirs=/usr/include/gdal/ (VIRTUAL_ENV)[email protected] :

/.virtualenvs/bamap/build/GDAL$ pip install --no-download GDAL --include-dirs=/usr/include/gdal/ pour moi est correct.

Comment corriger l'erreur de recherche de symbole : erreurs de symbole non définies dans un environnement de cluster

Après deux douzaines de commentaires pour comprendre la situation, il s'est avéré que libhdf5.so.7 était en fait un lien symbolique (avec plusieurs niveaux d'indirection) vers un fichier qui n'était pas partagé entre les processus en file d'attente et les processus interactifs. Cela signifie que même si le lien symbolique lui-même repose sur un fichier partagé.

Erreur lors de la création d'une base de données spatiale à l'aide d'EXTENSIONS

Le problème était qu'il utilisait la bibliothèque sqlite3 installée par défaut par OS X. Après avoir lié la bibliothèque brassée à l'aide du lien brew sqlite3 --force, j'ai pu créer l'extension postgis.

Comment convertir les données ponctuelles collectées à intervalles de grille en un jeu de données géoréférencées dans r ?

Sans connaître au moins la projection et les données de l'ensemble de données (mais, espérons-le, plus d'informations telles que la résolution et l'étendue), il n'y a pas de moyen facile de le faire. S'il s'agit d'une carte dérivée, essayez de trouver ce qui a été utilisé pour la générer. Avec ces informations, vous pouvez ensuite utiliser.


1 réponse 1

Pour une image nord vers le haut sans rotation (c'est-à-dire padfTransform[4] == padfTransform[2] == 0 ), la formule devient simplement :

c'est-à-dire ajouter le X (ou Y) de départ au numéro de colonne (ou de ligne) multiplié par la largeur (ou la hauteur) du pixel.

Les termes de rotation peuvent être ce qui vous fait trébucher. Lorsqu'un pixel est tourné, l'inclinaison Y doit être prise en compte lors du calcul de la coordonnée de carte X et l'inclinaison X doit être prise en compte lors du calcul de la coordonnée de carte Y. Il y a une explication assez détaillée dans l'article de wikipedia sur les fichiers du monde.

Qu'il y ait une rotation, c'est ce qui me faisait trébucher. Alors pouvez-vous me dire ce que P et L signifient ? J'ai supposé naïvement que P était la dimension Pixel et L était la dimension Line (les lignes entre les pixels). Oui, c'est aussi stupide qu'un deuxième raisonnement avec un senior. Dans cette veine, que signifient ces lettres?

@philologon P est le numéro de colonne et L est le numéro de ligne. Ce sont des "coordonnées" sur l'image raster.

Merci. Je vois maintenant que c'est juste là dans la documentation. Je trouve toujours un moyen de m'embarrasser dans ce genre de choses, généralement en survolant trop vite.


Traiter les fichiers géospatiaux depuis le shell¶

Les données raster se trouvent souvent dans une grande variété de formats : binaire “Raw”, GeoTIFF, HDF, NetCDF, etc. GDAL propose une abstraction qui traite une très grande variété de formats de manière cohérente, simplifiant l'accès aux données. Un fichier raster en ce qui concerne GDAL se compose d'un ou plusieurs canaux (tableaux de données à deux dimensions). Chaque élément du tableau (pixel) représente une zone. L'emplacement de ce pixel particulier est codé par sa position (ligne, colonne) dans le tableau et à la fois par son géotransformation et informations de projection. La géotransformation convertit le nombre de pixels dans la position des lignes et des colonnes en un système de référence. Ce système est en outre caractérisé par ses propriétés de projection (par exemple, pour cartographier des positions à la surface de la Terre sur un plan). La géotransformation doit connaître le coin supérieur gauche de l'image, ainsi que l'espacement des pixels. Cette information est codée dans un vecteur à six éléments :

  1. Position x en haut à gauche (Est)
  2. Résolution de pixels E-W (résolution de pixels horizontale)
  3. Rotation. 0 si l'image est “Nord en haut”
  4. Position y en haut à gauche (Nord)
  5. Rotation. 0 si l'image est “Nord en haut”
  6. Résolution de pixels N-S (résolution de pixels verticale. Notez que cette valeur est généralement négative. Pouvez-vous deviner pourquoi ?)

Voyons comment cela fonctionne dans un exemple réel. Pour ce faire, nous utiliserons l'utilitaire de ligne de commande gdalinfo :

La syntaxe est très simple : vous donnez le nom de fichier comme premier argument et gdalinfo rapporte les propriétés de l'ensemble de données. Ce fichier particulier est un GeoTIFF (voyez comment GDAL nous en dit autant dans la ligne Driver). Il répète ensuite le nom du fichier et indique sa taille (dans ce cas, 200 par 200 pixels). Le système de coordonnées est une projection UTM/33N utilisant un système de référence WGS84, et les lignes suivantes sont une description complète de la projection et de tous les paramètres nécessaires. La ligne d'origine est l'emplacement d'origine du jeu de données, c'est à dire., les coordonnées du coin supérieur gauche de l'image, suivies de l'espacement des pixels. Si des métadonnées (données décrivant les données, telles que l'auteur, les paramètres utilisés dans la production de l'ensemble de données, etc.) sont présentes dans le fichier, elles sont signalées. Dans ce cas, deux éléments de métadonnées sont donnés : AREA_OR_POINT et INTERLEAVE . Suite à cela, nous avons le cadre de délimitation des données (en coordonnées projetées ainsi qu'en degrés de longitude/latitude), ainsi que le centre du jeu de données. Enfin, une liste des bandes, le type de données de chacune et le schéma d'interprétation des couleurs (le cas échéant) sont fournis.

Une exigence typique dans de nombreuses applications consiste à recadrer, rééchantillonner et reprojeter les données d'un fichier. L'utilitaire gdalwarp fait tout cela (et bien plus encore. Consultez l'aide de la ligne de commande pour un avant-goût de ses nombreuses capacités). Dans cet exemple, nous utiliserons les données d'occupation du sol de l'instrument MODIS, et extrairons et reprojeterons une région d'intérêt, la reprojeterons et la rééchantillonnerons. La zone d'intérêt est le parc national de Kakadu, situé dans le Territoire du Nord en Australie (le parc s'étend des latitudes 131,88E à 133E et 14S à 12S environ). La projection de sortie est la grille cartographique de l'Australie, avec le datum GDA94.

Les données MODIS sont fournies en carré carrelage représentant une zone de 10 degrés (1200x1200km) à la surface de la Terre. Les données sont maillées à l'aide de la projection sinusoïdale MODIS. Toutes les dalles couvre-sol MODIS sont disponibles sur le système UCL (en /data/geospatial_10/ucfajlg/MOD12/ ), mais vous devez savoir lequel couvre Kakadu. Le site Web suivant vous permet de voir ce qu'est la tuile. Ce sera au format suivant hXXvYY , où XX est la tuile horizontale et YY est la tuile verticale.

Après avoir trouvé la tuile, identifiez le fichier MODIS HDF qui contient les données et exécutez gdalinfo dessus. Notez les éléments de métadonnées et les sous-ensembles de données. Les fichiers HDF contiennent différents jeux de données spatiales. Dans le cas du produit d'occupation du sol MODIS, il s'agit de différents schémas d'occupation du sol, ainsi que des données auxiliaires concernant l'incertitude, etc. Pour cet exercice, nous souhaitons utiliser le produit LandCover 1. Cela se fait en utilisant le nom du sous-ensemble de données au lieu du nom du fichier. GDAL comprend cela, recherche le fichier et sélectionne l'ensemble de données requis. Ils sont de la forme HDF4_EOS:EOS_GRID:"/path/to/hdf/file.hdf":MOD12Q1:Land_Cover_Type_1 . Notez que vous devez échapper au " dans la coquille.

Il est plus pratique d'utiliser les codes EPSG pour spécifier la projection cible. Ils sont plus courts, plus faciles à mémoriser et moins sujets aux erreurs. Le plus simple est de rechercher GDA94 MDA94 zone 53 sur spatialreference.org, et de noter le code EPSG (un numéro !).

Nous calculons maintenant la limite du parc dans le système de référence spatiale cible à l'aide de gdaltransform :

Dans le morceau de code ci-dessus, nous avons utilisé une conversion des valeurs de latitude/longitude dans WGS-84 (code EPSG 4326) vers le code EPSG cible (marqué ici comme XXXX). Nous sommes maintenant prêts à transformer les données à l'aide de gdalwarp :

Vérifie qu'en effet fichier_sortie.tif correspond à l'étendue, la projection et la résolution que vous attendez. Essayez aussi gdalinfo -stats fichier_sortie.tif pour avoir une idée rapide de la distribution des valeurs des cellules raster (c'est une vérification rapide utile).


Classification raster basée sur un seuil

Ensuite, nous allons créer un objet raster classé. Pour ce faire, nous utiliserons la fonction numpy.where pour créer un nouveau raster basé sur des classifications booléennes. Classons la hauteur de la canopée en quatre groupes : - Classe 1 : CHM = 0 m - Classe 2 : 0m < CHM <= 20m - Classe 3 : 20m < CHM <= 40m - Classe 4 : CHM > 40m


  • Développement:
    • La liste de diffusion gdal-dev devrait servir de point central pour les discussions initiales
    • Le ticket #4294 devrait servir pour les aspects techniques et le référentiel de fichiers de correctifs et de test.
    • Le code et l'historique des modifications se trouvent dans un référentiel git à l'adresse https://github.com/etiennesky/gdal-netcdf/ (branche netcdf-dev)
    • Toute personne souhaitant contribuer peut publier des correctifs ici ou disposer d'un accès en écriture au référentiel.
    • Étant donné que les modifications ci-dessus impliquaient de nombreux changements liés à des parties importantes du pilote, nous avons géré le processus de développement réel à l'aide d'un référentiel Github pour l'intégration et les tests.
    • La suite d'autotests avait été modifiée (dans svn trunk) pour tester les améliorations - y compris l'utilisation d'un cf-checker en ligne pour tester la conformité lorsqu'il est disponible.
    • Le code sera affecté à svn trunk, et si possible (en fonction des retours) sera rétroporté sur la série 1.8 (si une version 1.8.2 survenait après la mise en œuvre et des tests suffisants).
    • Le commit aura lieu dès que nous aurons l'approbation des membres de la liste gdal-dev ou du vote RFC (si nécessaire)

    LA DESCRIPTION

    Les systèmes de référence de coordonnées qui peuvent être transmis sont tout ce qui est pris en charge par l'appel OGRSpatialReference.SetFromUserInput(), qui inclut EPSG Projected, Geographic ou Compound CRS (c'est-à-dire EPSG:4296), une définition CRS de texte bien connue (WKT), les déclarations PROJ.4 , ou le nom d'un fichier .prj contenant une définition WKT CRS.

    À partir de GDAL 2.2, si le SRS a un datum vertical explicite qui pointe vers un géoïde PROJ.4 et que le jeu de données en entrée est un jeu de données à bande unique, une correction verticale sera appliquée aux valeurs du jeu de données.

    Un SRS source doit être disponible pour que la reprojection se produise. Le SRS source sera par défaut celui trouvé dans l'ensemble de données d'entrée lorsqu'il est disponible, ou comme remplacé par l'utilisateur avec -s_srs

    Les systèmes de référence de coordonnées qui peuvent être transmis sont tout ce qui est pris en charge par l'appel OGRSpatialReference.SetFromUserInput(), qui inclut EPSG Projected, Geographic ou Compound CRS (c'est-à-dire EPSG:4296), une définition CRS textuelle bien connue (WKT), les déclarations PROJ.4 , ou le nom d'un fichier .prj contenant une définition WKT CRS.

    À partir de GDAL 2.2, si le SRS a un datum vertical explicite qui pointe vers un géoïde PROJ.4 et que le jeu de données en entrée est un jeu de données à bande unique, une correction verticale sera appliquée aux valeurs du jeu de données.

    S'il n'est pas spécifié (ou n'est pas déduit de -te et -ts), gdalwarp générera un raster en sortie avec xres=yres, et cela même en utilisant gdalwarp dans des scénarios n'impliquant pas de reprojection.

    à proximité: rééchantillonnage du voisin le plus proche (par défaut, algorithme le plus rapide, pire qualité d'interpolation).

    bilinéaire: rééchantillonnage bilinéaire.

    cubique: rééchantillonnage cubique.

    spline cubique: rééchantillonnage de splines cubiques.

    lanczos: Lanczos fenêtré sinc resampling.

    moyenne: rééchantillonnage moyen, calcule la moyenne pondérée de tous les pixels ne contribuant pas à NODATA.

    rms moyenne quadratique/moyenne quadratique de tous les pixels ne contribuant pas à NODATA (GDAL >= 3.3)

    mode: mode rééchantillonnage, sélectionne la valeur qui apparaît le plus souvent de tous les points échantillonnés.

    max: rééchantillonnage maximal, sélectionne la valeur maximale de tous les pixels ne contribuant pas à NODATA.

    min: rééchantillonnage minimum, sélectionne la valeur minimum de tous les pixels ne contribuant pas à NODATA.

    méd: rééchantillonnage médian, sélectionne la valeur médiane de tous les pixels ne contribuant pas à NODATA.

    q1: rééchantillonnage du premier quartile, sélectionne la valeur du premier quartile de tous les pixels ne contribuant pas à NODATA.

    q3: rééchantillonnage du troisième quartile, sélectionne la valeur du troisième quartile de tous les pixels ne contribuant pas à NODATA.

    somme: calcule la somme pondérée de tous les pixels ne contribuant pas à NODATA (depuis GDAL 3.1)

    Les options de création disponibles varient selon le pilote de format, et certains formats simples n'ont aucune option de création. Une liste d'options prises en charge pour un format peut être répertoriée avec l'option de ligne de commande --formats mais la documentation du format est la source définitive d'informations sur les options de création de pilote. Voir la documentation spécifique au format raster_drivers pour les options de création légales pour chaque format.

    Le mosaïquage dans un fichier de sortie existant est pris en charge si le fichier de sortie existe déjà. L'étendue spatiale du fichier existant ne sera pas modifiée pour accueillir de nouvelles données, vous devrez donc peut-être la supprimer dans ce cas ou utiliser l'option -overwrite.

    Les lignes de coupe du polygone peuvent être utilisées comme masque pour restreindre la zone du fichier de destination qui peut être mise à jour, y compris la fusion. Si la couche OGR contenant les entités de ligne de coupe n'a pas de SRS explicite, les entités de ligne de coupe doivent se trouver dans la SRS du fichier de destination. Lors de l'écriture dans un jeu de données cible qui n'existe pas encore, son étendue sera celle du raster d'origine à moins que -te ou -crop_to_cutline ne soient spécifiés.

    Lors des ajustements de décalage vertical, l'option du transformateur -to ERROR_ON_MISSING_VERT_SHIFT=YES peut être utilisée pour sortir une erreur dès qu'une valeur de décalage vertical est manquante (au lieu de 0 utilisé).

    A partir de GDAL 3.1, il est possible d'utiliser comme format de sortie un pilote qui ne supporte que l'opération CreateCopy. Cela peut impliquer en interne la création d'un fichier temporaire.


    Masques de nodata internes

    Les fichiers TIFF peuvent contenir des masques de transparence internes. Le pilote GeoTIFF reconnaît un répertoire interne comme étant un masque de transparence lorsque la valeur du bit FILETYPE_MASK est définie sur la balise TIFFTAG_SUBFILETYPE. Selon la spécification TIFF, ces masques de transparence internes contiennent 1 échantillon de données 1 bit. Bien que la spécification TIFF autorise des résolutions plus élevées pour le masque de transparence interne, le pilote GeoTIFF ne prend en charge que les masques de transparence internes des mêmes dimensions que l'image principale. Les masques de transparence des aperçus internes sont également pris en charge.

    Lorsque l'option de configuration GDAL_TIFF_INTERNAL_MASK est définie sur YES et que le fichier GeoTIFF est ouvert en mode de mise à jour, la méthode CreateMaskBand() sur un jeu de données TIFF ou rasterband créera un masque de transparence interne. Sinon, le comportement par défaut de création de masque nodata sera utilisé, c'est-à-dire la création d'un fichier .msk, selon RFC 15

    À partir de GDAL 1.8.0, la bande de masque interne 1 bit est dégonflée et compressée. Lors de leur relecture, pour faciliter la conversion entre la bande de masque et la bande alpha, les bandes de masque sont exposées à l'utilisateur comme étant promues à 8 bits complets (c'est-à-dire que la valeur des pixels non masqués est de 255), sauf si l'option de configuration GDAL_TIFF_INTERNAL_MASK_TO_8BIT est définie sur NON. Cela n'affecte pas la façon dont la bande de masque est écrite (elle est toujours de 1 bit).


    Comment accéder au tableau GeoTransform depuis gdal sur la ligne de commande ? - Systèmes d'information géographique

    3.6 Rapprochement des projections

    3.6 Rapprochement des projections

    3.6.1.2 Modification des projections

    3.6.2.1 Exécuter les scripts prérequis

    3.6.3 Réconcilier les jeux de données

    3.6.3.1 charger un jeu de données exemplaire

    3.6.3.2 obtenir des informations à partir du fichier source

    3.6.3.6 Mettre tout cela ensemble

    Cette section de notes est facultative au cours, et le tuteur peut décider ne pas de passer par là en classe.

    Cela dit, les informations et exemples contenus ici peuvent être très utiles pour accéder et traiter certains types de données géospatiales.

    En particulier, nous nous occupons d'obtenir des enregistrements de données climatiques de l'ECMWF que nous utiliserons plus tard pour l'ajustement du modèle. Ces données sont au format netcdf (couramment utilisé pour les données climatiques) avec une grille en latitude/longitude. Pour « superposer » ces données avec un autre ensemble de données (par exemple, le produit MODIS LAI que nous avons utilisé) dans une projection différente (surface égale), nous utilisons la fonction gdal

    où wkt représente un texte bien connu et est une chaîne de format de projection.

    Les autres codes que nous utilisons sont ceux que nous avons développés plus tôt.

    Dans ces notes, nous apprendrons :

    Nous enregistrerons ensuite quelques jeux de données que nous utiliserons plus tard dans les notes. Pour cette raison, il est possible de sauter cette section et d'y revenir plus tard.

    Pour diverses raisons, différents ensembles de données géospatiales viendront dans différentes projections.

    Considérant, par exemple, les données dérivées du satellite de l'orbite terrestre basse LEO, le capteur satellite obtiendra généralement des données d'image dans une fauchée lorsqu'il passe sur la surface de la Terre. Projeté sur la surface de la Terre, cela apparaît comme une bande de données :

    mais dans le système d'enregistrement de données par satellite, les données sont stockées sous la forme d'un tableau régulier. Nous appelons ces données satellitaires des données de « fauchée » (ou « de type fauchée ») (dans le système de coordonnées de l'imageur satellite) et nous pouvons obtenir des produits de données jusqu'au niveau 2 sous une telle forme.

    Ces données sont souvent difficiles à traiter pour les data scientists. They generally prefer to have a dataset mapped to a uniform space-time grid, even though this may involve some re-sampling, which can sometimes result in loss of information. The convenience of a uniform space-time grid means that you can. for example, look at dynamic features (information over time).

    The properties of the ‘uniform space-time grid’ will depend on user requirements. For some, it is important to have an equal area projection, one where the ‘pixel size’ is consistent throughout the dataset.

    even if this is not convenient for viewing some areas of the Earth (map projections are very political!).

    Or other factors may be more important, such as user familiarity with a simple latitude/longitude grid typically used by climate scientists.

    For others, a conformal projection (preserving angles, as a cost of distance distortion) may be vital.

    We have see that MODIS data products, for example, come described in an equal area sinusoidal grid:

    but the data for high latitudes and longitudes appears very distorted.

    We must accept then, that dealing with geospatial data must involve some understanding of projections, as well as practically, how to convert datasets between different projections.

    Earth shape

    One factor that can make life even more complicated than using just different projections is the use of different assumptions about the Earth shape (e.g. sphere, spheroid, radius variations). Often, the particular assumptions used by a group of users is just a result of history: it is what has ‘traditionally’ used for that purpose. It can be seen as too bothersome or expensive to change this.

    Since we can convert between different projections though, we can also deal with different Earth shape assumptions. We just have to be very clear about what was assumed. If at all possible, the geospatial datasets themselves should contain a full description of the projection and Earth shape assumed, but this is not always the case.

    The datasets we will mostly be dealing are in the following projections:

    MODIS Sinusoidal (tested), which assumes a custom spherical Earth of radius 6371007.181 m. In cartopy this is given as Sinusoidal.MODIS:

    In the MODIS data hdf products, the projection information is stored directly. Extracted as a wkt, this is:

    According to SR-ORG, the MODIS projection uses a spherical projection ellipsoid but a WGS84 datum ellipsoid. This is not quite the same as the definition in the wkt above.

    It is also defined by SR-ORG with the EPSG code 6974 for software that can use semi_major and semi_minor projection definitions.

    Some software may use the simpler 6965 definition (or the older 6842).

    The MODIS projection 6974 is given as:

    None of these codes are defined in gdal (see files in $GDAL_DATA/ * .wkt for details), so to use them, we have to take the file from SR-ORG.

    For the datasets we are using, it makes no real difference whether the projection information from the file is used instead of MODIS projection 6974, so we will use that from the file. For other areas and especially for any higher spatial resolution datasets, it is worth investigating which is more appropriate.

    ECMWF netcdf format (derived from GRIB) ERA Interim climate datasets (1979-Present). These are geographic coordinates (latitude/longitude) in a custom spheroid with a radius 6371200 m.

    This information can be obtained from any example of a GRIB file, as we shall see below. As a wkt, this is:

    A more common spheroid to use is WGS84, although even in that case there are multiple ‘realisations’ available (used mainly by the DoD). Users should generally implement that given in EPSG code 4326 used by the GPS system, for example.

    3.6.1.2 Changing Projections

    We can conveniently use the Python `cartopy <https://scitools.org.uk/cartopy/docs/v0.16/>`__ package to explore projections.

    We download an image taken from the satellite sensor (SEVIRI):

    The sensor builds up images of the Earth disc from geostationarty orbit, actioned by the platform spin.

    In the code below, we plot the dataset in the ‘earth disk’ (Orthographic) projection, then re-map it to the equal area Sinusoidal projection.

    Exercice 3.6.1 Extra Homework

    • Explore some different types of projection using cartopy and make a note of their features.
    • Read up (follow the links in the text above) on projections.
    • make sure we have the MODIS LAI dataset locally
    • read them in for a given country.
    • register with ecmwf, install ecmwfapi
    • get the temperature datasset from ECMWF for 2006 and 2017 for Europe
    • get the country borders shapefile

    Set up the conditions

    3.6.2.1 Run the pre-requisite scripts

    Make sure you register with ECMWF * register with ECMWF and install the API

    Sort data prerequisities * Run the codes in the prerequisites section

    3.6.3 Reconcile the datasets

    In this section, we will use gdal to transform two datasets into the same coordinate system.

    To do this, we identify one dataset with the projection and geographic extent that we want for our data (a MODIS sub-dataset here, the ‘exemplar’).

    We then download a climate dataset in a latitude/longitude grid (netcdf format) and transform this to be consistent with the MODIS dataset.

    3.6.3.1 load an exemplar dataset

    Since we want to match up datasets, we need to produce an example of the dataset we want to match up to.

    We save the exemplar as a GeoTiff format file here.

    3.6.3.2 get information from source file

    Now, we pull the information we need from the source file (the netcdf format t2 dataset).

    • the data type
    • the number of bands (time samples in this case)
    • the geotransform of the dataset (the fact that it’s 0.25 degree resolution over Europe)

    and access these from the source dataset.

    Now, set up a blank gdal dataset (in memory) with the size, data type, projection etc. that we want, the reproject the temperature dataset into this.

    The processing may take some time if the LAI dataset is large (e.g. France).

    The result will be of the same size, projection etc as the cropped LAI dataset.

    Finally, we crop the temperature dataset using gdal.Warp() and save it to a (GeoTiff) file:

    Now let’s look at the time information in the metadata:

    The time information is in hours since 1900-01-01 00:00:00.0 . This is not such a convenient unit for plotting, so we can use datetime to fix that:

    3.6.3.6 Putting this together

    We can now put these codes together to make a function match_netcdf_to_data() :

    In this section, we have learned about projections, and have reconciled two datasets that were originally in different projections. NThey also were defined with geoids with different Earth radius assumptions.

    These issues are typical when dealing with geospatial data.

    This part of the notes is non compulsory, as the codes and ideas are quite complicated for people just begining to learn coding. We have included it here to allow students to revisit this later. It is also included because we want to develop some interesting datasets for modelling, so we need to deal with reconciling datasets from different providers in different projections.

    In this section, we have developed the following datasets:

    Exercice 3.6.2 Extra Homework

    Go carefully through these notes and make notes of the processes we have to go through to reconcile datasets such as these.

    Learn what issues to look out for when coming across a new dataset, and how to use Python code to deal with it. Try to stick to one geospatial package as far as possible ( gdal here) as you can make problems for yourself by mixing them.