---
title: "Google maps (api3): Returnera kordinater onClick på marker"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/183424-google-maps-api3-returnera-kordinater-onclick-på-marker"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Mattias Nordin"
published: "2010-05-07T11:24:46.000Z"
updated: "2010-05-07T12:53:59.000Z"
replies: 5
views: 1024
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/183424-google-maps-api3-returnera-kordinater-onclick-på-marker"
---

# Google maps (api3): Returnera kordinater onClick på marker

## #1 — Mattias Nordin, 2010-05-07T11:24Z

Jag försöker förstå hur googlemaps fungerar och det går sådär  :P

Har en funktion som lägger till en mängd markers på en google karta. Har lagt till event.addListner som exekveras när jag klickar på en marker. 

**Är det någon som förstår hur man kan få ut LatLan för den marker man klickar på?**

```
// ----------------
// ADD MARKER FUNCTION
// ----------------
    var markersArray = []; 
    var markersArrayDistributor = []; 
    function funAddMarkers(){

       //alert("gVarLocationString  = " +gVarLocationString )
       
       arrLocation = gVarLocationString .split(" : ")
       
       for(var i = 0; i < arrLocation.length; i++){ 

           arrXY = arrLocation[i].split(",")

            x = arrXY[0]
            y = arrXY[1]
            varType = arrXY[2]
           // alert("." +varType +".")
           
           if(varType == "Wholesaler"){
          
               varImage = "http://mattiasnordin.net/flir/pin_wholesaler.png"
          
           } else if(varType == "Distributor"){
          
               varImage = "http://mattiasnordin.net/flir/pin_distributor.png"
          
          } else if(varType == "Agent"){
          
               varImage = "http://mattiasnordin.net/flir/pin_agent.png"
          
          } else if(varType == "FLIR office"){
          
               varImage = "http://mattiasnordin.net/flir/pin_flir.png"

           } else {
          
               varImage = "http://mattiasnordin.net/flir/pin_other.png"
          
           }
            
           // DRAW MARKERS...
           var myLatLng = new google.maps.LatLng(x,y);
           var marker = new google.maps.Marker({
                 position: myLatLng,
                 map: map,
                 icon: varImage,
                 title: varType,
                 type: varType
           });

       

           // ADD MARKER TO ARRAY...
           markersArray.push(marker); 

    [FONT="Century Gothic"]      // ON CLICK LISTNER...
          google.maps.event.addListener(marker, 'click', function() { 
          alert("Blää")
          funShowOverLay(); 
          });   [/FONT]       
       

       }
   
  
 }
```

<http://code.google.com/apis/maps/documentation/v3/>

Permalänk: https://www.webforum.nu/p/183424

## #2 — SPiN, 2010-05-07T11:42Z

```
google.maps.event.addListener(marker, 'click', function(e) {
    alert(e.latLng);
});
```

Permalänk: https://www.webforum.nu/p/2234568

## #3 — Mattias Nordin, 2010-05-07T11:47Z

Hej Spin,

Jag förstår inte hur det där fungerar. Om man klickar på en marker. Exekveras då funktionen "function" med "e" som input?

Mitt kartobjekt ser ut som nedan...

```
var map, geocoder; 
function initialize() { 

    geocoder = new google.maps.Geocoder(); 
    // set the default map orientation...
    var latlng = new google.maps.LatLng(28.033886, 1.659626); 

    var myOptions = { 
      zoom: 2, 
      center: latlng, 
      mapTypeControl: false,
      navigationControlOptions: {style: google.maps.NavigationControlStyle.ANDROID},
      mapTypeId: google.maps.MapTypeId.TERRAIN
    } 

    // DRAW MAP...
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    // CALL ADD MARKERS FUNCTION...
    funAddMarkers()

    // CHANGE MAP TYPE...
    // map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
    
}
```

Permalänk: https://www.webforum.nu/p/2234569

## #4 — SPiN, 2010-05-07T12:01Z

