Недавно я обнаружил, что для преобразования между значениями LatLngs и пиксельными координатами на экране не следует использовать класс Projection , к которому легко получить доступ через Map.getProjection, но вместо этого я должен использовать MapCanvasProjection класс, к которому можно получить доступ только через OverlayView.
Последний вариант удобен и удобен, если вы работаете с пользовательским оверлеем, но если это не так, получить доступ к MapCanvasProjection очень больно. До сих пор я решил эту проблему для себя, добавив метод в класс Map, который предоставит мне легкий доступ к нужному классу проекции:
google.maps.Map.prototype.getCanvasProjection = function() {
if (!this.projectionOverlay) {
this.projectionOverlay = new google.maps.OverlayView();
this.projectionOverlay.onAdd = function(){};
this.projectionOverlay.onRemove = function(){};
this.projectionOverlay.draw = function(){};
this.projectionOverlay.setMap(this);
}
return this.projectionOverlay.getProjection();
};
Все это похоже на большой взлом, чтобы сделать что-то, что должно быть тривиальным. И это еще больше заставляет меня задуматься, что делает класс google.maps.Projection ? Когда я читаю документацию, мне кажется, что Projection.fromLatLngToPoint
делает то же самое, что и MapCanvasProjection.fromLatLngToContainerPixel
, но это не так. Я озадачен.