2つのマップを素敵なWebインターフェイスと比較しますか?


16

LeafletまたはOpenLayersでは、2つのマップをバーで比較して、2つのマップをスライドさせることはできますか?

例は次のとおりです。

私はそれが可能であることを知っています、しかし、私はそれをする方法を知りません。誰でもアイデアはありますか?例?


1
ハリケーン・サンディのリンクは今は死んでいるようだ。で、これはアイデアを実証するためのよりよいリンク?
スティーブンリード

うまくいきました。他のリンク@StephenLead
アレックスリース

回答:


12

あなたがしたいことは、通常「スワイプ」ツールと呼ばれます。

OpenLayersにはこのための組み込みのツールやコントロールはありませんが、ありがたいことに、ここに例があります 。カスタムクラスに基づいたGoogleとOSMでのスワイプコントロール

この JavaScriptファイルをアプリケーションに含めるだけです。

私がオンラインで見たほとんどのスワイプツール/コントロールは、単純なCSSクリップに基づいています。外部パッチがなくても、この種のコントロールをアプリケーションに統合するのは非常に簡単です。


誰もがリーフレットでそれを見ていますか?
アレックスリース

@alexgleithこれを見てください:groups.google.com/forum
#!msg

8

マンゴーはリーフレットでそれを行います。こちら例をご覧ください

もちろん、自分でコーディングする時間を節約し、Mangoを使用して無料でマップを作成することもできます。


それは見栄えの良いインターフェースです!しかし、そこには再利用可能なコードはありません...私たちの組織の内部にあるものが欲しいのです。そして、データのスタイリングとホスティングのためのインフラストラクチャをすでに持っています。
アレックスリース

3

これは、2つのWMSレイヤーとリーフレット0.5を使用した実際のリーフレットの例です。たとえば、パン中にレイヤーがクリップされないように、少し調整する必要があります。しかし、それはかなりうまくいきます。

こちらをご覧くださいhttps : //github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


あなたが著者であるかどうかはわかりませんが、2つの提案をします。MoveEndイベントではなくMoveイベントを使用してリアルタイムにスワイプします。中古。マップをドラッグする代わりに、スライダーをドラッグする必要があります。
Devdatta Tengshe

私は実際に、下部のスライダーとマウスの動きの両方が好きです。つまり、マウスを使用すれば常に機能し、タッチを使用すればそれを実行できます。私はそれをまとめただけで、概念実証のみです。たくさんの選択肢があると確信しています。
アレックスリース


1

リーフレットで可能です。ここでは、リーフレットとjqueryでスワイプマップを実行しました。

$(document).ready(function() {
        var currentX = $("#viewport").width() / 2;
        var resetPosition = function(x){
            var pos = $(".leaflet-map-pane").position(),
            coordLeft = ( - pos.top ) + "px, " + ( x - pos.left + 3 ) + "px, " + ( $("#viewport").height() - pos.top ) + "px, " + -pos.left + "px",
            coordRight = ( - pos.top ) + "px, " + ( $("#viewport").width() - pos.left ) + "px, " + ( $("#viewport").height() - pos.top ) + "px, " + ( x - pos.left + 3 ) + "px";
            $(".leaflet-layer:nth-child(3)").css("clip", "rect(" + coordLeft + ")");
            $(".leaflet-layer:nth-child(2)").css("clip", "rect(" + coordRight + ")");
        };
        resetPosition(currentX);
        map.on("move", function(){
            resetPosition(currentX);
        })
        map.on("zoomend", function(){
            resetPosition(currentX);
        });
        if( $.browser.msie && parseInt($.browser.version) < 9 ){
            $("#vbar-divider").draggable({
                drag: function(e){
                    currentX = $("#vbar-divider").position().left;
                    resetPosition(currentX);
                },
                axis: "x"
            });
        }else{
            $("#vbar-divider").draggable({
                drag: function(e){
                    currentX = $("#vbar-divider").position().left;
                    resetPosition(currentX);
                    $("#vbar-divider div").hide();
                },
                stop: function(){
                    $("#vbar-divider div").show();
                },
                axis: "x",
                containment: "parent"
            });
        }
        $('#vbar-divider').animate({
                left: currentX,
            }, 
            500 
        );
    }); 

完全な例はありますか?スワイプする2つのマップをどのように設定しますか?
アレックスリース

2つのマップは必要ありません。2つのレイヤーを持つ1つのマップ、$( "。leaflet-layer:nth-​​child(3)")。css( "clip"、 "rect(" + coordLeft + ")が必要です。 "); $( "。leaflet-layer:nth-​​child(2)")。css( "clip"、 "rect(" + coordRight + ")");
-khousuylong

では、(2)と(3)は、マップに追加する順番でレイヤー2と3を参照しますか?
アレックスリース

上記のコードは実行中です。最初に必要なのは、マップを作成して2つのレイヤーを追加し、jqueryで最上位レイヤーと2番目の最上位レイヤーのコンテナーを取得することです。「css」クリップを使用して、2つのコンテナを適宜クリップします
-khousuylong

:[OK]を、ので、私はここで素朴な実装していjsfiddle.net/Ah6Bxは何が欠けていますか?
アレックスリース


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.