MapCanvasProjection fromLatLngToContainerPixel()
, вероятно, то, что автор после. Это даст вам смещение в пикселях относительно контейнера карты. Я провел несколько экспериментов и нашел «простейшее» рабочее решение. (Я бы хотел, чтобы Google сделал эту функцию более доступной!)
Сначала вы объявляете подкласс OverlayView
где-то так:
function CanvasProjectionOverlay() {}
CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
CanvasProjectionOverlay.prototype.constructor = CanvasProjectionOverlay;
CanvasProjectionOverlay.prototype.onAdd = function(){};
CanvasProjectionOverlay.prototype.draw = function(){};
CanvasProjectionOverlay.prototype.onRemove = function(){};
Затем где-то еще в вашем коде, где вы создаете экземпляр карты, вы также создаете экземпляр этого OverlayView и устанавливаете его карту следующим образом:
var map = new google.maps.Map(document.getElementById('google-map'), mapOptions);
// Add canvas projection overlay so we can use the LatLng to pixel converter
var canvasProjectionOverlay = new CanvasProjectionOverlay();
canvasProjectionOverlay.setMap(map);
Затем, когда вам нужно использовать fromLatLngToContainerPixel
, вы просто делаете это:
canvasProjectionOverlay.getProjection().fromLatLngToContainerPixel(myLatLng);
Обратите внимание, что, поскольку объект MapCanvasProjection будет доступен только после вызова draw()
, то есть за некоторое время до idle
карты, я предлагаю создать логический флаг "mapInitialized", установите для него значение true на первой карте idle
Перезвоните. А потом делай то, что тебе нужно, только после этого.