• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Postcode zoeken o.b.v. geocoding

Status
Niet open voor verdere reacties.

leend009

Gebruiker
Lid geworden
17 aug 2011
Berichten
27
Hoi,

Ik heb in een excel bestand de lattitude en longitude.
Ik ben op zoek naar een formule waarbij de postcode wordt gegeven.

Voorbeelden van de gegevens die ik heb zie je hieronder.

51.887374, 5.808047
51.365103, 5.574027

Kan iemand mij helpen.

mvgr
Jan Leenders
 
Dat zal je dan moeten koppelen aan een database waarin die gegevens bij elkaar staan. Dat zal niet gratis zijn.
Je kan wel handmatig de postcode opzoeken behorende bij de lengte- en breedtegraad:
http://www.postcodeatlas.nl/
 
Ik heb wel een macro die op basis van deze gegevens via een webcall de gegevens opzoekt. En dat is wel degelijk gratis :).
 
Ok dan :)
Via een API call?
 
Geen japans praten :). Maar ik doe het zo:

Code:
Sub testGPS()
Dim iX As Integer
Dim sA As String
    For iX = 2 To 14
        MsgBox GEOAddress(Replace(Cells(iX, 10), ",", "."), Replace(Cells(iX, 11), ",", "."))
    Next iX
End Sub

Code:
Function GEOAddress(dblLatitude As String, dblLongitude As String) As String
Dim strJSON As String, strAddress As String, strUrl As String
Dim lngTemp As Long
Dim objXML As Object
        
    strUrl = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" & dblLatitude & "," & dblLongitude & "&sensor=false"
    Set objXML = CreateObject("Microsoft.XMLHTTP")
    With objXML
        .Open "GET", strUrl, False
        .send
        strJSON = .responseText
    End With
    Set objXML = Nothing
    lngTemp = InStr(1, strJSON, "formatted_address")
    On Error Resume Next
    If lngTemp > 0 Then strAddress = Mid(strJSON, lngTemp + 22, InStr(lngTemp, strJSON, """,") - (lngTemp + 22))
    GEOAddress = strAddress
    
End Function

En dat werkt prima. Ik heb er nog een Replace in zitten omdat mijn systeem de coördinaten met een komma uitspuugt en niet met een punt, maar als je al de juiste opmaak hebt, hoeft dat uiteraard niet. De postcode moet er verder nog wel uitgehaald worden, maar dat is niet zo lastig.
 
YES! Ik ken ineens Japans! :D
 
Iets aangepast:

Code:
Sub M_snb()
  MsgBox F_GEO(Array("51.887374", "5.808047"))
   
  MsgBox F_GEO(Array("51.365103", "5.574027"))
End Sub

Function F_GEO(sp)
    With CreateObject("Microsoft.XMLHTTP")
        .Open "GET", "http://maps.googleapis.com/maps/api/geocode/json?latlng=" & sp(0) & "," & sp(1) & "&sensor=false", False
        .send
        F_GEO = Replace(Replace(Split(Filter(Split(.responseText, vbLf), "formatted_address")(0), ": """)(1), """,", ""), ", ", vbLf)
    End With
End Function
 
Waarom moeilijk doen met json als het makkelijk met xml en xpath kan;)
Code:
Sub Main()
    MsgBox LatitudeLongitudeNaarPostCode(Array("51.887374", "5.808047"))
    MsgBox LatitudeLongitudeNaarPostCode(Array("51.365103", "5.574027"))
End Sub

Function LatitudeLongitudeNaarPostCode(vntLatLng As Variant) As String
    With CreateObject("MSXML2.DOMDOCUMENT")
        .ASync = False
        .Load "http://maps.googleapis.com/maps/api/geocode/[COLOR=#FF0000]xml[/COLOR]?latlng=" & vntLatLng(0) & "," & vntLatLng(1) & "&sensor=false"
        LatitudeLongitudeNaarPostCode = .SelectSingleNode("//formatted_address").Text
    End With
End Function
 
Laatst bewerkt:
Dan snap ik de zin van die Array niet ;)

Code:
Sub Main()
    MsgBox F_geo("51.887374,5.808047")
    MsgBox F_geo("51.365103,5.574027")
End Sub

Function F_geo(c00)
    With CreateObject("MSXML2.DOMDOCUMENT")
        .ASync = False
        .Load "http://maps.googleapis.com/maps/api/geocode/xml?latlng=" & c00 & "&sensor=false"
        F_geo = .SelectSingleNode("//formatted_address").Text
    End With
End Function
 
Postcode geocoding

Als ik deze macro draai krijg ik een popup scherm met adres en postcode.

Hoe krijg ik dit in onderstaande vorm in een excelwerkblad

Latitude Longitude Adres
51.887.374 5.808.047 Nieuwe dijk 6, 6677 PA Slijk-Eiwijk Nederland
51.365.103 5.574.027 Het Heike 31A, 5591 TH Heeze Nederland
enz
enz





mvgr
Jan
 
Met de code van snb, maar dan iets aangepast:
Code:
Sub Main()
    Range("A1") = "51.887374 5.808047"
    Range("B1").Resize(, 3) = Split(F_geo(Range("A1")), ",")
End Sub

Function F_geo(c00)
    With CreateObject("MSXML2.DOMDOCUMENT")
        .ASync = False
        .Load "http://maps.googleapis.com/maps/api/geocode/xml?latlng=" & c00 & "&sensor=false"
        F_geo = .SelectSingleNode("//formatted_address").Text
    End With
End Function

Eventueel kan je postcode en plaats ook nog scheiden.
 
Laatst bewerkt:
Sorry voor de laatste reactie.
Macro werkt prima.

Hoe krijg ik in de macro zodanig dat ik in kolom a diverse lat/lon gegevens invul en dat via een macro de kolommen B, C en D worden gevuld met Adres, postcode/woonplaats en Land

Kolom A Kolom B Kolom C Kolom D
Lat/lon Adres Postcode/woonplaats Land

51.887374 5.808047
51.887374 5.808047
51.896666 5.815246
51.901545 5.478355
51.887374 5.808048
51.896666 5.815247
51.901545 5.478356
51.887374 5.808049
 
In Module1
Code:
Function LatitudeLongitudeNaarPostCode(vntLatLng As Variant) As Variant
    With CreateObject("MSXML2.DOMDOCUMENT")
        .ASync = False
        .Load "http://maps.googleapis.com/maps/api/geocode/xml?latlng=" & Replace(vntLatLng(1), ",", ".") & "," & Replace(vntLatLng(2), ",", ".") & "&sensor=false"
        Application.Wait DateAdd("s", 1, Now)
        LatitudeLongitudeNaarPostCode = Split(.SelectSingleNode("//formatted_address").Text, ",")
    End With
End Function
In cel D2:F2
Code:
=LatitudeLongitudeNaarPostCode(B2:C2)
en bevestigen met CTRL+SHIFT+ENTER (matrixformule)
 

Bijlagen

  • helpmij leend009 geocode.xls
    35 KB · Weergaven: 70
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan