0

Web アプリケーションに OpenLayers を使用して調査しています。基本的に、OpenStreetMap や Google Maps は十分にズームインしないので、私が達成したいのは、最大レベルまでズームして再度ズームをクリックすると、カスタム マップ イメージがロードされることです。

それが不可能な場合は、別の方法として、最大ズーム レベルでのみ表示されるオーバーレイを作成し、クリックすると、おそらく SVG ベースの別のマップに移動します。

これらのうちどれがより実現可能でしょうか? どんなフィードバックでも大歓迎です!

4

1 に答える 1

0

できると思いますが、設定が難しいです。

Mapnik を使用して、独自の openstreetmap タイルをレンダリングできます。ベクターソースに基づいているため、さらにズームインできます。

または、ベクター レイヤー (これは SVG または VML になります) または静的な画像レイヤーを追加し、これを十分に高いズームレベルでのみ表示することもできます。ただし、ベース レイヤは OSM または Google マップであるため、マップはベース レイヤの最大ズーム レベルを超えて拡大することはできません。

あなたができることは、デフォルトの OpenLayers.Layer.OSM レイヤーをオーバーライドし、最大ズーム レベルを高く設定し (これは良い方法ではありません)、高いズームレベルでの OSM タイル画像のフェッチを停止し、カスタム動作を追加することです (タイルを独自のサーバーを使用するか、ベクター レイヤー オプションを使用します)。クラス階層のどこかで適切なメソッドをオーバーライドする必要があります ( OpenLayers.Layer.OSMextends OpenLayers.Layer.XYZextendsOpenLayers.Layer.Gridなど)。

OpenLayers.Layer.MyOSMLayer = OpenLayers.Class(OpenLayers.Layer.OSM, {
    initialize: function(name, options) {
        options = OpenLayers.Util.extend({
            numZoomLevels: 19 + 4,
        }, options);
        var newArguments = [name, url, options];
        OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
    },

    // @override from XYZ
    getURL: function (bounds) {
        var xyz = this.getXYZ(bounds);
        if ( xyz.z > 19 ) {  // override url on higher zoomlevel
             return "http://myserver/white.png";
        }
        // else default behaviour: super.getUrl()
        return OpenLayers.Layer.OSM.prototype.getURL.apply(this, [bounds]);
    },

    CLASS_NAME: "OpenLayers.Layer.MyOSMLayer"
})
于 2012-11-19T09:03:29.957 に答える