IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Récupérer les données GPS d'une photo [WD15]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Récupérer les données GPS d'une photo
    Bonjour,

    Je cherche à récupérer les données GPS contenues dans les informations EXIF d'un fichier JPG. Il n'existe aucune constante du Wlangage qui retourne ces informations et les valeurs des marqueurs EXIF qui correspondent aux coordonnées GPS restent désespérément vides lorsque j'utilise la fonction ImageInfoValeur().
    Toutes vos idées ou expériences sont les bienvenues.

    Merci à tous

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je viens de regarder ce document : http://exif.org/Exif2-2.PDF

    Tout est dedans. Je ne pensais pas qu'il y avait autant de champs exif.

    Edit : je viens de trouver que la librairie CxImage permettrait de le faire. A creuser donc...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Après une petite recherche google il y a post sur le forum de pc-soft qui dois pouvoir t'aider. (ici)

    bonne lecture
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    J'ai voulu vous aider avec ImageInfoValeur, mais la fonction est mal fichue.
    De même les fonctions .Net sont lourdes.

    Du coup j'ai développé "à la main" une fonction qui extrait tout un EXIF en respectant son arborescence. L'EXIF devient un tableau de structure et chaque élément est un Variant. Un Variant pouvant être un scalaire, une chaîne, un buffer, une structure (par exemple pour les nombres rationnels), un tableau de Variant (pour une liste de valeurs), ou encore un autre tableau de structure pour un IFD secondaire.

    Dans l'exemple ci-joint, la fonction est dans cpExif, c'est ChargeExif() (le reste c'est des fonctions privées).
    Elle gère les erreurs (fichier mal formé).

    Et la fenêtre montre un exemple d'utilisation, en chargeant tout dans une table hiérarchique. J'ai inclus un JPEG qui contient des coordonnées GPS en exemple.

    NB. C'est tout frais, donc il y a un petit risque de bug.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Alors la je dis, bravo !

    Merci beaucoup pour le temps passé la dessus et surtout pour le résultat.
    Je débute sur WD, autodidacte, et en aucun cas je n'aurais réussi à récupérer ces informations.
    Je m'étais orienté vers l'utilisation d'ExifTool mais le trainement aurait été bien trop long vu le nombre de photos que je dois analyser.
    Je vais regarder tout cela et tenter de l'adapter à un traitement automatique.

    Merci beaucoup

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Donc votre cas on peut imaginer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ST_InfoGPS	est structure
    	sRefLatitude	est chaîne
    	sRefLongitude	est chaîne
    	tabLatitude		est tableau de réels
    	tabLongitude		est tableau de réels
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    PROCEDURE ChargeGPSExif(tabExif est tableau de ST_EXIF_Champ, stInfoGPS est ST_InfoGPS)
    nIndice			est entier
    tabIFD			est tableau de ST_EXIF_Champ
    tabRationals	est tableau de ST_EXIF_RationnelSansSigne
    stRational		est ST_EXIF_RationnelSansSigne
     
    VariableRAZ(stInfoGPS)
    nIndice = TableauCherche(tabExif, tcLinéaire, "nTag", 0x8825)
    SI nIndice = -1 ALORS
    	RENVOYER Faux
    FIN
    SI tabExif[nIndice].nTypeOrigine <> c_TypeIFD ALORS
    	RENVOYER Faux
    FIN
    tabIFD = tabExif[nIndice].vValeur
    nIndice = TableauCherche(tabIFD, tcLinéaire, "nTag", 1)
    SI nIndice <> -1 _ET_ tabIFD[nIndice].vValeur..Type = wlChaîne ALORS
    	stInfoGPS.sRefLatitude = tabIFD[nIndice].vValeur
    FIN
    nIndice = TableauCherche(tabIFD, tcLinéaire, "nTag", 3)
    SI nIndice <> -1 _ET_ tabIFD[nIndice].vValeur..Type = wlChaîne ALORS
    	stInfoGPS.sRefLongitude = tabIFD[nIndice].vValeur
    FIN
    nIndice = TableauCherche(tabIFD, tcLinéaire, "nTag", 2)
    SI nIndice <> -1 _ET_ tabIFD[nIndice].vValeur..Type = wlTableau _ET_ tabIFD[nIndice].nTypeOrigine = c_TypeURational ALORS
    	tabRationals = tabIFD[nIndice].vValeur
    	POUR i = 1 _A_ TableauOccurrence(tabRationals)
    		stRational = tabRationals[i]
    		TableauAjoute(stInfoGPS.tabLatitude, stRational.nNumérateur / stRational.nDénominateur)
    	FIN
    FIN
    nIndice = TableauCherche(tabIFD, tcLinéaire, "nTag", 4)
    SI nIndice <> -1 _ET_ tabIFD[nIndice].vValeur..Type = wlStructure _ET_ tabIFD[nIndice].nTypeOrigine = c_TypeURational ALORS
    	tabRationals = tabIFD[nIndice].vValeur
    	POUR i = 1 _A_ TableauOccurrence(tabRationals)
    		stRational = tabRationals[i]
    		TableauAjoute(stInfoGPS.tabLongitude, stRational.nNumérateur / stRational.nDénominateur)
    	FIN
    FIN
    RENVOYER Vrai
    Usage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tabExif	est tableau de ST_EXIF_Champ
    stInfoGPS	est ST_InfoGPS
     
    SI PAS ChargeExif(tabExif, sCheminFichier) ALORS
    	RETOUR
    FIN
    SI ChargeGPSExif(tabExif, stInfoGPS) ALORS
    	// ...
    FIN
    C'est là qu'on voit la lourdeur de mon système, il faudrait une couche au-dessus et des fonctions de manipulation de l'EXIF mémoire.
    Mais au moins c'est rigoureux et on peut tout récupérer.

  7. #7
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Chapeau Hibernatus34,
    tu continues de m'impressionner!!
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Je pense que tout cela dépasse, de très loin, le peu de connaissance que j'ai pu acquérir sur Windev. Je vais modifier tout cela pour sauvegarder les données dans un fichier.

    Une fois encore, merci pour le temps passé la dessus.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Tout cela est beaucoup trop complexe pour moi, l'avantage c'est que je connais le mode débug sur le bout des doigts
    D'après mes tests, 11 marqueurs Exif semblent avoir été trouvés :

    Variable nNbDonnées dans la procédure _ExifVersStructure()

    Ce que je ne comprends pas, c'est que le chargement des marqueurs s'arrête après la lecture du 3e...

    Comme je suis incapable de modifier quoi que ce soit dans ce programme, je vais tenter de trouver une autre solution.

    Désolé de vous avoir fais perdre du temps.

    Merci beaucoup pour l'aide apportée

  10. #10
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Il n'y a pas de souci. J'ai sorti le bazooka pour tuer le moustique, je comprends que ça soit trop lourd à utiliser.
    Je peux vous faire une fonction plus simple qui charge uniquement les infos GPS et qui stocke les rationnels dans des numériques.
    Et si vous avez trouvé un bug, notamment une image sur laquelle je ne charge pas toutes les infos, ça serait gentil de me l'envoyer.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Le fait de récupérer toutes les données de l'Exif est fantastique et surtout très utile, que je n'y comprenne pas grand chose, c'est autre chose
    Je joints à ce message la photo sur laquelle j'ai fais mes tests.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Mon code marche avec cette image.
    Voici un projet qui n'extrait que latitude + longitude.
    Tout le code est dans le bouton de la fenêtre d'exemple.
    La fonction d'extraction est aussi un peu simplifiée. (un tout petit peu car je voulais garder un peu de rigueur tout de même)
    Fichiers attachés Fichiers attachés

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Je sais m'acharner sur ce qui me résiste et je finirai par être à l'aise avec votre développement initial qui me sera d'une très grande utilité lorsque j'aurai compris pourquoi mes tests ne renvoient pas toutes les données. Le plus important était de pouvoir obtenir les coordonnées GPS et tout fonctionne à merveille.

    Je vous remercie une fois de plus l'aide que vous m'avez apportée

  14. #14
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Est-ce qu'une âme charitable pourrais convertir le projet en version 14.
    Si possible.

    Merci d'avance.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  15. #15
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Mon code ne marcherait pas en WD14, les variants n'étaient pas aussi souples.
    Il faudrait gérer différemment le résultat de la fonction.

  16. #16
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Ok merci pour l'information.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer les données envoyées par une tablette graphique
    Par greg08 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 02/06/2010, 06h04
  2. Récupérer les données EXIF d'une photo
    Par Mac__fly dans le forum C
    Réponses: 1
    Dernier message: 29/04/2009, 12h57
  3. Réponses: 7
    Dernier message: 09/03/2009, 20h12
  4. [MySQL] Récupérer les données lors d'une requete
    Par gguiz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2006, 13h34
  5. Récupérer les données interbase dans une TStringGrid
    Par Ousse dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/03/2005, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo