最近我发现了在屏幕上的 LatLngs 和像素坐标之间进行转换的困难方法,我不应该使用通过 Map.getProjection 轻松访问的Projection类,而是应该使用只能通过 OverlayView 访问的MapCanvasProjection类。
如果您正在使用自定义叠加层,后者非常方便,但如果您不是,那么访问 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
,但事实并非如此。我很困惑。