Suite

Lisser/interpoler le raster en Python à l'aide de GDAL ?


Je développe en Python et j'utilise GDAL d'OSGEO pour manipuler et interagir avec des rasters et des shapefiles.

Je souhaite prendre un fichier de formes contenant des entités ponctuelles et l'interpoler dans un raster de surface. À l'heure actuelle, j'utilise la méthode "RasterizeLayer" qui grave une valeur de l'entité ponctuelle dans le raster (qui est défini avec toutes les valeurs nodata) mais laisse tous les pixels intacts en tant que valeur "nodata". Il me reste donc une trame de type damier.

Ce que j'ai après avoir utilisé RasterizeLayer :

Ce que je veux pour un produit final :

Je crois que la fonction que je recherche est connue sous le nom de "Spline_sa()" à partir de l'importation arcgisscripting.

GDAL a-t-il une fonction similaire ou existe-t-il une méthode différente pour obtenir la sortie souhaitée ?


Je jetterais un œil à NumPy et Scipy - il existe un bon exemple d'interpolation de données ponctuelles dans le SciPy Cookbook à l'aide de la fonction scipy.interpolate.griddata. Évidemment, cela nécessite que vous ayez les données dans un tableau numpy ;

  • En utilisant les liaisons python GDAL, vous pouvez lire vos données en Python en utilisantgdal.Dataset.ReadAsArray()pour une trame.
  • Avec OGR, vous parcourez la couche d'entités et extrayez les données de point du fichier de formes (ou mieux encore, écrivez le fichier de formes dans un fichier CSV en utilisantGÉOMÉTRIE=AS_XYZ[voir le format de fichier OGR CSV] et lire le csv en Python).

Une fois que vous avez une sortie maillée, vous pouvez ensuite utiliser GDAL pour écrire le tableau numpy résultant dans un raster.

Enfin, si vous n'avez pas de chance avec la bibliothèque d'interpolation Scipy, vous pouvez toujours essayer scipy.ndimage également.


Jetez un œil à l'API de maillage GDAL. Je ne sais pas si cela est exposé dans les liaisons Python, mais sinon, vous appelez l'utilitaire gdal_grid via le module subprocess.

L'API de grille GDAL utilise uniquement la pondération de distance inverse, la moyenne mobile et le voisin le plus proche, elle n'implémente pas les splines. Une autre option consiste à utiliser Scipy.


Un peu vieux pour ce fil, mais j'ai écrit un module simple qui utilise l'algorithme KNN de sklearn appelé skspatial.

https://github.com/rosskush/skspatial

Vous pouvez importer un fichier de formes à l'aide de geopandas et sélectionner une colonne et il interpolera une surface pouvant être exportée vers un raster. C'est très basique et probablement pas la meilleure façon de le faire, mais cela garde au moins tout en python pur.


Voir la vidéo: Jana Gee. ජන ග ගයනය. පලන මතෂ. MADHURA TV (Octobre 2021).