WHELP! geeft advies over ontwerp, bouw en zoekmachine optimalisatie van je website. Ben je hier voor de eerste keer? Start dan bij het 4-stappenplan voor een eigen website.

Google Maps – hyperlinks naar markers naast je kaart (13)

Als je een Google Map hebt gemaakt met markers, is het misschien handig om naast je kaart een lijst te laten zien van de adressen op je kaart. Hoe je dit doet leg ik in dit artikel uit.

1. De body van je kaart aanpassen
Stap 1 is de body van je kaart zo aan te passen dat je in de volgende stap de markers kwijt kunt.

<body onload="load()" onunload="GUnload()">
  <div>
        <div id="map" style="width: 500px; height: 300px; float:left"></div>
        <div id="side_bar" style="width: 500px; height: 20px; float:left; margin-left: 1em;"></div>
  <div>
</body>

De side_bar is nieuw. Hierbinnen gaan we in de volgende stap de lijst van markers toevoegen.

2. Een lijst van markers naast je kaart
In het vorige artikel heb ik uitgelegd hoe je vanuit een XML bestand je markers op een Google Map zet. Hetzelfde bestand kan je gebruiken om naast je kaart een overzichtslijst te tonen. Het resultaat zie er dan als volgt uit (detail):

Google Maps - lijst van markers naast je kaart

Eerst verklaren we een aantal variabelen aan het begin van ons bestaande document (maps.js):

//load Google Map
var address;
var geocoder;
var gmarkers = [];
var html;
var htmls =[];
var i = 0;
var icon;
var label;
var map;
var marker;
var markers;
var randomnumber;
var side_bar_html = "";
var xml;

Dit stelt ons in staat om deze door onze functies heen beter te voorzien van gegevens. Vervolgens breiden we de functie die de markers maakt (createMarker) uit met informatie voor het nieuwe element in de pagina – de side_bar.

//Create marker and set up event window
function createMarker(point,html,label,icon){
  var marker = new GMarker(point,icon);
  GEvent.addListener(marker, "click", function() {
     marker.openInfoWindowHtml(html);
  });
  // save the info we need to use later for the side_bar
  gmarkers[i] = marker;
  htmls[i] = html;
  // add a line to the side_bar html
  side_bar_html += '<a href="javascript:myclick(' + i + ')">' + label + '</a><br>';
  document.getElementById("side_bar").innerHTML = side_bar_html;
  i++;
  return marker;
}

Doordat deze functie bij elke marker wordt aangeroepen, vullen we zo de gmarkers array en de htmls array. Die gebruiken we daarna om de side_bar_html te vullen met linkjes. De functie is zo geschreven dat de HTML bij iedere marker uitgebreid wordt. Vervolgens voegen we de side_bar_html weer toe binnen het nieuwe side_bar gedeelte.

3. Een klik koppelen aan de kaart
Tot slot moeten we nu nog een klik op een linkje uit de lijst koppelen aan een element in de kaart; in het voorbeeld hierboven wordt hiervoor myclick() al aangeroepen. Voeg nu de functie myclick() toe aan maps.js.

// This function picks up the click and opens the corresponding info window
function myclick(i) {
        GEvent.trigger(gmarkers[i], "click");
}

De trigger functie werkt als een signaal naar de kaart dat de bijbehorende informatie getoond wordt.

Tot slot
Aangezien er nog een paar andere wijzigingen zijn doorgevoerd in maps.js adviseer ik je deze nieuwe versie in zijn geheel over te nemen.
Dit geldt ook voor het nieuwe xml document.
De wijzigingen hierop zal ik in het volgende artikel nader toelichten.

Het eindresultaat
Als je alles goed hebt overgenomen, bekijk dan je eindresultaat.

Bronvermelding
De basiscode voor dit artikel heb ik gevonden in diverse fora over Google maps.

Stem / Bookmark [?]Plaatsen/stemmen op NUjijPlaatsen/stemmen op eKudosPlaatsen/stemmen op MSN ReporterPlaatsen/stemmen op DiggVoeg dit artikel toe aan Del.icio.usVoeg toe aan je favorieten op TechnoratiVoeg toe aan je Google bladwijzers

  1. PageMaker
    15.09.08 - 15:08
    1

    Nou, die populariteit en de bekendheid moeten maar eens veel hoger.
    Deze site is voor een beginner (zoals ik) werkelijk een goudmijn!
    Aanrader!


  2. Theo Bakker
    15.09.08 - 16:26
    2

    Dag PageMaker,

    dank voor je compliment. Overigens, aan bezoekers geen gebrek, maar het mogen er altijd meer worden ;-)

    Groet, Theo


  3. Martijn
    23.09.08 - 21:58
    3

    geweldige serie inderdaad! Dit is precies wat ik nodig had icm mijn jquery eperimenten. (en ik had al 2 dagen lopen zoeken!)

    Thanks!


  4. Aartjan
    08.02.09 - 14:28
    4

    Een hele domme beginnersvraag waarschijnlijk, maar in het document maps.js wordt gelinkt naar javascript. Ik vrees dat ik dat niet op mijn site heb staan. Hoe los ik dat op. Er verschijnt nu nl. geen kaart meer op mijn schrerm.

    <a href="myclick(’ + i + ‘)" rel="nofollow">’ + label + ‘</a>

    Aartjan


  5. Theo Bakker
    09.02.09 - 8:10
    5

    Dag Aartjan,

    bedoel je het bestand waarnaar het verwijst?

    Groet, Theo


  6. Aartjan
    12.02.09 - 15:25
    6

    Inderdaad, echter in mijn reactie is de naam van het bestand weggevallen. Staat in de volgende regel van het script:

    side_bar_html += '' + label + '';

    Aartjan


  7. Michael
    14.09.09 - 15:06
    7

    Beste Theo,

    Om de een of andere reden heb ik als ik de bovenstaand tut afmaak alleen een grijs scherm met zoom functie en Google logo.

    De verwijzingen naar data.xml en maps.js heb ik aangepast en kloppen.

    Ik draai op een localhost met een Wamp.

    De eerste tut doen het gewoon wel. dus de google KEY is goed.

    Wat doe ik toch niet goed?

    Alvast bedankt.
    Michael


  8. Aad
    26.11.09 - 13:38
    8

    Hoi, dank voor de fraaie artikelen! Ik heb er veel aan gehad en de kaart en de tekstballon lukken prima nu maar nu zou ik graag meerdere regels in de tekstballon willen zetten. Ik heb wat af gegoogled maar kom er niet ……
    :(
    Aad


  9. Jules
    30.03.10 - 23:26
    9

    Goede tutorial inderdaad, maar je gaat alleen lopen met de eer van een andere. Dit is namelijk een precieze kopie van de tutorial op http://econym.org.uk/gmap/
    Alleen is het vertaald naar het Nederlands. Alle variables en function namen zijn exact hetzelfde. Dus je mag op zijn minst zijn naam vermelden als originele author.

Jouw reactie

Spelregels voor commentaar

XHTML: Je kunt de volgende HTML code gebruiken: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Domeinnaam vrij?

  • Test via Byte op .nl, .eu, .be, .com, .net, .org, .biz, .info, .de, .co.uk, .tv, .nu, .cn en .name