2013-04-12 11 views
5

Ich habe zwei Marker mit einer Polylinie verbindet die beiden. Ich habe Klickereignisse auf den Markierungen und der Polylinie, aber ich habe versucht, die Polylinie einfacher zu klicken, ohne einen neuen Marker zu setzen oder seinen Schlaganfall zu erhöhen. Also habe ich ein kreisförmiges Symbol erstellt und auf die Polylinie gelegt, aber ich kann es nicht klickbar machen. Ist es möglich?Google Maps: klickbare Polylinie Symbol

Dieser Thread gesehen, aber gibt keine Informationen darüber, wie das Symbol anklickbar ist. Ich habe die Quelltextquelle gesucht, aber eine KML-Ebene hinzugefügt. Ich wollte das nicht tun. Google Maps: Attaching events on polyline icons

Durchsucht die Google Maps-Overlay-API, fand aber keine Schnittstelle, um auf Klickereignisse zu hören. https://developers.google.com/maps/documentation/javascript/overlays#Polylines

Ich habe auch versucht, einen Event-Listener anzuhängen, hat aber nicht funktioniert. Ich vermute, dass es nicht möglich ist, ohne einen tatsächlichen Marker oder ein Objekt hinzuzufügen, aber wenn jemand anderes ein ähnliches Problem hätte, würde ich mich über alle Tipps freuen :)

Vielen Dank im Voraus!

Mein Code:

var pathSymbol = { 
    path: google.maps.SymbolPath.CIRCLE, 
    scale: 8, 
    strokeColor: '#228B22' 
}; 

var conPath = new google.maps.Polyline({ 
    path: conCoord, 
     strokeColor: "#228B22", 
     strokeOpacity: 0.7, 
     icons: [{ 
      icon: pathSymbol, 
      offset: '50%' 
     }], 
     strokeWeight: 2 
}); 

conPath.setMap(map); 


google.maps.event.addListener(conPath, 'click', (function(l,conCoord) { 
    return function() { 
      infowindowPath.setContent("<b>Ligação "+connections[l].id); 
     infowindowPath.setPosition(new google.maps.LatLngBounds(conCoord[1], conCoord[0]).getCenter()); 
      infowindowPath.open(map); 
     } 
})(l,conCoord)); 

Antwort

5

Ich habe einen Bedarf für diese Funktionalität auch, aber leider ist es nicht möglich - ich bin fast positiv (siehe meine demo). Der Grund, warum ich so sagen, weil:

  1. ich viele verschiedene Wege versucht haben, sondern nur die Polylinie erhält das Ereignis
  2. Es wird in den Google-Dokumentation nicht explizit dokumentiert
  3. von dem, was den folgenden Teilen der Dokumentation impliziert:

    Vom documentation on Symbols:

    A Symbol ist ein vektorbasiertes Bild, das entweder auf einem Marker oder einem Polyline Objekt angezeigt werden kann.

    Vom documenation on the AddEventListener:

    addListener(instance:Object, eventName:string, handler:Function)

    Fügt den gegebenen Listener-Funktion auf den angegebenen Ereignisnamen für die angegebene Objektinstanz. Gibt einen Bezeichner für diesen Listener zurück, der mit removeListener() verwendet werden kann.

Ereignisse können Instanzen (wie ein Marker oder Polylinie) an Objekt angebracht werden. Seit Symbole sind Vektor-basierte Bilder, die auf einer Polylinie gerendert werden, sind sie darin enthalten, und nicht offiziell Objektinstanzen.Offensichtlich sind sie dadurch nicht berechtigt, Ereignisse an sich selbst zu haben.

Nun, was ich noch in Zweifeln bin, ist, dass meine rationale oben impliziert, dass ein Symbol Teil der Polyline ist, was bedeutet, dass es auch die gleichen Ereignisse erhalten sollte, die an die Polylinie angehängt wurden. Doch meine Versuche, dies nicht der Fall ist (demo here: unabhängig von der Größe des Symbols auf einem Linienzug, es erhält keine Ereignisse):

var mySymbol = { 
    path: google.maps.SymbolPath.CIRCLE, 
    scale: 25, 
    strokeWeight: 5, 
    fillOpacity: .2 
}; 

var myPolyline = new google.maps.Polyline({ 
    icons: [{ 
     icon: mySymbol, 
     fixedRotation: true, 
     offset: '50%', 
    }], 
    path: [polylineCenter, polylineEnd], 
    strokeColor: 'black', 
    strokeOpacity: 1, 
    strokeWeight: 5, 
    map: myMap 
}); 

// works since <myPolyline> is an instance of an Object 
google.maps.event.addListener(myPolyline, 'click', function() { 
    alert('Polyline clicked!'); 
}); 

// doesn't work :-(since <mySymbol> is an Object literal 
google.maps.event.addListener(mySymbol, 'click', function() { 
    alert('Symbol clicked!'); 
}); 
+0

Ja, das ist die Schlussfolgerung, die ich auch erreichte ich es schließlich fiel gelassen . Danke für die Antwort. –

Verwandte Themen