Comment couper une `` image en mosaïque '' d'un jeu de données raster à l'aide de GDAL?

22

Je travaille sur une application qui doit créer des tuiles (jpeg) à partir d'un ensemble de données raster donné. Mon inclination initiale était d'utiliser gdal2tiles.py, mais ses performances semblent pouvoir être améliorées.

Cela m'amène à poser la question suivante: quel serait le moyen le plus rapide de couper une «image en mosaïque» d'un jeu de données raster à l'aide de GDAL? Et par «image en mosaïque», je veux dire juste un simple jpeg ou png.

Dans mon prototype, j'utilise les liaisons MapScript Serveur C # pour faire le travail. C'est-à-dire que je crée un objet de carte, parcourt toutes les limites de tuiles que je dois couper, définit l'étendue des objets de carte, puis enregistre l'image résultante. Les performances de cette approche sont nettement meilleures que celles de gdal2tiles.py, mais je me demande si j'utilise directement GDAL si je ne peux pas le rendre encore plus rapide. Quelqu'un peut-il suggérer un flux de travail similaire avec les méthodes GDAL?

EDIT: Après quelques recherches supplémentaires aujourd'hui, j'ai trouvé la réponse juste en face de moi. Si vous avez téléchargé FWTools, les dossiers csharp \ apps contiennent un certain nombre de classes pour illustrer les liaisons C # GDAL. Dans mon cas, les GDALRead.cs et GDALReadDirect.cs étaient ce que je cherchais.

user890
la source
2
@vadp, @markusn, @mapperz et tout le monde - veuillez être descriptif. En plus du lien, une ou deux phrases expliquent pourquoi vous pensez que cet outil mérite d'être examiné et ce qui se différencie des autres sera utile. Nous voulons que la réponse soit utile à l'avenir aussi bien qu'immédiatement. Tôt ou tard, Link-Rot se déclenche et si tout ce que nous avons c'est l'URL, il est difficile de trouver où le projet s'est incarné ensuite.
matt wilkie
4
Bonjour utilisateur890, pourriez-vous publier votre solution finale à la question et la marquer comme fermée? dans ce cas, il semble que l'utilisation des liaisons spécifiques au langage vous ait donné les performances dont vous avez besoin.
scw
Je ne peux pas ajouter de commentaire à mon propre article :( Mais gdal_tiler.py prend également en charge le multitraitement, mais de manière très brutale: il traite simplement 'n' sources à la fois. Néanmoins, cela fait un effet positif :)
Vadim

Réponses:

5

Quelqu'un a passé du temps à faire en sorte que gdal2tiles.py utilise plusieurs processeurs: gdal parallèle

Je l'ai utilisé et cela semble fonctionner. Il utilise avec succès les 4 cœurs à 100% et réduit le temps total pour créer les carreaux au 1 / 4e du temps d'origine.

hazzey
la source
Vous pouvez consulter gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python . Je préfère comme
GeospatialInformationTech
2

Avez-vous essayé cela? http://www.klokan.cz/projects/gdal2tiles/

markusN
la source
Merci pour le commentaire, il s'agit essentiellement d'une interface graphique pour le script gdal2tiles.py, un peu lente.
user890
1

Dans ma société, nous avons écrit des scripts python personnalisés, en utilisant gdal_warp (c'était avant que nous sachions que gdal2tiles existait). Il était plus rapide que g2t, surtout lorsque nous l'avons réécrit pour qu'il s'exécute sur de nombreux cœurs (en utilisant python threadpool). Il a également produit des tuiles de meilleure qualité (l'interpolation lanczos sur g2t semble mal fonctionner, dans gdal_warp, les tuiles résultantes étaient étonnantes).

Il faut un peu d'effort pour écrire les scripts, vous devez calculer manuellement les boîtes de délimitation résultantes, configurer certaines options pour les projections, etc.

stachu
la source
0

Une autre option utilise TileCache (WMS-C). Bien que je n'aie jamais utilisé gdal2tiles, je ne m'attendrais pas à ce que TileCache apporte de meilleures performances.

Quoi qu'il en soit, les stratégies suivantes peuvent accélérer le pavage:

  • Metatiling, si vous utilisez TileCache (je me demande si gdal2tiles a une fonctionnalité similaire).
  • Dans le cas où les données raster sont une grosse ortophoto, utilisez un format comme ECW . Étant donné que ce format comporte une décompression partielle , en utilisant ce format, vous pouvez obtenir un gain de performances significatif.
dariapra
la source
0

Le script gdal_tiler.py de http://code.google.com/p/tilers-tools pourrait être une option utile.

Habituellement, il présente de très bonnes performances par rapport à gdal2tiles.py et il devrait fonctionner avec n'importe quelle source GDAL (ensemble de données), en particulier, il ne nécessite pas de conversion d'un ensemble de données source en RVB.

Vadim
la source
-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Si le géopackage ou MBTILES ne nécessite aucun python qui est fait nativement avec gdal_translate.EXE. vous devez également exécuter gdaladdo pour ajouter plusieurs niveaux de zoom. j'utilise également qtiles / qmetatiles pour qgis desktop. Toujours rien ne peut rivaliser avec le logiciel commercial maptiler pro. Si vous avez besoin d'un dossier de tuiles, convertissez simplement MBTILES en TMS OU XYZ avec mbUtil python

GeospatialInformationTech
la source
Le lien ne fonctionne plus
AndrewHarvey