Tôi có một tập hợp các điểm đánh dấu được nhóm lại trên bản đồ của tôi. Một bộ điểm đánh dấu khác được hiển thị riêng lẻ và tôi cần phải hiển thị các điểm đánh dấu này trên các cụm. Tôi đã thử đặt zIndex trong đối tượng tùy chọn cụm, thấp hơn giá trị của bộ đánh dấu thứ 2, nhưng không có kết quả. Bất kỳ ý tưởng nào về việc này?Google Maps: Hiển thị điểm đánh dấu phía trên markerclusterer
Trả lời
Theo tôi biết điều này không thể thực hiện được. Các cụm nằm trong khung cao hơn so với hình ảnh đánh dấu.
https://developers.google.com/maps/documentation/javascript/reference#MapPanes
Bạn hoàn toàn đúng. –
Nó có thể được thực hiện, nhưng đó là một cách khá gập ghềnh cho đến khi bạn đạt được điều đó ... Như Rick nói, vấn đề là các MarkerClusterer thêm một OverlayView riêng với các biểu tượng cụm của nó trên một cửa sổ cao như các điểm đánh dấu thông thường. Cách duy nhất để thêm một điểm đánh dấu trên các cụm là để đánh bại các clusterer với vũ khí của riêng mình và thêm một OverlayView của riêng và thêm đánh dấu biểu tượng đánh dấu vào một khung cao hơn (đọc về panes here). Tôi không thực sự thích nó - nhưng đó là cách duy nhất tôi tìm thấy.
Để thực hiện điều này, bạn phải tạo một lớp phủ tùy chỉnh thực hiện google.maps.OverlayView (reference), một ví dụ điển hình có thể được tìm thấy here (với lời giải thích, tôi đã sử dụng một chút mã từ nó).
Đây là một nguyên mẫu CustomOverlay thô:
// build custom overlay class which implements google.maps.OverlayView
function CustomOverlay(map, latlon, icon, title) {
this.latlon_ = latlon;
this.icon_ = icon;
this.title_ = title;
this.markerLayer = jQuery('<div />').addClass('overlay');
this.setMap(map);
};
CustomOverlay.prototype = new google.maps.OverlayView;
CustomOverlay.prototype.onAdd = function() {
var $pane = jQuery(this.getPanes().floatPane); // Pane 6, one higher than the marker clusterer
$pane.append(this.markerLayer);
};
CustomOverlay.prototype.onRemove = function(){
this.markerLayer.remove();
};
CustomOverlay.prototype.draw = function() {
var projection = this.getProjection();
var fragment = document.createDocumentFragment();
this.markerLayer.empty(); // Empty any previous rendered markers
var location = projection.fromLatLngToDivPixel(this.latlon_);
var $point = jQuery('<div class="map-point" title="'+this.title_+'" style="'
+'width:32px; height:32px; '
+'left:'+location.x+'px; top:'+location.y+'px; '
+'position:absolute; cursor:pointer; '
+'">'
+'<img src="'+this.icon_+'" style="position: absolute; top: -16px; left: -16px" />'
+'</div>');
fragment.appendChild($point.get(0));
this.markerLayer.append(fragment);
};
lớp phủ này được bản đồ, một đối tượng LatLng và URL của một biểu tượng. Điều tốt là bạn có thể viết HTML của riêng bạn cho lớp, điều xấu là bạn phải xử lý tất cả những thứ mà API Maps làm cho bạn (như xử lý neo hình ảnh đánh dấu) của chính bạn. Ví dụ này chỉ hoạt động tốt với hình ảnh 32x32px, nơi neo nằm ở giữa hình ảnh, vì vậy nó vẫn khá thô.
Để sử dụng CustomOverlay, chỉ cần khởi tạo nó như thế này:
// your map center/marker LatLng
var myLatlng = new google.maps.LatLng(24.247471, 89.920990);
// instantiate map
var map = new google.maps.Map(
document.getElementById("map-canvas"),
{zoom: 4, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP}
);
// create the clusterer, but of course with markers
//var markerClusterer = new MarkerClusterer(map, []);
// add custom overlay to map
var customCustomOverlay = new CustomOverlay(map, myLatlng, 'http://www.foo.bar/icon.png');
Tôi hy vọng làm việc này cho bạn.
Tôi gặp vấn đề tương tự nhưng không muốn xử lý lớp phủ mới.
Không cần phải tạo Lớp phủ cụ thể, bạn chỉ có thể chuyển đổi chỉ mục z của vùng chứa phụ huynh.
này có thể đạt được bằng cách sử dụng các chức năng sau:
_changeOverlayOrder = function(map) {
var panes = map.getPanes();
var markerOverlayDiv = panes.overlayImage.parentNode;
var clusterOverlayDiv = panes.overlayMouseTarget.parentNode;
// Make the clusters clickable.
if(!markerOverlayDiv.style.pointerEvents) {
markerOverlayDiv.style.cssText += ";pointer-events: none;";
}
// Switch z-indexes
if(markerOverlayDiv.style.zIndex < clusterOverlayDiv.style.zIndex) {
var tmp = markerOverlayDiv.style.zIndex;
markerOverlayDiv.style.zIndex = clusterOverlayDiv.style.zIndex;
clusterOverlayDiv.style.zIndex = tmp;
}
};
Hy vọng nó giúp.
"Điều này" trong this.getPanes() là gì? Câu trả lời của – marcovtwout
@ mouwah gần như chính xác, nhưng không có phương thức 'getPanes()' cho đối tượng bản đồ. Bạn phải định nghĩa lớp 'OverlayView()' tùy chỉnh của mình để sử dụng phương thức 'getPanes()' và thay đổi 'zIndex' của ngăn' overlayMouseTarget'. –
Mã này * đã * hoạt động hoàn hảo cho đến bây giờ, nhưng ** bây giờ google đã thay đổi một cái gì đó và nó đột nhiên ngừng hoạt động! ** – TMS
- 1. Google Maps v3 - Điểm đánh dấu không hiển thị
- 2. Điểm đánh dấu hoạt ảnh trên Google Maps v2
- 3. Hiển thị cửa sổ bật lên phía trên điểm đánh dấu bản đồ trong MapView
- 4. Có thể hiển thị/ẩn Điểm đánh dấu trong Android Google maps api v2 không?
- 5. Google maps api v2 phóng to gần điểm đánh dấu
- 6. Xác định xem một điểm đánh dấu có hiển thị trong Google Maps
- 7. URL cho nhiều điểm đánh dấu trong Google Maps
- 8. Bóng không hiển thị điểm đánh dấu bản đồ google
- 9. Thêm nhiều điểm đánh dấu với infowindows (API Google Maps)
- 10. Cách di chuyển điểm đánh dấu trong API Google Maps
- 11. Google Maps API Nhiều Điểm đánh dấu với Infowindows
- 12. Đặt điểm đánh dấu trên tất cả các điểm đánh dấu khác trong Google Maps SDK iOS
- 13. Điểm đánh dấu Bouncy trong Google Maps v3
- 14. Google Maps - Nhiều điểm đánh dấu từ extern json
- 15. Sử dụng SVG cho điểm đánh dấu trong Google Maps?
- 16. Google Maps - Hàng nghìn điểm đánh dấu - JSON
- 17. Đánh dấu Clustering - Fusion Table Layer - Google Maps v3
- 18. Google android maps api v2 Hiển thị Tiêu đề Đánh dấu Luôn
- 19. Hiển thị văn bản trên Google Maps
- 20. Google Maps không hiển thị
- 21. Nhiều Điểm đánh dấu trên Bản đồ Google
- 22. Google Maps InfoBubble pixelBài viết (Di chuyển từ vị trí mặc định trên điểm đánh dấu)
- 23. Hiển thị một Tripple trong Google Maps
- 24. Làm cách nào để thay đổi màu của điểm đánh dấu trên Google Maps?
- 25. Cách sử dụng google maps API với nhiều điểm đánh dấu trên cùng một bản đồ
- 26. Google Maps v3 đặt điểm đánh dấu đơn trên bản đồ, hãy nhấp vào
- 27. Làm cách nào để xóa điểm đánh dấu trên Google Maps?
- 28. Thay đổi Tiêu đề trên Điểm đánh dấu của Google Maps
- 29. Thêm nhận dạng vào điểm đánh dấu trên google maps v2 api cho android
- 30. API Google Maps Android: Ẩn đoạn mã đánh dấu
Các câu hỏi tương tự: http://stackoverflow.com/questions/9330802/zindex-on-clusters, http://stackoverflow.com/questions/6894548/positioning-markers-over-the-top-of-clusters- z-index-not-working – TMS