#1 Wed 07 July 2010 19:11
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Manipulation de raster: conversion de .tab vers .pngw
Bonjour à tous,
Je travaille sous linux (uniquement) avec Qgis, et les "boites à outils classiques" (GDAL/OGR).
On m'a transmis des fichiers raster (format PNG) issus de MapInfo, les informations de géoréférencement sont donc contenues dans un fichier .tab du même nom que mon fichier PNG.
J'aimerais pouvoir utiliser ces fichiers (PNG + TAB), or Qgis ne cale pas les rasters car le fichier pgnw est inexistant. Par ailleurs j'ai essayé d'ouvrir le fichier tab lié à mon raster en png, mais Qgis m'indique que ce fichier tab n'est pas une source de données valide. J'ai cette même erreur en essayant d'ouvrir mon tab en tant que raster ou en tant que couche vectorielle.
J'ai bien compris que l'enjeu est d'utiliser les données qui sont contenues dans le .tab et les mettre en forme dans un .pngw, mais je ne sais pas comment m'y prendre.
J'ai trouvé de la doc sur le portailsig: http://www.portailsig.org/content/pytho … fw-jgwpngw
Mais aussi des infos sur un script pour ArcGis, ou encore un outils pour MapInfo (sur ce forum, développé par Maurice Nadal).
Cependant je n'ai pas trouvé de traces d'une solution gratuite (et opensource si possible! ), compatible linux.
Pour information voici le contenu d'un des .tab associé à mes rasters:
Code:
!table !version 300 !charset WindowsLatin1 Definition Table File "AUBENAS.png" Type "RASTER" (760000.0,1960000.0) (0,0) Label "Pt1", (770000.0,1960000.0) (4000,0) Label "Pt2", (760000.0,1950000.0) (0,4000) Label "Pt3", (770000.0,1950000.0) (4000,4000) Label "Pt4" CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000
Voilà si vous aviez des pistes ou que vous pouviez me donner un coup de pouce, je vous en serait reconnaissant.
Bonne soirée.
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne
#2 Wed 07 July 2010 22:08
Re: Manipulation de raster: conversion de .tab vers .pngw
Bonjour,
Si vous avez installé OGR/GDAL et que votre répertoire contient AUBENAS.png et AUBENAS.tab (en admettant que vous n'ayez pas d'autres fichiers portant le même nom et ayant une autre extension), vous aurez le moyen expliqué ci-dessous.
Démarche :
Les commandes ci-dessous se passent dans le répertoire contenant les fichiers.
Le Tiff gère les TAB avec géoréférencement, on va donc passer par son intermédiaire (cf http://georezo.net/wiki/main:logiciels: … rencement)
Le contenu du WLD (World file) est indépendant du format d'image : c'est l'extension qui change généralement.
Cas pratique
Passer votre png en tif
Code:
gdal_translate AUBENAS.png AUBENAS.tif
Remplacer le contenu de votre AUBENAS.tab et manipuler les fichiers
Code:
sed -e "s/AUBENAS.png/AUBENAS.tif/g" AUBENAS.tab > tmp.txt rm AUBENAS.tab mv tmp.txt AUBENAS.tab
Rebasculer en png pour récupérer les coordonnées depuis le tab
Code:
gdal_translate -co "WORLDFILE=YES" AUBENAS.tif AUBENAS_bis.png rm AUBENAS_bis.png
Code:
mv AUBENAS_bis.wld AUBENAS.pngw
Il ne vous reste plus qu'à récupérer le AUBENAS.pngw et le AUBENAS.png d'origine et c'est calé
Merci de confirmer que cela marche (j'ai testé avec un jeu perso mais dans le doute...)
Cordialement
ThomasG
Dernière modification par ThomasG (Wed 07 July 2010 22:09)
Hors ligne
#3 Thu 08 July 2010 14:35
- jcr83
- Participant actif
- Date d'inscription: 17 Mar 2008
- Messages: 147
Re: Manipulation de raster: conversion de .tab vers .pngw
Dans un cas aussi simple, c'est beaucoup plus rapide à faire à la main. Il suffit de calculer la taille des pixels : 2.5 m x 2.5 m
Le fichier .pgw sera donc :
Code:
2.5 0 0 -2.5 760001.25 1959998.75
Dernière modification par jcr83 (Thu 08 July 2010 14:40)
Hors ligne
#4 Thu 08 July 2010 19:06
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: Manipulation de raster: conversion de .tab vers .pngw
Bonjour,
Tout d'abord merci beaucoup pour vos réponses!
J'ai adapté un poil la procédure pour automatiser un peu plus (j'ai plus d'un raster dans mon répertoire) j'ai donc fait.
Par ailleurs j'ai eu quelques difficultés car ma version de GDAL ne semble pas supporter la génération de worldfile pour les tiffs (bizarre non? il est possible que j'ai fait une boulette à la compilation).
Code:
Warning 6: Driver GTiff does not support WORLDFILE creation option
Bref, je m'en suis sorti en faisant des pirouettes assez simples (après pas mal de tâtonnements):
La conversion de png vers tif
Code:
find ./ -iwholename "*.png" -execdir gdal_translate {} {}.tif \;
Ça marche parfaitement!
Ensuite j'ai choisi de renommer les fichiers tif obtenus plutôt que de remplacer la chaîne de caractères du .tab:
Code:
rename -f -v 's/\.png//' *.tif
Je lance la création des fichiers wld:
Code:
find ./ -iwholename "*.tif" -execdir gdal_translate -co "WORLDFILE=YES" {} {}_bis.png \;
Je renomme les fichier world:
Code:
rename -f -v 's/tif_bis\.wld/pngw/' *.wld
Et enfin je fini le ménage pour ne garder que les png et les pngw:
Code:
rm -vrf *.TAB *.tif*
Sinon dans mon tâtonement j'ai aussi essayé ça (c'est moins pratique je trouve):
Code:
find ./ -iwholename "*.png" -execdir gdal_translate {} {}.tiff \; #conversion png vers tiff for i in `find ./ -iwholename "*.tab"|xargs`; do sed -e "s/png/png.tiff/" $i > $i.txt; done #remplacement de la chaine de caractères de .tab rename -v -f 's/TAB\.txt/TAB/' * #rempalcement des anciens .tab find ./ -iwholename "*.tiff" -execdir gdal_translate -co "WORLDFILE=YES" {} {}_bis.png \; #création des wld
Le renommage des fichiers et le ménage reste identique sur la fin.
C'est encore un peu embrouillé dans ma tête.
Par contre j'aurais une autre question:
Dans un cas aussi simple, c'est beaucoup plus rapide à faire à la main. Il suffit de calculer la taille des pixels :
Comment fais tu le calcul de la taille des pixels?
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne
#5 Fri 09 July 2010 10:47
- jcr83
- Participant actif
- Date d'inscription: 17 Mar 2008
- Messages: 147
Re: Manipulation de raster: conversion de .tab vers .pngw
jcr83 a écrit:Dans un cas aussi simple, c'est beaucoup plus rapide à faire à la main. Il suffit de calculer la taille des pixels :
Comment fais tu le calcul de la taille des pixels?
Question délirante de complexité ! Niveau Cours Moyen 1. Sachant que le terrain est un carré de 10000 m de côté, et qu'il y a 4000 x 4000 pixels, quelle est la taille d'un pixel ? Les bras m'en tombent que tu poses cette question ...
J'aurais plus facilement compris que tu me demandes pourquoi j'ai mis comme coordonnées du point d'origine les valeurs 760001.25 et 1959998.75, en non 760000 et 1960000. Sais-tu pourquoi ?
Hors ligne
#6 Fri 09 July 2010 11:45
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: Manipulation de raster: conversion de .tab vers .pngw
Salut tous,
Du nouveau coté forumsig.org avec un petit éclaircissement sur la manière dont est structurée un fichier tab (il devient alors possible de faire un script python plutot que de passer par GDAL/bash):
http://www.forumsig.org/showthread.php? … post242890
Question délirante de complexité ! Niveau Cours Moyen 1. Sachant que le terrain est un carré de 10000 m de côté, et qu'il y a 4000 x 4000 pixels, quelle est la taille d'un pixel ? Les bras m'en tombent que tu poses cette question ...
Ma question aurait était suivante sans avoir compris comment était fait un tab: "comment devines tu que ton image fait 4000px pour 10000m de coté?" Maintenant que j'ai compris comment est structuré un tab je comprend comment tu peux calculer ces infos.
Donc là si j'ai bien tout suivi, on a 10000m de coté car change angle est séparé par 10000m (jusque là tout va bien!) car 77000 - 76000 = 10000 idem pour les y: 19600000 - 1950000 = 10000 soit un carré de 10 000m de coté.
L'unité est précisée dans la dernière ligne de mon tab si je ne me trompe pas.
Idem pour les 4000 px (Le nombre pixel est inscrit dans le tab mais je ne savais extraire cette info).
(0,0) --> coin inférieur gauche
(4000,0) --> coin inférieur droit
(0,4000) --> coin supérieur gauche
(4000,4000) --> coin supérieur droit
Peux tu me confirmer que c'était le raisonnement attendu stp (histoire d'avoir l'air moins c*n la prochaine fois!)?
EDIT:
La commande gdalinfo donne pas mal de ces infos notamment: "Size is 4000, 4000".
Pour la synthaxe: gdalinfo monraster.truc
J'aurais plus facilement compris que tu me demandes pourquoi j'ai mis comme coordonnées du point d'origine les valeurs 760001.25 et 1959998.75, en non 760000 et 1960000. Sais-tu pourquoi ?
Avec les explications de gene (voir le lien précédent vers le forumsig) oui j'ai compris que
Code:
(760000.0,1960000.0) (0,0) Label "Pt1"
se rapporte à l'origine, et que
Code:
(770000.0,1950000.0) (4000,4000) Label "Pt4"
se rapporte au coin en haut à droite. Comme les worldfile ne calculent pas de la même manière, il faut compenser le fait que l'origine est au centre du pixel supérieur gauche, c'est bien ça?
Tout ça crééé un décalage c'est ce qui est expliqué ici : http://www.portailsig.org/content/pytho … fw-jgwpngw (paragraphe taille d'un pixel).
Si tu peux m'indiquer si mon raisonnement tiens la route, ça m'aidera à progresser.
Merci d'avance.
PS: Je suis débutant et je n'ai suivi aucune formation en géomatique. Étant autodidacte il est possible que j'ai des lacunes majeures (exemple: ne pas savoir "lire" un fichier .tab) qui m'empêchent de voir des "évidences", donc soyez indulgents svp!
Dernière modification par Matmat (Fri 09 July 2010 11:54)
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne
#7 Tue 07 January 2014 00:59
- jack tippit
- Participant actif
- Lieu: Limoges
- Date d'inscription: 3 Dec 2008
- Messages: 116
- Site web
Re: Manipulation de raster: conversion de .tab vers .pngw
Bonsoir à tous,
Je relance un sujet, je ne sais pas si ça se fait! J'ai exactement le problème décrit par matmat, mais les solutions évoquées par thomasG ou matmat ne fonctionne pas chez moi :-S avec la même erreur que matmat (Warning 6: Driver GTiff does not support WORLDFILE creation option) la solution que ce dernier propose n'aboutie pas non plus...
La solution d'un script python pourrait être intéressante, mais personnellement je suis plutôt R :-( (encore loupé) et dans tous les cas la personne qui travaillait avec mapInfo et que j'essaye de convertir à Qgis ne va pas se lancer dans le scripting! Un trauma a la fois!
Est-ce que depuis 2010 les choses ont évolué?
Très bonne soirée
E
Hors ligne