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

Contribuez Discussion :

Géocoder des adresses postales [Sources]


Sujet :

Contribuez

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut Géocoder des adresses postales
    bonjour,

    Pour obtenir le géocodage (longitude et latitude) d'adresses postales dans Access, une solution consiste à réaliser une requête http sur Google Map qui retourne les informations dans un fichier xml :
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    Option Compare Database
    Option Explicit
     
    'Type public contenant le géocodage de l'adresse postale
    Public Type tAdresseGeo
       dLatitude As Double
       dLongitude As Double
       byCodeExactitude As Byte
       iCodeRetour As Integer
    End Type
     
    'Clef éventuelle d'inscription à Google Map
    Private Const gcsKeyGM As String = ""
     
    'fonction de test
    Public Function test()
       Dim tGeo As tAdresseGeo
     
       'appel du géocodage de l'adresse postale
       tGeo = PostalToGeoViaGM("Place bellecour", , "lyon")
     
       MsgBox "Latitude" & vbTab & vbTab & ": " & tGeo.dLatitude & vbCrLf & _
              "Longitude" & vbTab & vbTab & ": " & tGeo.dLongitude & vbCrLf & vbCrLf & _
              "Exactitude" & vbTab & ": " & GetLibelleExactitude(tGeo.byCodeExactitude) & _
            " [" & tGeo.byCodeExactitude & "]" & vbCrLf & _
              "Code retour" & vbTab & ": " & GetLibelleRetour(tGeo.iCodeRetour) & _
            " [" & tGeo.iCodeRetour & "]"
    End Function
     
     
    '---------------------------------------------------------------------------------------
    ' Procedure : PostalToGeoViaGM
    ' DateTime  : 12/12/2008 23:09
    ' Author    : Philippe
    ' Purpose   : Géocodage d'une adresse postale via google map
    '           : Renseigner le maximum de paramètres pour obtenir un meilleur géocodage
    '           : Vérifier le géocodage car on a parfois de mauvaises surprises...
    '---------------------------------------------------------------------------------------
    Public Function PostalToGeoViaGM(Optional ByVal vAdresse As Variant = Null, _
                                     Optional ByVal vCP As Variant = Null, _
                                     Optional ByVal vCommune As Variant = Null, _
                                     Optional ByVal vDepartement As Variant = Null, _
                                     Optional ByVal sPays As Variant = "France") As tAdresseGeo
       On Error GoTo errtag
       Dim oXmlDoc As Object
       Dim sUrl As String, sFormatAdresse As String, sGeo As String
       Dim iPosSep As Integer
     
       If Not IsNull(vAdresse) Then vAdresse = Replace(vAdresse, ",", " ")
     
       'Formatage de l'adresse
       sFormatAdresse = (vAdresse + ",") & _
                        (vCP + ",") & _
                        (vCommune + ",") & _
                        (vDepartement + ",") & _
                        sPays
     
       'Création de l'URL d'appel, renvoi d'un xml contenant les informations
       sUrl = "http://maps.google.com/maps/geo?" & _
              "q=" & sFormatAdresse & _
              "&output=xml" & _
              "&key=" & gcsKeyGM
     
       'Créér l'objet xml
       Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
       With oXmlDoc
          .Async = False
          If .Load(sUrl) And Not .selectSingleNode("//code") Is Nothing Then
             'Code retour de l'appel
             PostalToGeoViaGM.iCodeRetour = CInt(.selectSingleNode("//code").Text)
     
             If Not .selectSingleNode("//coordinates") Is Nothing Then
                'Niveau d'exactitude du codage géo
                PostalToGeoViaGM.byCodeExactitude = CByte(.selectSingleNode("//AddressDetails").getAttribute("Accuracy"))
     
                sGeo = .selectSingleNode("//coordinates").Text
                iPosSep = InStr(sGeo, ",")
                'sépare la latitude de la longitude
                If iPosSep Then
                   PostalToGeoViaGM.dLongitude = Val(Left$(sGeo, iPosSep - 1))
                   PostalToGeoViaGM.dLatitude = Val(Mid$(sGeo, iPosSep + 1))
                End If
             End If
          End If
       End With
    fin:
       Set oXmlDoc = Nothing
       Exit Function
    errtag:
       MsgBox "Erreur n°:" & Err & vbCrLf & "Description:" & Err.Description, vbExclamation, "PostalToGeoViaGM"
       Resume fin
    End Function
     
    'Retourne le libellé du code retour de l'appel
    Public Function GetLibelleRetour(ByVal iCodeRetour As Integer) As String
       Dim sTxt As String
       Select Case iCodeRetour
       Case 200
          sTxt = "Pas d'erreur..."
       Case 400
          sTxt = "Requête incorrecte"
       Case 500
          sTxt = "Erreur du serveur"
       Case 601
          sTxt = "Adresse postale manquante"
       Case 602
          sTxt = "Adresse postale inconnue"
       Case 603
          sTxt = "Adresse géographique non disponible"
       Case 604
          sTxt = "Direction inconnue"
       Case 610
          sTxt = "Mauvaise clef Google Map"
       Case 620
          sTxt = "Limite des demandes est dépassée"
       Case Else
          sTxt = "?"
       End Select
       GetLibelleRetour = sTxt
    End Function
     
    'Retourne le libellé du code d'exactitude
    Public Function GetLibelleExactitude(ByVal byExactitude As Byte) As String
       Dim sTxt As String
       Select Case byExactitude
       Case 0
          sTxt = "Localisation inconnue..."
       Case 1
          sTxt = "Pays"
       Case 2
          sTxt = "Région"
       Case 3
          sTxt = "Département"
       Case 4
          sTxt = "Commune"
       Case 5
          sTxt = "Code postal"
       Case 6
          sTxt = "Rue"
       Case 7
          sTxt = "Intersection"
       Case 8
          sTxt = "Adresse"
       Case 9
          sTxt = "Bâtiment"
       Case Else
          sTxt = "?"
       End Select
       GetLibelleExactitude = sTxt
    End Function
    Bon encodage,

    Philippe

  2. #2
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Excellent...

    Cela fonctionne très bien, il me reste juste à implémenter proprement...

    Une question. Lors de l'affichage dans Google Maps, il apparaît dans une fenêtre les coordonnées.

    Serait-ils possible de remplacer par autre chose, par ex. "Chez Marie, spécialités de fruits de mer" ? Ou à la limite, ne pas l'afficher ?

    Domi2

  3. #3
    Invité
    Invité(e)
    Par défaut
    Superbe

    Merci Philben.
    Etant en plein dans la géo-localisation en ce moment, c'est un beau cadeau de Noêl que tu me fais là.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Domi2 et Gayot,

    Domi2 :
    Serait-ils possible de remplacer par autre chose, par ex. "Chez Marie, spécialités de fruits de mer" ? Ou à la limite, ne pas l'afficher ?
    je pense que tu parles du programme <gmclick.mdb> que j'avais posté pour répondre à une question.
    Pour enlever la boite d'info dans google map, il faut ouvrir le fichier <opengm.html> et retirer les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var myHtml = "Latitude : " + latlng.lat() + "<br>Longitude : " + latlng.lng();
            map.openInfoWindow(latlng, myHtml);
    Gayot, heureux de pouvoir t'aider.
    J'ai programmé une version simple de l'api google map, il existe d'autre paramètres qui peuvent être utiles, voir la référence ici .
    Je dois géocoder moi aussi plusieurs milliers d'adresses, la fonction de base que j'ai proposée va peut être évoluer suivant les résultats obtenus...

    Merci à vous

    Philippe

  5. #5
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour Philben,

    J'ai bien regardé ton appli "gmclick"... Mais là, je suis "largué..."

    Je ne vois pas du tout comment ouvrir la carte en fonction de coordonnées (récupérées avec tes codes)...

    Et en admettant que cela soit possible, question subsidaire, serait-il possible d'avoir une ouverture par défaut en mode "plan" ?

    Ci-après, le code que j'utilise actuellement pour afficher la carte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Déclaration de la variable
        Dim strUrl As String
     
        If Not IsNull(Forms.frmImmeubles.ImmLatLong.Value) Then
     
            strUrl = "http://maps.google.fr/maps?f=q&hl=fr&q=" & Forms.frmImmeubles.ImmLatLong.Value
     
        Else
     
            strUrl = "http://maps.google.fr"
     
        End If
     
        Me.ctlNavigateur.Navigate strUrl
    Domi2

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Domi2,

    ci-joint une solution pour afficher un message dans google map sur un point gps et zoom définis.

    Amicalement

    Philippe

  7. #7
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Et un grand merci pour cet exemple...

    J'ai toutefois un peu de peine à l'adapter.

    En fait, je désire ouvrir le formulaire, puis afficher directement un emplacement grâce à des coordonnées passées en variable.

    J'ai testé avec le bouton, cela fonctionne. Mais pas si je veux "enchaîner" l'action à l'ouverture du formulaire (j'ai un message d'erreur).

    En fait, le problème vient peut-être d'ici déjà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, Url)
       gbInit = True
    End Sub
    Je ne comprend d'une part pas l'utilité de cette procédure, ni surtout comment et quand elle est déclenchée. J'imagine lors du chargement complet de la page, mais je n'en suis pas sûr...

    J'ai essayé de placer un "DoEvents" après le chargemement de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.WebBrowser.Navigate CurrentProject.Path & "\" & gcsNomPage
    DoEvents
    sans plus de résultat.

    Quelques explications seraient les bienvenues...

    Domi2

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Domi2,

    ci-joint une solution pour de multiples points.
    Si on clique sur un marker de la carte, le message apparait.

    Philippe

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    C'est parfait...

    Le résultat obtenu est bien meilleur que la solution que j'avais précédemment...

    Ci-après, le code adapté (dans l'événement Sur chargement du formulaire) :

    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
    '--------------------------------------------------------------------------------------------
    ' Projet          : Géolocalisation
    ' Auteur          : philben - http://access.developpez.com
    ' Version / Date  : 1.0 - 23.12.2008
    ' Révision / Date : -
    ' Commentaires    : Géolocalisation d'une adresse. Nécessite la procédure AddPoint
    ' Lien            : http://www.developpez.net/forums/d658507/hardware-systemes-logiciels/
    '                   microsoft-office/access/contribuez/geocoder-adresses-postales/
    '--------------------------------------------------------------------------------------------
     
        If Not ModeDebug Then On Error GoTo GestionErreurs
     
        'Positionne le formulaire
        DoCmd.MoveSize 50, 20
     
        'Affichage du sablier
        DoCmd.Hourglass True
     
        'Déclaration des variables
        Dim dblLat As Double
        Dim dblLong As Double
     
        Dim strLigne1 As String
        Dim strLigne2 As String
     
        dblLat = Nz(Forms.frmImmeubles.ImmLat.Value, 0)
        dblLong = Nz(Forms.frmImmeubles.ImmLong.Value, 0)
     
        If (dblLat) = 0 Or (dblLong) = 0 Then
     
            Me.ctlNavigateur.Navigate CurrentProject.Path & "\Système\" & strNomPage
     
            'Affichage du sablier
            DoCmd.Hourglass False
     
            Exit Sub
     
        End If
     
        strLigne1 = Forms.frmImmeubles.txtImmAdresse
        strLigne2 = Forms.frmImmeubles.cboImmCommune.Column(1)
     
        Me.ctlNavigateur.Navigate CurrentProject.Path & "\Système\" & strNomPage
     
        Do
     
            DoEvents
     
        Loop While Me.ctlNavigateur.busy
     
        AddPoint dblLat, dblLong, 16, "" & strLigne1 & ",<br> " & strLigne2 & ""
     
        'Affichage du sablier
        DoCmd.Hourglass False
     
        Exit Sub
     
    GestionErreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Ajoute un point GPS dans Google map. Si zoom = 0 la carte n'est pas centrée
    Private Sub AddPoint(ByVal dblLat As Double, ByVal dblLong As Double, _
                         Optional ByVal bytZoom As Byte = 0, _
                         Optional ByVal strMessage As String)
     
        'Déclaration de la variable
        Dim strScript As String
     
        strScript = "affMsg(" & Str(dblLat) & "," & Str(dblLong) & "," & bytZoom & ",'" & strMessage & "');"
     
        Me.ctlNavigateur.Document.parentWindow.execScript strScript, "JScript"
     
    End Sub
    J'ai également réussi à adapter légérement la taille de la carte...

    Une dernière petite question si je peux me permettre.

    Il ne semble pas possible de modifier le nom du fichier OpenGM2 sans que cela ne provoque une erreur.

    Ce nom est modifiable, ou "imposé" par Google ?

    Encore un grand merci pour tous ces exemples.

    Domi2

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Domi2,

    Il ne semble pas possible de modifier le nom du fichier OpenGM2 sans que cela ne provoque une erreur.

    Ce nom est modifiable, ou "imposé" par Google ?
    tu peux le changer facilement par la ligne du code VBA en-tête du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Const gcsNomPage As String = "OpenGM2.html"
    Renommer aussi le nom du fichier html joint en conséquence.

    Amicalement,

    Philippe

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Oui, c'est bien ce que j'avais fait, mais j'obtenais une erreur... une simple faute d'orthographe sans doute... le besoin de quelques jours de repos commence à se faire sentir...

    Domi2

  12. #12
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Geocoder une liste d'adresse pour conversion TOMTOM
    Bonjour,

    dans cette discussion l'on parle de geocoder une adresse.

    Mais comment le faire pour une grande liste en vue d'une utilisation sur TOMTOM?

    En gros est il possible d'avoir une table d'adresse avec les champs LAT LONG

    Merci pour vos réponses.

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Mais comment le faire pour une grande liste en vue d'une utilisation sur TOMTOM?
    Pour trouver les adresses GPS d'une liste d'adresses postales d'une table, il faut simplement faire une boucle par code VBA sur le recordset pour géocoder et sauvegarder au fur et à mesure.

    Lorsque vous avez vos adresses GPS dans la table, il est alors possible de générer un fichier OV2 TomTom à l'aide de la classe utilisée dans l'exemple joint.

    1) Télécharger sur le site de TomTom la boite à outils <ov2Tools.zip>
    2) Extraire le fichier <makeov2.exe> dans le répertoire de l'application
    3) Ouvrir le formulaire de la base Access pour exporter un échantillon d'adresses GPS des communes françaises dans un ov2.
    4) Copier dans le GPS les 2 fichiers (.ov2 et .bmp) dans le répertoire contenant les POIs.

    On peut aussi faire une récolte d'adresses GPS par les personnes qui se rendent pour la première fois sur un lieu en sauvegardant le point GPS dans les favoris du GPS TomTom.
    On connecte ensuite les GPS à l'ordi et la base Access lit les favoris et renseigne la table.
    On exporte ainsi dans chaque GPS une base de données communes à toutes les personnes : un pour tous, tous pour un .
    Bien utile lorsque des relevés sont en milieu rural car les zones sont parfois vastes...

    Bonne continuation,

    Philippe

  14. #14
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    étant novice dans access mais se syteme de geocodage me plaisant beaucoup je souhaiterais savori comment m'en servir?

    ou insérer ce code, etc...

    merci d'avance

    Vincent

  15. #15
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    je souhaiterais savori comment m'en servir?
    Il faut placer le code dans un module standard.

    La fonction de test montre un exemple d'utilisation.

    Avec un peu de temps, je pense réaliser une interface de géocodage avec vérification des résultats, ce qui devrait simplifier l'utilisation et réduire les erreurs de positionnement.

    Cordialement,

    Philippe

  16. #16
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup.

    cependant faut il une base de données existante ?

    quelle en seait la structure? (table,...)

    désolé de poser ces questions mais je n'y connais rien du tout a access.

    merci d'avance

    Vincent

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'aurai une petite question à vous posez, j'ai à peu près le même code sous excel, seulement au bout d'une 15 aines de geocodage d'adresse j'ai "limites des demandes dépassées" puis à nouveau "pas d'erreur" et ainsi de-suite. N'y a t-il pas un moyen de repousser ces limites, je cherche mais je n'y arrive pas

    Si vous avez une idée n'hésitez pas merci !!

  18. #18
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut NewBizz impossible a comprendre comment faire le db
    Bonjour, je n'arrive pas a comprendre comment le faire marcher.

    Ma demarche est elle bonne?

    1) creation d'une table nommée tAdresseGeo
    nomer les champs vAdresse ecc
    2) coller tout le code en citation dans un module
    3) creer un formulaire en liste continue
    4) creer un bouton

    mais après?

    merci par avance pour vos aides

  19. #19
    Invité
    Invité(e)
    Par défaut Google Geocoding API (v3)
    Premièrement, félicitation Philippe pour ton code de 2008, je l'utilise régulièrement et il va très bien.

    Je me demandais si tu l'avais adapté pour la version 3 de l'API étant donné que la version 2 ne sera plus supporté? D'ailleurs, il sera "déprécié" le 8 mars 2013 (il reste encore un petit bout).

    Merci

    Jonathan

  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour NuméroAuto,

    merci pour ton message, et très heureux que ce bout de code te rende service.

    Sauf erreur, j'ai adapté le code pour l'API v3...

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    Option Compare Database
    Option Explicit
    'Type public contenant le géocodage de l'adresse postale
    Public Type tAdresseGeo
       dLatitude As Double
       dLongitude As Double
       sRetAdresse As String
       sExactitude As String
       sStatut As String
    End Type
    'fonction de test
    Public Function test()
       Dim tGeo As tAdresseGeo
       'appel du géocodage de l'adresse postale
       tGeo = PostalToGeoViaGM("place bellecour", "69002", "lyon")
       MsgBox "Code retour" & vbTab & ": " & tGeo.sStatut & vbCrLf & vbCrLf & _
              "Latitude" & vbTab & vbTab & ": " & tGeo.dLatitude & vbCrLf & _
              "Longitude" & vbTab & ": " & tGeo.dLongitude & vbCrLf & _
              "Exactitude" & vbTab & ": " & tGeo.sExactitude & vbCrLf & vbCrLf & _
              "Adresse postale" & vbTab & ": " & vbCrLf & "-> " & tGeo.sRetAdresse
    End Function
     
    '---------------------------------------------------------------------------------------
    ' Procedure : PostalToGeoViaGM via Google Geocoding API v3
    ' Version   : 1.0
    ' DateTime  : 10/10/2010 10:10
    ' Author    : Philippe
    ' Purpose   : Géocodage d'une adresse postale via google map
    '           : Renseigner le maximum de paramètres pour obtenir un meilleur géocodage
    '           : Vérifier le géocodage car on a parfois de mauvaises surprises...
    ' Paramètre : Aucun paramètre obligatoire mais tous au format texte ou NULL
    ' Retour    : Une structure tAdresseGeo contenant la latitude, la longitude,
    '             l'adresse postale renvoyée par Google, l'exactitude du géocodage,
    '             et le statut du géocodage.
    ' Infos     : Statut retourné par Google :
    '               - "OK"                : Pas d'erreur
    '               - "ZERO_RESULTS"      : Géocodage ok mais pas de résultat
    '               - "OVER_QUERY_LIMIT"  : Quota dépassé des demandes de géocodage
    '               - "REQUEST_DENIED"    : Demande refusée
    '               - "INVALID_REQUEST"   : Requête non valide
    '           : Exactitude du géocodage :
    '               - "ROOFTOP"           : Excellente, précision au n° de rue ?
    '               - "RANGE_INTERPOLATED": Bonne précision, supérieure à la rue ?
    '               - "GEOMETRIC_CENTER"  : Correcte, précision à la rue
    '               - "APPROXIMATE"       : Approximation du résultat...
    ' Référence : http://code.google.com/intl/fr-FR/apis/maps/documentation/geocoding/index.html
    '---------------------------------------------------------------------------------------
    Public Function PostalToGeoViaGM(Optional ByVal vAdresse As Variant = Null, _
                                     Optional ByVal vCP As Variant = Null, _
                                     Optional ByVal vCommune As Variant = Null, _
                                     Optional ByVal vDepartement As Variant = Null, _
                                     Optional ByVal sPays As Variant = "France") As tAdresseGeo
       On Error GoTo errtag
       Dim oXmlDoc As Object
       Dim sUrl As String, sFormatAdresse As String
       If Not IsNull(vAdresse) Then vAdresse = Replace(vAdresse, ",", " ")
       'Formatage de l'adresse
       sFormatAdresse = (vAdresse + ",") & _
                        (vCP + ",") & _
                        (vCommune + ",") & _
                        (vDepartement + ",") & _
                        sPays
       'Création de l'URL d'appel, renvoi d'un xml contenant les informations
       sUrl = "http://maps.googleapis.com/maps/api/geocode/xml?address=" & sFormatAdresse & "&sensor=false"
       'Créér l'objet xml
       Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
       With oXmlDoc
          .Async = False
          If .Load(sUrl) And Not .selectSingleNode("GeocodeResponse//status") Is Nothing Then
             'Code retour de l'appel
             PostalToGeoViaGM.sStatut = .selectSingleNode("GeocodeResponse//status").Text
             'S'il existe un résultat du géocodage
             If Not .selectSingleNode("GeocodeResponse//result") Is Nothing Then
                'Adresse postale géocodée : Permet de vérifier éventuellement une erreur de géocodage
                PostalToGeoViaGM.sRetAdresse = .selectSingleNode("//formatted_address").Text
                'Niveau d'exactitude du géocodage
                PostalToGeoViaGM.sExactitude = .selectSingleNode("//location_type").Text
                'Latitude et longitude
                PostalToGeoViaGM.dLatitude = Val(.selectSingleNode("//location//lat").Text)
                PostalToGeoViaGM.dLongitude = Val(.selectSingleNode("//location//lng").Text)
             End If
          End If
       End With
    fin:
       Set oXmlDoc = Nothing
       Exit Function
    errtag:
       MsgBox "Erreur n°:" & Err & vbCrLf & "Description:" & Err.Description, vbExclamation, "PostalToGeoViaGM"
       Resume fin
    End Function
    Rappel :
    Un statut "Ok" et une bonne exactitude ne veut pas dire que le géocodage est conforme...
    Pour éviter des erreurs grossières, on peut vérifier avec des petites routines que le géocodage est situé dans le département ou dans la commune si on possède les positions GPS des contours ou au pire les centroïdes et les superficies des communes et/ou des départements.

    Amicalement,

    Philippe

Discussions similaires

  1. Géocoder des adresses postales "Suite"
    Par Shades dans le forum IHM
    Réponses: 3
    Dernier message: 16/04/2012, 19h53
  2. [Google Maps] géocoder une adresse postale
    Par nebil dans le forum APIs Google
    Réponses: 9
    Dernier message: 24/11/2011, 12h07
  3. [PHP 5.2] Localiser des adresses postales sur une carte
    Par arthuro45 dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2010, 15h29
  4. Réponses: 3
    Dernier message: 12/01/2006, 13h27
  5. [VBA][outlook] récupération des adresses mail
    Par arno2004 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 27/07/2004, 18h48

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