独自の投影法を定義した Google Maps API を使用して、1 つの画像を閲覧したいと考えています。低解像度の画像が 1 つしかないため、複数の画像タイルの代わりに GroundOverlay を使用したかったのですが、それでもズーム可能にしたかったのです。ただし、このプロジェクションを使用しようとすると、いくつかの不安定な動作が発生します。
- ズーム レベル 0 では、オーバーレイはまったく表示されません。
- ズーム レベル 1 以上では、マーカーは表示されますが、GroundOverlays は表示されません。
- ただし、任意のレベルからズームアウトすると、GroundOverlays が非常に短時間表示されることがあります。ズームアウトしている間だけ表示され、すぐに消えます。また、すぐに表示されますが、正しい座標には表示されませんが、マーカーは表示されます。
私は API にかなり慣れていないので、それが私の単純な見落としだったとしても驚かないでしょうが、何が原因なのかわかりません。これは、緯度/経度を線形にマップして座標をマップするだけの私の投影のコードです。
function EvenMapProjection() {
var xPerLng = 512/360;
var yPerLat = 512/180;
this.fromLatLngToPoint = function(latlng) {
var x = (latlng.lng()+180)*xPerLng;
var y = (latlng.lat()+90)*yPerLat;
console.log('Lng', latlng.lng(), 'Lat', latlng.lat(), '-> Point', x, y);
return new google.maps.Point(x, y);
};
this.fromPointToLatLng = function(point) {
var lat = point.y/yPerLat-90;
var lng = point.x/xPerLng-180;
console.log('Point', point.x, point.y, '-> Lng', lng, lat);
return new google.maps.LatLng(lat, lng);
};
}
投影なしで私がやろうとしていることの例(デフォルトのメルカトル投影を使用):
http://95.156.209.71/tmp/a.html
上で定義した射影を使用した同じ例:
http://95.156.209.71/tmp/b.html
最後に、プロジェクションを使用し、GroundOverlay を使用せず、代わりにタイル化された画像 (常に同じ画像) を使用する例を示します。
http://95.156.209.71/tmp/c.html
最後のリンクは、LatLng(0, 0) のマーカーがズーム レベル 1 (またはそれ以上) で表示されますが、レベル 0 では表示されないことも示しています。
足りないものやバグのあるコードはありますか、それとも実際には API の問題ですか?