Voorstellen locaties in google-maps

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
Ik heb de vraag gekregen of ik een aantal locaties (=adressen) kan voorstellen in google-maps zodat de gebruiker zich een idee kan vormen waar de adressen zich bevinden en welke route het best gevolgd kan worden om de adressen te bezoeken.

Het gaat om een bedrijf dat alarminstallaties installeert en jaarlijks onderhoud hierop pleegt. Er worden op een dag een 10-tal onderhoudsbeurten ingepland. In eerste instantie wordt geselecteerd op gemeente, maar als je niet uitkijkt is het mogelijk dat de technieker kriskras door de gemeente wordt gestuurd. Vandaar de vraag of het mogelijk is om een opgegeven aantal adressen voor te stellen in google-maps.

Is dit mogelijk vanuit acces?
 
Hallo Alphamax,

Mocht dit uitgewerkt zijn in Access, zou dit perfect geweest zijn...
 
Heb je al coordinaten in de tabel? of moeten die ook nog ge-geocodeerd worden vanuit naam, adres, woonplaats gegevens.
 
Ik heb voorlopig een tabel met klantnaam, klantadres (en andere info). Het zou makkelijk zijn dat als deze ook nog ge-geocodeerd worden in access(Ik weet niet of dat kan).
Kunnen er ook nummertjes bij de pijltjes in googlemaps komen?
 
Mocht dit uitgewerkt zijn in Access, zou dit perfect geweest zijn...
Dan krijg je zoiets:

Code:
Private Sub lblGoogleMaps_Click()
Dim iE As InternetExplorer
Dim lngFreefile As Variant
Dim strLoc As String, strFile As String, strLine As String
Dim rs As DAO.Recordset
Dim i As Integer, lngBegin As Integer, lngEnd As Integer

    lngFreefile = FreeFile
    'lees javascript html bestand in html string
    Open CurrentProject.Path & "\" & Me.lblGoogleMaps.Tag For Input As lngFreefile
    Do Until EOF(1)
        Line Input #1, strLine
        strFile = strFile & strLine & vbCrLf
    Loop
    Close #1

    'maak javascript array string van excel range
    strLoc = "var locations = ["
    Set rs = CurrentDb.OpenRecordset("GoogleMaps")
    With rs
        Do While Not .EOF
            strLoc = strLoc & "['"
            For i = 1 To .Fields.Count - 1
                strLoc = strLoc & .Fields(i).Value
                If i < .Fields.Count - 1 Then strLoc = strLoc & "','" Else: strLoc = strLoc & "'],"
            Next i
            .MoveNext
        Loop
    End With
    strLoc = Left(strLoc, Len(strLoc) - 1) & "];"

    'vervang javascript array string in html string
    lngBegin = InStr(1, strFile, "var locations = [[")
    lngEnd = InStr(lngBegin, strFile, "]];")
    strFile = Left(strFile, lngBegin - 1) & strLoc & Mid(strFile, lngEnd + 2)

    'schrijf html string in javascript html bestand
''    Open Range("H2").Value For Output As #2
    Open CurrentProject.Path & "\" & Me.lblGoogleMaps.Tag For Output As #2
    Debug.Print strFile
    Print #2, strFile
    Close #2

    'open internet explorer met zo groot mogelijke kaart
    Set iE = New InternetExplorer
    ''With CreateObject("InternetExplorer.Application")
    With iE
        .Visible = False
        .AddressBar = 0
        .StatusBar = 0
        .Toolbar = 0
        .MenuBar = 0
        .Navigate "file:///" & CurrentProject.Path & "\" & Me.lblGoogleMaps.Tag
        Do While .Busy
            Wacht 1
            ''Application.Wait DateAdd("s", 1, Now)
        Loop
        .Visible = True
    End With
End Sub

Code:
Sub Wacht(tSecs As Single)
'   Timer to create a pause
Dim sngSec As Single
     
    sngSec = Timer + tSecs
    Do While Timer < sngSec
        DoEvents
    Loop
End Sub

Nog ter info: ik heb de tabel uit het Excel bestand naar Access gekopieerd, en de tabel [GoogleMaps] genoemd. De code draait verder op deze tabel. Uiteraard zul je hem nog moeten aanpassen aan je eigen omstandigheden.
 
Klik op "Geocode Tabel "GoogleMaps"".
Bij status zie je dan "OK: x van y", wanneer deze beide niet gelijk zijn dan zijn er x-y locaties niet te vinden door google maps.
Pas het pad aan naar "google maps multiple svg marker infowindow.html"
Klik op "Toon Tabel "GoogleMaps" op Google Maps", alle locaties met "ROOFTOP"-precisie worden getoond door middel van een svg marker met een label met meerdere tekens.

@octafish
Zou je eens willen kijken, als er nog iets te verbeteren of aan te passen is, zodat mijn leercurve nog iets stijler wordt :rolleyes:
 

Bijlagen

  • helpmij linkav locations in google maps with svg multiple character marker.zip
    90,8 KB · Weergaven: 54
