2010-11-11 37 views
1

Je crois que l'API Google vous permet d'obtenir des coordonnées pour une adresse donnée. Cependant, la plupart (ou devrais-je dire tout) des exemples que j'ai trouvés ne sont pas pour vb. Habituellement, c'est un exemple javascript qui me laisse confus.Code pour obtenir les coordonnées GPS de l'adresse (VB6/VBA/VBScript)

Voici un code qui utilise un service de géocodage. Cela fonctionne très bien. C'est juste que je veux interroger Google Maps directement moi-même.

Public Function fgGetLatAndLongUsingAddress(sAddress As String) As String 

    'This function works best with a complete address including the zip code 
    Dim sResponseText As String, sReturn As String 

    sReturn = "none" 

    Dim objHttp As Object, sQuery As String 
    sQuery = "http://rpc.geocoder.us/service/csv?address=" & Replace(sAddress, " ", "+") 
    Set objHttp = CreateObject("Msxml2.ServerXMLHTTP") 
    objHttp.Open "GET", sQuery, False 
    objHttp.send 
    sResponseText = objHttp.ResponseText 
    gsLastLatLongResponseText = sResponseText 
    Set objHttp = Nothing 


    If Len(sResponseText) > 0 Then 
     If InStr(sResponseText, "Bad Request") > 0 Then 
      'Do Nothing 
     ElseIf InStr(sResponseText, "couldn't find this address") > 0 Then 
      'Do Nothing 
     Else 
      If InStr(sResponseText, vbCrLf) > 0 Then 
       'We got more than one result 
      End If 
      If InStr(sResponseText, ",") > 0 Then 
       Dim aryInfo() As String 
       aryInfo = Split(sResponseText, ",") 
       sReturn = aryInfo(0) & "," & aryInfo(1) 
      End If 
     End If 
    End If 


    fgGetLatAndLongUsingAddress = sReturn 

End Function 

Répondre

3

Cela devrait faire l'affaire. Vous devez ajouter une référence à la bibliothèque MSXML6 (Microsoft XML, v6.0) via Outils> Références dans Excel

Option Explicit 

Function getGoogleMapsGeocode(sAddr As String) As String 

Dim xhrRequest As XMLHTTP60 
Dim sQuery As String 
Dim domResponse As DOMDocument60 
Dim ixnStatus As IXMLDOMNode 
Dim ixnLat As IXMLDOMNode 
Dim ixnLng As IXMLDOMNode 


' Use the empty string to indicate failure 
getGoogleMapsGeocode = "" 

Set xhrRequest = New XMLHTTP60 
sQuery = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=" 
sQuery = sQuery & Replace(sAddr, " ", "+") 
xhrRequest.Open "GET", sQuery, False 
xhrRequest.send 

Set domResponse = New DOMDocument60 
domResponse.loadXML xhrRequest.responseText 
Set ixnStatus = domResponse.selectSingleNode("//status") 

If (ixnStatus.Text <> "OK") Then 
    Exit Function 
End If 

Set ixnLat = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lat") 
Set ixnLng = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lng") 

getGoogleMapsGeocode = ixnLat.Text & ", " & ixnLng.Text 

End Function 

Les seules différences réelles à votre exemple sont:

  • l'URL et changent paramètres de la requête à utiliser l'API Google
  • traiter la réponse comme un document XML et en utilisant XPath pour extraire les résultats requis

de toute évidence e Il n'y a aucune erreur de manipulation dans mon code, mais cela devrait vous donner une idée de ce dont vous avez besoin pour utiliser l'API. Vous voulez certainement consulter le API documentation vous-même pour en savoir plus sur la limitation de débit, etc

+0

+1 pour raison technique, -1 pour violation potentielle du service de géocodage de Google [termes et conditions] (https://developers.google.com/maps/documentation/geocoding/). Citation: * L'API de géocodage ne peut être utilisée qu'avec une carte Google; géocodage des résultats sans les afficher sur une carte [Google] est interdite. * – MarkJ

0

Merci pour ce code! Cela fonctionne très bien. Merci pour le heads up sur les limites de taux. Voici ce que Google a à dire:

L'utilisation de l'API Google Geocoding est soumise à une limite de 2 500 demandes de géolocalisation par jour. (L'utilisateur de Google Maps API Premier peut effectuer jusqu'à 100 000 demandes par jour.) Cette limite est appliquée pour empêcher les abus et/ou la réaffectation de l'API de géocodage, et cette limite peut être modifiée à l'avenir sans préavis. De plus, nous appliquons une limite de débit de demande pour éviter les abus du service. Si vous dépassez la limite de 24 heures ou abusez du service, l'API de géocodage peut cesser temporairement de fonctionner pour vous. Si vous continuez à dépasser cette limite, votre accès à l'API de géocodage peut être bloqué. Remarque: l'API de géocodage ne peut être utilisée qu'avec une carte Google; géocodage des résultats sans les afficher sur une carte est interdite. Pour plus d'informations sur l'utilisation autorisée, consultez les restrictions de licence de l'API Google Maps.

+0

Notez en particulier que vous devez afficher les résultats sur une carte Google. J'espère qu'une fois que vous avez lancé le VB, vous affichez les résultats sur une carte Google et nulle part ailleurs :) – MarkJ