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ération des coordonnées GPS [WD17]


Sujet :

WinDev

  1. #1
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut Récupération des coordonnées GPS
    Bonjour,

    J'essaye en vain de récupérer les coordonnées GPS de diverses adresses.

    Voici mon premier code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sAdresse				est une chaîne
    tempCoord 				est un gglCoordonnée
    rLatitude, rLongitude 	sont des réels
     
    sAdresse = "34000 Montpellier, france, 3 rue Puech Villa"
    // On récupère les coordonnées
    tempCoord = GglAdresseVersCoordonnées(sAdresse)
     
    rLatitude 	= tempCoord.Latitude
    rLongitude 	= tempCoord.Longitude
    Celui-ci ne fonctionne pas du tout. J'ai toujours 0 dans les coordonnées quelque soit l'adresse;

    Voici le 2eme code que je teste :
    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
     
    sLatitude, sLongitude 	sont des réels
    sUrlgglMaps est une chaîne
    xmlGgl est un xmlDocument
     
    // Adresse de la nouvelle API
    sUrlgglMaps="http://maps.googleapis.com/maps/api/geocode/xml?address="+sAdresse+"&sensor=false"
     
    // Exécution de la requête
    SI HTTPRequête(sUrlgglMaps) = Vrai ALORS
     
    	// l'API retourne un document xml
    	xmlGgl = XMLOuvre(HTTPDonneRésultat(),depuisChaîne)
    	sLatitude = xmlGgl.GeocodeResponse.result.geometry.location.lat..Texte
    	sLongitude = xmlGgl.GeocodeResponse.result.geometry.location.lng..Texte
     
    FIN
    Celui-ci me retourne une erreur
    Le document XML n'a pas pu être chargé
    Merci bien de votre aide.

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Ton 2ème code s'approche de la méthode que j'utilise (tout au moins de l'API de google)

    Le code d'appel de la procédure qui récupère les coordonnées d'une adresse...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    xLat est un numérique
    xLng est un numérique
    sAdresse est une chaîne = "34000 Montpellier, france, 3 rue Puech Villa"
     
    Geocode_Adresse(sAdresse,xLat,xLng)
     
    Info("X = " + xLat + RC + "Y = " + xLng)
    et la procédure...

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    PROCEDURE Geocode_Adresse(sAdresse,xLat=0,xLng=0)
     
    Res est un booléen
     
    // L'adresse doit être sans accents et des "+" doivent remplacer les " "
    sAdresse = SansAccent(sAdresse)
    sAdresse = Remplace(sAdresse," ","+")
     
    sURL est une chaîne = "http://maps.googleapis.com/maps/api/geocode/xml?language=fr&address="+sAdresse+"&sensor=false"
     
    // Lance la requête
    SI PAS HTTPRequête(sURL) ALORS
    	xLat = 0
    	xLng = 0
    	Erreur(ErreurInfo())
    	RETOUR
    FIN
    // Récupère le résultat de la requête
    sXML est une chaîne = HTTPDonneRésultat(httpRésultat)
     
    // Crée un document XML
    Res = XMLDocument("Geocode_XML", sXML)
    SI ErreurDétectée ALORS
    	xLat = 0
    	xLng = 0
    	Erreur(ErreurInfo())
    	RETOUR
    FIN
     
    // Positionne sur la balise racine du document XML 
    XMLRacine("Geocode_XML")
     
    // Recherche le statut si pas OK retour
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/status")
    SI XMLEnDehors("Geocode_XML")  ALORS
    	xLat = 0
    	xLng = 0
    	Info("La balise <status> n'a pas été trouvé.")
    	RETOUR
    FIN
    SI Majuscule(XMLDonnée("Geocode_XML"))<>"OK" ALORS 
    	xLat = 0
    	xLng = 0
    	Info("La balise <status> n'est pas OK" + RC + "Valeur retournée : " + XMLDonnée("Geocode_XML"))
    	RETOUR
    FIN
     
    // recherche la latitude
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/result/geometry/location/lat")
    SI XMLEnDehors("Geocode_XML") ALORS
    	xLat = 0
    SINON
    	xLat = Val(XMLDonnée("Geocode_XML"))
    FIN
     
    // Recherche la longitude
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/result/geometry/location/lng")
    SI XMLEnDehors("Geocode_XML") ALORS
    	xLng = 0
    SINON
    	xLng = Val(XMLDonnée("Geocode_XML"))
    FIN
     
    // Ferme le document XML
    XMLTermine("Geocode_XML")
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  3. #3
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut
    Bonjour,

    J'ai mis le code que vous m'avez fournis dans une procédure :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    PROCEDURE CalculerCoordonneesGPS(sAdresse est une chaîne)
     
    LOCAL
    	sXML 		est une chaîne = ""
    	xLat 		est un numérique
    	xLng 		est un numérique
    	bResult		est un booléen
    	sURL 		est une chaîne
     
    // L'adresse doit être sans accents et des "+" doivent remplacer les " "
    sAdresse = SansAccent(sAdresse)
    sAdresse = Remplace(sAdresse," ","+")
     
    sURL = "http://maps.googleapis.com/maps/api/geocode/xml?language=fr&address="+sAdresse+"&sensor=false"
     
    // Lance la requête
    SI PAS HTTPRequête(sURL) ALORS
    	xLat = 0
    	xLng = 0
    	Erreur(ErreurInfo())
    	RENVOYER xLat + ":" + xLng
    FIN
    // Récupère le résultat de la requête
    sXML = HTTPDonneRésultat(httpRésultat)
     
    // Crée un document XML
    bResult = XMLDocument("Geocode_XML", sXML)
    SI ErreurDétectée ALORS
    	xLat = 0
    	xLng = 0
    	Erreur(ErreurInfo())
    	RENVOYER xLat + ":" + xLng
    FIN
     
    // Positionne sur la balise racine du document XML 
    XMLRacine("Geocode_XML")
     
    // Recherche le statut si pas OK retour
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/status")
    SI XMLEnDehors("Geocode_XML")  ALORS
    	xLat = 0
    	xLng = 0
    	Info("La balise <status> n'a pas été trouvé.")
    	RENVOYER xLat + ":" + xLng
    SINON
    	SI Majuscule(XMLDonnée("Geocode_XML"))<>"OK" ALORS 
    		xLat = 0
    		xLng = 0
    		Info("La balise <status> n'est pas OK" + RC + "Valeur retournée : " + XMLDonnée("Geocode_XML"))
    		RENVOYER xLat + ":" + xLng
    	FIN
    FIN
     
    // recherche la latitude
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/result/geometry/location/lat")
    SI XMLEnDehors("Geocode_XML") ALORS
    	xLat = 0
    SINON
    	xLat = Val(XMLDonnée("Geocode_XML"))
    FIN
     
    // Recherche la longitude
    XMLExécuteXPath("Geocode_XML","/GeocodeResponse/result/geometry/location/lng")
    SI XMLEnDehors("Geocode_XML") ALORS
    	xLng = 0
    SINON
    	xLng = Val(XMLDonnée("Geocode_XML"))
    FIN
     
    // Ferme le document XML
    XMLTermine("Geocode_XML")
     
    RENVOYER xLat + ":" + xLng
    Voici comment je l'utilise :
    1 - Je charge un fichiers TXT contenant des adresses (voir pièce jointe)
    2 - Je lis le fichier ligne pas ligne et je recompose l'adresse
    Voici un exemple de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Récupération des valeurs contenues dans le fichier
    		sAdresse 		= SansEspace(ExtraitChaîne(sChaîneLue,2,";"))
    		sCodePostal 	= SansEspace(ExtraitChaîne(sChaîneLue,3,";"))
    		sVille 			= SansEspace(ExtraitChaîne(sChaîneLue,4,";"))
     
    		sTempAdresse = sCodePostal + " " + sVille + ", france, " + sAdresse 
     
    		sValRetour = CalculerCoordonneesGPS(sTempAdresse)
     
    		sLatitude 	= ExtraitChaîne(sValRetour, 1, ":")
    		sLongitude 	= ExtraitChaîne(sValRetour, 2, ":")
    Mon problème vient du fait que pour la 2eme boucle ça plante.

    Quand je récupère la valeur de la variable sURL sur mon deuxième appel de la procédure j'ai comme erreur : La balise <status> n'est pas OK alors que si je colle cette URL dans mon navigateur cela fonctionne.

    Merci bien pour votre aide.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    C'était vicieux, heureusement que tu as fournis ton fichier txt...

    Pour google map il faut que les espaces soient remplacés par des + dans l'adresse donc dans la procédure il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sAdresse = Remplace(sAdresse," ","+")
    J'ai mis un point d'arrêt et regardé ce qui se passait
    J'ai été très surpris de voir qu'un espace n'était pas remplacé par un + entre le numéro et le type de voie.

    En regardant avec un éditeur hexa je me suis aperçu au lieu de 20 pour un espace il y avait A0
    Par conséquent il suffit de remplacer le A0 par un espace ou un + avant de lancer la procédure pour que ça marche
    sTempAdresse = Remplace(sTempAdresse,Caract(HexaVersEntier("A0"))," ")
    C'était vraiment vicieux...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  5. #5
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 618
    Points : 222
    Points
    222
    Par défaut
    Bonjour,

    Je ne comprend pas cela ne fonctionne toujours pas.

    Je joint donc la fenêtre et la procédure que j'utilise.

    Le but est d'avoir des liste (la liste fournie dans le ZIP s'appelle "restauration rapide.txt" et de les insérer dans une BDD avec leurs coordonnées GPS.

    Merci bien.
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip GPS.zip (153,3 Ko, 184 affichages)

  6. #6
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Bonjour

    Tu as extrait ta fenêtre d'un contexte et j'avais du mal à la faire fonctionner.
    Plutôt que de chercher je t'ai fait un petit projet test... en wd17...
    Fichiers attachés Fichiers attachés
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonjour Laurent30s

    J'essaye de faire tourner la procédure GglAdresseVersCoordonnées sur WinDev19, ça a fonctionné 1 fois hier et depuis, toujours 0. Et je cherche, je cherche, rien de rien.

    Je suis tombé sur ce forum et cela m'intéresse.

    J'ai essayé de lancer ton projet j'ai toujours une erreur :

    Erreur à la ligne 24 du traitement Procédure locale Geocode_Adresse.
    Vous avez appelé la fonction XMLDocument.
    Le document XML "Geocode_XML" existe déjà.
    As-tu une idée ?

    Pourtant WinDev annonce que des corrections ont été apportées depuis sur cette procédure.

    Merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/10/2008, 07h28
  2. Récupération des coordonnées de la souris
    Par kabil.cpp dans le forum MFC
    Réponses: 11
    Dernier message: 23/05/2008, 06h43
  3. Réponses: 0
    Dernier message: 13/11/2007, 11h39
  4. Réponses: 2
    Dernier message: 15/06/2007, 10h08
  5. Réponses: 8
    Dernier message: 04/06/2007, 11h51

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