2013-04-12 33 views
5

Tôi có hai điểm đánh dấu có đường polyline kết nối hai. Tôi đã nhấp vào các sự kiện trên các điểm đánh dấu và polyline, nhưng tôi đã cố gắng để làm cho polyline dễ dàng hơn để nhấp chuột mà không cần đặt một điểm đánh dấu mới hoặc tăng nó strokeWeight. Vì vậy, tôi đã tạo ra một biểu tượng hình tròn và đặt trên polyline, nhưng tôi không thể làm cho nó có thể nhấp được. Có thể không?Google Maps: biểu tượng polyline có thể nhấp

Đã xem chuỗi này nhưng không cung cấp bất kỳ chi tiết cụ thể nào về cách biểu tượng có thể nhấp được. Tôi đã tìm kiếm mã nguồn của nó nhưng anh ấy thêm một lớp KML. Tôi không muốn làm thế. Google Maps: Attaching events on polyline icons

Đã tìm kiếm API lớp phủ bản đồ google nhưng không tìm thấy giao diện nào để nghe các sự kiện nhấp chuột. https://developers.google.com/maps/documentation/javascript/overlays#Polylines

Tôi cũng đã cố gắng đính kèm trình xử lý sự kiện nhưng không hoạt động. Tôi nghi ngờ nó không thể được thực hiện mà không cần thêm một đánh dấu thực tế hoặc một đối tượng nhưng nếu ai đó có một vấn đề tương tự tôi sẽ đánh giá cao bất kỳ lời khuyên :)

Cảm ơn trước!

Mã của tôi:

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)); 

Trả lời

5

Tôi có một nhu cầu cho chức năng này là tốt, nhưng tiếc là nó không phải là có thể - Tôi gần như tích cực (xem tôi demo). Lý do tôi nói như vậy là vì:

  1. Tôi đã thử rất nhiều cách khác nhau, nhưng chỉ có Polyline nhận sự kiện
  2. Nó không phải là tài liệu một cách rõ ràng trong tài liệu của Google
  3. về những gì các phần sau các tài liệu ngụ ý:

    Từ documentation on Symbols:

    Một Symbol là hình ảnh dựa trên vector có thể được hiển thị trên một đối tượng Marker hoặc Polyline.

    Từ documenation on the AddEventListener:

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

    Thêm chức năng nghe cho tên sự kiện đưa ra cho các trường hợp đối tượng nhất định. Trả về một định danh cho người nghe này có thể được sử dụng với removeListener().

Sự kiện có thể được gắn vào Object trường (chẳng hạn như một Marker hoặc Polyline). Kể từ Ký hiệu là hình ảnh dựa trên vectơ được hiển thị trên một Polyline, chúng được chứa bên trong nó và không phải là các đối tượng chính thức của Đối tượng.Rõ ràng, điều này làm cho họ không đủ điều kiện để có các sự kiện gắn liền với chính họ.

Bây giờ, những gì tôi vẫn còn nghi ngờ là sự hợp lý của tôi ở trên ngụ ý rằng Biểu tượng là một phần của Polyline có nghĩa là nó cũng sẽ nhận được các sự kiện tương tự được gắn với Polyline. Tuy nhiên, trong các thử nghiệm của tôi, đây không phải là trường hợp (demo here: bất kể kích thước của Symbol trên một Polyline, nó không nhận được bất kỳ sự kiện):

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

Vâng đó là kết luận tôi đạt quá, tôi cuối cùng đã đánh rơi nó . Cảm ơn bạn đã trả lời. –

Các vấn đề liên quan