0

マップに最小ズーム レベルと最大ズーム レベルを設定したいと考えています。

私の最初のアイデアは「zoomstart」イベントをリッスンすることでしたが、org.gwtopenmaps.openlayers.client.Map クラスはそのようなイベント タイプのリスナーを実装していません。次に、「zoomend」イベントをリッスンしようとしました。私の考えは、ズームイベントの後にズームレベルを確認し、それがしきい値よりも高い/低い場合、そのしきい値にズームすることでした。コード例:

    @Override
    public void onMapZoom(MapZoomEvent eventObject) {
        if (eventObject.getSource().getZoom() > 18) {
            eventObject.getSource().zoomTo(18);
        }
    }

しかし、この場合、zoomTo イベントは発生しません。誰もこの問題の解決策を持っていますか?

4

3 に答える 3

2

素晴らしいアイデア

これを GWT-Openlayers ライブラリに追加しました。したがって、github から最新バージョンをダウンロードすると、次のことができます。

map.setMinMaxZoomLevel(6, 8);

また、独自のコードで JavaScript メソッドを使用する必要がなくなりました。

実際にショーケースも追加しましたが、ウェブサイトにアップロードするのに苦労しました。

新しいショーケースのアップロードに成功しました。新しく追加された Map.setMinMaxZoomLevel(minZoom, maxZoom) の例については、http://demo.gwt-openlayers.org/gwt_ol_showcase/GwtOpenLayersShowcase.html?example=Min%20max%20zoom%20example を参照してください

于 2013-11-20T20:04:54.600 に答える
1

これは OpenLayers (通常および GWT) では可能ではないと思います。私によると、2つの解決策が利用可能です。

オプション 1 これはユーザーにとって見苦しいものです。彼は地図がズームされているのを見て、この直後に前のズームレベルに戻りました。タイマーは、OL にズームをアニメーション化する機会を与えるために必要です。

    map.addMapZoomListener(new MapZoomListener()
    {
        @Override
        public void onMapZoom(final MapZoomEvent eventObject)
        {
            Timer t = new Timer()
            {

                @Override
                public void run()
                {
                    if (eventObject.getSource().getZoom() > 15)
                    {
                      map.zoomTo(15);
                    }
                    else if (eventObject.getSource().getZoom() < 10)
                    {
                        map.zoomTo(10);
                    }
                }
            };
            t.schedule(500);
        }
    });

オプション 2 ズームの既定のズーム コントロールを使用せずに、(通常の GWT を使用して) 独自のズーム ボタンを作成し、これらをマップの上に配置します。必要に応じて、これらのボタンを通常のボタンと同じ方法でスタイルできます。「通常の GWT で作成し、OL のように見せる」というトリックは、私がよく使用するトリックです (たとえば、はるかに高度なレイヤー スイッチャーを作成する場合)。

注 : 私は GWT-OpenLayers の開発者の 1 人です。必要に応じて、「オプション 2」の実行方法を示す例をショーケースに追加できます。

于 2013-11-20T12:40:57.527 に答える
0

カーフさん、お返事ありがとうございます。「オプション 1」を試してみましたが、うまくいきましたが、ユーザーにとってより受け入れやすい別の解決策を見つけました。

私の解決策は次のとおりです。

    map.isValidZoomLevel = function(zoomLevel) {
       return ((zoomLevel != null) &&
          (zoomLevel >= minZoomLevel) && 
          (zoomLevel <= maxZoomLevel) &&
          (zoomLevel < this.getNumZoomLevels()));
    }

isValidZoomLevel メソッドをオーバーライドしました。minZoomLevel および maxZoomLevel 変数は、アプリケーションの開始時に設定されています。GWT コードから JavaScript を呼び出すのは好きではありませんが、ここでは他に機会がありませんでした。

于 2013-11-20T13:45:05.883 に答える