Из того, что вы описываете, лучшим подходом будет пользовательский элемент управления. Документы для этого здесь . Пользовательские элементы управления могут быть простыми или сложными, как вы хотите.
Одна из причин, по которой вы хотели бы разбираться с панелями карт, заключается в том, что если вы хотите, чтобы такой «элемент управления» лежал под маркерами / тенями / полилиниями и т. Д. Я делаю это прямо сейчас, чтобы показать перекрестие в центре. карты в любое время. Но поскольку я сохраняю это как наложение, я выбираю панели таким образом, чтобы маркеры находились над ним, чтобы их можно было продолжать нажимать и взаимодействовать с помощью mapPane
. Вот как я это делаю:
var CrosshairOverlay = function(map){
this._holder = null;
this.setMap(map);
};
CrosshairOverlay.prototype = new google.maps.OverlayView();
CrosshairOverlay.prototype.onAdd = function(){
var map = this.getMap();
var holder = this._holder = $('<div>').attr('id', 'crosshair')[0];
var crosshairPaper = this._paper = R(holder, 150, 150);
// ... all your drawing and rendering code here.
var projection = this.getProjection();
var wrappedHolder = $(holder);
var updateCrosshairPosition = function(){
var center = projection.fromLatLngToDivPixel(map.getCenter());
wrappedHolder.css({left:center.x-75, top:center.y-75});
}
_.each(['drag','dragend','bounds_changed','center_changed','zoom_changed','idle','resize'], function(event){
google.maps.event.addListener(map, event, updateCrosshairPosition);
});
google.maps.event.addListener(map, 'maptypeid_changed', function(){
_.defer(updateCrosshairPosition);
});
this.getPanes().mapPane.appendChild(holder);
};
CrosshairOverlay.prototype.draw = function(){
};
CrosshairOverlay.prototype.onRemove = function(){
this._holder.parentNode.removeChild(this._holder);
this._holder = null;
};
Причина, по которой maptypeid_changed
имеет свой собственный обработчик с defer
, заключается в том, что это событие вызывается до того, как карта правильно настроится при изменении типа. Просто запустите свою функцию после текущего цикла событий.