1

独自の投影法を定義した Google Maps API を使用して、1 つの画像を閲覧したいと考えています。低解像度の画像が 1 つしかないため、複数の画像タイルの代わりに GroundOverlay を使用したかったのですが、それでもズーム可能にしたかったのです。ただし、このプロジェクションを使用しようとすると、いくつかの不安定な動作が発生します。

  1. ズーム レベル 0 では、オーバーレイはまったく表示されません。
  2. ズーム レベル 1 以上では、マーカーは表示されますが、GroundOverlays は表示されません。
  3. ただし、任意のレベルからズームアウトすると、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 の問題ですか?

4

1 に答える 1

1

私の間違いがグラウンド オーバーレイの定義にあることがわかりました。私はズーム レベル 0 でした。つまり、オーバーレイの境界を (-90,-180) から (90,180) に設定しましたが、経度をラップするため、API はこれらのレベルに問題があるようです。エラー。最小ズームのレベル 1 になるように調整し、オーバーレイを (-45,-90) から (45,90) に設定したところ、すべて正常に動作するようになりました。

于 2013-02-28T19:47:13.263 に答える