> **[Mattias Nordin skrev:](https://www.webforum.nu/p/1504555)**
>
> Jag förstår inte hur det där fungerar. Om man klickar på en marker. Exekveras då funktionen "function" med "e" som input?

Ja, i stort sett. Det kallas för "closures", när man skickar funktioner som parametrar till andra funktioner/metoder i klasser. I det här fallet består vårat closure av en *anonym funktion* \- men man hade lika gärna kunnat använda en namngiven funktion:

```
function handleMarkerClick(e) {
   alert("A clicked marker on latlng: " + e.latLng);
}

google.maps.event.addListener(marker, 'click', handleMarkerClick);
```

Parametern "e" tas emot som själva händelsen (event på eng.), och kan innehålla all möjlig information beroende på implementationen av addListener(). Hos Google valde man dock att sålla bort DOM-beroendet hos lyssnaren och skapade en egen implementation som enbart sätter ett objekt med egenskapen för positionen där händelsen inträffade. Således: "e.latLng" ger tillbaka ett objekt av typen google.maps.LatLng.

Eller menade du att det inte fungerade? Som sagt har jag inte jobbat i v3 på länge (eller ens speciellt mycket), så jag har inte full koll. Dock borde det fungera ;)

Permalänk: https://www.webforum.nu/p/2234571

## #5 — Mattias Nordin, 2010-05-07T12:16Z

Det var en utmärkt förklaring. Förstår lite bättre nu.

Men e.latLng = undefined för mig

Jag har min listner inuti en loop varav det skapas en listner per marker. Är det verkligen så man ska göra?

```

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript"> 
 
var map, geocoder; 
function initialize() { 

    geocoder = new google.maps.Geocoder(); 
    // set the default map orientation...
    var latlng = new google.maps.LatLng(28.033886, 1.659626); 

    var myOptions = { 
      zoom: 2, 
      center: latlng, 
      mapTypeControl: false,
      navigationControlOptions: {style: google.maps.NavigationControlStyle.ANDROID},
      mapTypeId: google.maps.MapTypeId.TERRAIN
    } 

    // DRAW MAP...
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    // CALL ADD MARKERS FUNCTION...
    funAddMarkers()

    // CHANGE MAP TYPE...
    // map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
    
} 

// ----------------
// ADD MARKER FUNCTION
// ----------------
    var markersArray = []; 
    var markersArrayDistributor = []; 
    function funAddMarkers(){

       //alert("gVarLocationString  = " +gVarLocationString )
       
       arrLocation = gVarLocationString .split(" : ")
       
       for(var i = 0; i < arrLocation.length; i++){ 

           arrXY = arrLocation[i].split(",")

            x = arrXY[0]
            y = arrXY[1]
            varType = arrXY[2]
           // alert("." +varType +".")
           
           if(varType == "Wholesaler"){
          
               varImage = "http://mattiasnordin.net/flir/pin_wholesaler.png"
          
           } else if(varType == "Distributor"){
          
               varImage = "http://mattiasnordin.net/flir/pin_distributor.png"
          
          } else if(varType == "Agent"){
          
               varImage = "http://mattiasnordin.net/flir/pin_agent.png"
          
          } else if(varType == "FLIR office"){
          
               varImage = "http://mattiasnordin.net/flir/pin_flir.png"

           } else {
          
               varImage = "http://mattiasnordin.net/flir/pin_other.png"
          
           }
            
           // DRAW MARKERS...
           var myLatLng = new google.maps.LatLng(x,y);
           var marker = new google.maps.Marker({
                 position: myLatLng,
                 map: map,
                 icon: varImage,
                 title: varType,
                 type: varType
           });

           // ADD MARKER TO ARRAY...
           markersArray.push(marker); 

          // ON CLICK LISTNER...
          google.maps.event.addListener(marker, 'click', testTest);            
       

       }
  
 }

function testTest(e){
    alert("Running function...")
    alert("e.latLng = " +e.latLng)
    funShowOverLay(); 
}
```

Permalänk: https://www.webforum.nu/p/2234572

## #6 — SPiN, 2010-05-07T12:53Z

Problemet är nog att ett klick på en markör inte genererar någon händelse till closure-funktionen. Kanske går att lösa genom en självreferens, som förhoppningsvis pekar till din Marker. En ren chansning dock :)

```
var handleMarkerClick = function() {
    var lat = this.getPosition().lat;
    var lng = this.getPosition().lng;
};

google.maps.event.addListener(marker, 'click', handleMarkerClick);
```

Permalänk: https://www.webforum.nu/p/2234573

---

Tråden på webben: https://www.webforum.nu/amne/javascript/183424-google-maps-api3-returnera-kordinater-onclick-på-marker
