2012-12-04 51 views
7

này được dành cho Google Maps API v3:Lớp Google Maps tùy chỉnh qua API?

Khi bạn vẽ khác nhau Polylines, Polygons, MapLabels hoặc bất kỳ các yếu tố Overlay khác trong một tùy chỉnh Google Map, nó lôi kéo họ vào mapPane. Có thể bằng cách nào đó tạo ra nhiều lớp tùy chỉnh mà bạn có thể vẽ đối tượng Lớp phủ trên và sau đó dễ dàng bật/tắt (hiển thị/ẩn) các lớp đó không?

tôi xem tài liệu về lớp đây: https://developers.google.com/maps/documentation/javascript/layers

Nhưng không có gì về lớp tùy chỉnh.

Trả lời

6

Bạn có thể tạo tùy chỉnh OverlayView để làm điều đó:

var LayerOverlay = function() { 
    this.overlays = []; 
} 
LayerOverlay.prototype = new google.maps.OverlayView(); 
LayerOverlay.prototype.addOverlay = function (overlay) { 
    this.overlays.push(overlay); 
}; 
LayerOverlay.prototype.updateOverlays = function() { 
    for (var i = 0; i < this.overlays.length; i++) { 
    this.overlays[i].setMap(this.getMap()); 
    } 
}; 
LayerOverlay.prototype.draw = function() {}; 
LayerOverlay.prototype.onAdd = LayerOverlay.prototype.updateOverlays; 
LayerOverlay.prototype.onRemove = LayerOverlay.prototype.updateOverlays; 

Sau đó, một lần thêm lớp phủ của bạn để LayerOverlay, bạn có thể hiển thị hoặc ẩn chúng chỉ với một setMap:

var layer1 = new LayerOverlay(); 
layer1.addOverlay(createMarker()); 
layer1.addOverlay(createMarker()); 
layer1.addOverlay(createMarker()); 

// hide all markers 
layer1.setMap(null); 

// show all markers 
layer1.setMap(map); 
+0

Rất thú vị .. Đây có phải là cách Google Maps chuyển đổi giữa những thứ như đường phố/địa hình/vệ tinh bật/tắt không? –

+0

Mã nội bộ của Google Maps bị làm xáo trộn, thật khó để nói. –

+0

Cảm ơn. Có tài liệu nào khác về 'OverlayView' ngoài tham chiếu API không? Bất cứ điều gì với các ví dụ khác? Tôi tò mò nếu có những cách khác tôi có thể sử dụng nó mà tôi không nghĩ đến. –

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