4

指定された座標と getTileUrl() のズーム レベルに基づいて有効なタイル URL を返すカスタムImageMapTypeを実装しました。

new google.maps.ImageMapType({
    name: 'Satellite',
    getTileUrl: function(coord, zoom) {
        var p_type = "satellite",
            z = zoom - 11,
            corr = Math.pow(2, zoom) - Math.pow(2, z),
            p_x = coord.x - corr,
            p_y = coord.y - corr,
            maxCoord = Math.pow(2, (z+1)) - 1;

        if (p_x > maxCoord || p_y > maxCoord || p_x < 0 || p_y < 0) {
            return 'http://maps.gstatic.com/intl/en_us/mapfiles/transparent.png';
        }

        p_x = (p_x < 16 ? '0' : '') + p_x.toString(16);
        p_y = (p_y < 16 ? '0' : '') + p_y.toString(16);

        return 'http://map.example.com/' + p_type + '/' + (z + 1) + '/tile_' + p_y + p_x + '.jpg';
    },
    tileSize: new google.maps.Size(128, 128),
    isPng: false,
    minZoom: 11,
    maxZoom: 16
});

ズーム レベル 11 から 16 の 128x128 タイルがあります。ImageMapTypeOptions オブジェクトの maxZoom プロパティを 16 以上に増やすことで、タイルがある場所を超えてズームすることができます (もちろん、タイルは表示されませんが、マーカーとポリラインは機能します)。 . この場合、タイルを前のズーム レイヤーから引き伸ばしたいと思います (ズーム レベルを変更するときのトランジション効果と同じ方法で)。

出来ますか?もしそうなら、どのように?

4

1 に答える 1

1

とても良い質問です。これは理論的にはクライアントで実行できるはずですが、オブジェクトのgetTileUrlメソッドは google.maps.ImageMapTypeURLを返す必要があるため、このオブジェクトを使用するときはサーバーで実行する必要があります。

もう1つの可能性は、代わりに、より一般的なオブジェクトを使用して、独自のメソッドgoogle.maps.MapTypeを定義することです。次に、独自のストレッチ要素getTileを返すことができます。<img>

于 2012-04-23T12:04:25.243 に答える