Laatst bewerkt:
Was een lang weekend :).
Belangrijkste conclusie: waarom zo ingewikkeld om a) het record op te halen en b) om het pad vast te leggen?
a) Je kunt het formulier natuurlijk gewoon koppelen aan de tabel Formulier] en het tekstveld aan het veld [FilePath]. Hoef je verder niks te klooien met recordsets.
b) Zet alleen de verwijzing naar het HTML bestand in dat veld, en gebruik CurrentProject.Path & "" & Me.FilePath en het werkt altijd, hoef je niks meer aan te passen.

De geocode zelf is prima en werkt, dus daar valt weinig aan te sleutelen denk ik. Het doet wat het moet doen :).
 
Toch een beetje sleutelen, want ik merkte dat het toevoegen van een nieuw adres geen code opleverde. En dat komt door deze regel:
Code:
            strAddress = Left(strAddress, Len(strAddress) - 2)
Is ook een hele rare, want hij haalt 2 letters van het land af! 'Nederla' i.p.v. 'Nederland'. Ja, zeg ik dan, haal er dan gelijk 12 af, dan weet je zeker dat het niet werkt :). Regel dus weggehaald, en toen deed-ie het prima.
 
Hallo Octafish,

Het was toen ook een verlengd weekend hé!! :D

Ik had de vraag al even opzij geschoven... ik zal het even van onder het stof halen en terug opnemen.

Bedankt in ieder geval voor je reactie...
 
Code:
strAddress = Left(strAddress, Len(strAddress) - 2)
kan inderdaad verwijderd worden.
Deze regel is blijven staan toen de code nog een andere opzet had.
 
Beste,

Ik heb in het voorbeeld van AlpaMax de code
Code:
strAddress = Left(strAddress, Len(strAddress) - 2)
weggehaald.
Verder heb ik ook de records uit de tabel GoogleMaps verwijderd en nieuwe (belgische) adressen toegevoegd en het voorbeeld werkt niet meer. Wat kan er fout gaan? In bijlage het voorbeeld.

Kan iemand zien wat ik fout doe?
 

Bijlagen

  • Helpmij linkav 20170107.zip
    96,4 KB · Weergaven: 24
Vervang "België" door "Belgie"

alle locaties met "ROOFTOP"-precisie worden getoond door middel van een svg marker met een label met meerdere tekens.
Zie kolom location_type, niet alle adressen hebben "ROOFTOP"-precisie, verhoog de precisie door het toevoegen van het juiste huisnummer.

Een andere mogelijkheid is om de code aan te passen, zodat ook minder nauwkeurige adressen worden getoond.
Vervang
Code:
If avntrecord(6, 0) = "OK" And avntrecord(9, 0) = "ROOFTOP" Then
door
Code:
If avntrecord(6, 0) = "OK" And avntrecord(9, 0) = "ROOFTOP" Or avntrecord(9, 0) = "RANGE_INTERPOLATED" Then
 
Laatst bewerkt:
Hallo AlphaMax,

Bedankt voor uw reactie.

Wat houdt "ROOFTOP"-precisie in? En "RANGE_INTERPOLATED"?

Ik ga het dadelijk uittesten.

Ik heb nog een vraagje: kan ik tussen de verschillende punten ook de route zichtbaar krijgen (met eventueel reisafstand en reistijd)?
 
location_type stores additional data about the specified location. The following values are currently supported:

"ROOFTOP" indicates that the returned result is a precise geocode for which we have location information accurate down to street address precision.
"RANGE_INTERPOLATED" indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.
"GEOMETRIC_CENTER" indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region).
"APPROXIMATE" indicates that the returned result is approximate.
bron: https://developers.google.com/maps/documentation/geocoding/intro

Routes zichtbaar maken is mogelijk maar zeer veel werk, dat gaat me in dit stadium te ver (iedereen beantwoordt hier vragen vrijwillig).
Mijn ervaring leert, dat de vraag die daar direct op volgt is "wat is de korste route tussen al deze punten".
Dat is dan weer het klassieke "handelsreiziger"-probleem.
Dit alles kan je beter overlaten aan de proffessionals.
 
Beste AlphaMax,

Ik heb volgende aanpassingen gedaan:
1)"België" vervangen door "Belgie"
2) In de tabel "ROOFTOP" vervangen door "RANGE_INTERPOLATED"
3) De regel code aangepast

Resultaat: geen kaart...

Zou je even kunnen kijken wat het probleem zou kunnen zijn?
 

Bijlagen

  • helpmij linkav 20170107_V2.zip
    39,7 KB · Weergaven: 23
Nieuwe code

Code encode URL naar UTF-8-formaat, je mag dus overal trema's gebruiken zoals in"België".

1. pad aanpassen
2. geocoden
3. tonen
 

Bijlagen

  • helpmij linkav.zip
    96,9 KB · Weergaven: 38
Beste AlpaMax,

Bedankt! Dit werkt perfect!

Ik heb gezien dat in de kolom status "ZERO_RESULTS" staat en ook "OVER_QUERY_LIMIT". Ik heb al even gegoogeld en weet wat ze betekenen. Hoe komen deze statussen in de tabel?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan