最近、画面上の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
が、そうではありません。困惑しています。