Güzel bir web arayüzü ile iki harita karşılaştırmak?


16

Leaflet veya OpenLayers'da iki haritayı iki çubuk arasında kaydırmak mümkün mü?

Örnekler:

Bunun mümkün olduğunu biliyorum, nasıl yapacağımı bilmiyorum. Kimsenin fikri yok mu? Örnekler?


1
Sandy Kasırgası bağlantısı artık ölü gibi görünüyor. Mı bu fikri göstermek için daha iyi bir bağlantı?
Stephen Lead

Bu işe yarıyor, diğer bağlantı @StephenLead değiştirin
Alex Leith

Yanıtlar:


12

Ne yapmak istediğinize genellikle 'Kaydırma' aracı denir.

OpenLayers'da bunun için dahili bir araç veya kontrol yoktur, ancak şükür ki burada bir örnek vardır: Özel bir sınıfa dayalı Google ve OSM ile Kaydırma Kontrolü .

Bu JavaScript dosyasını uygulamanıza eklemeniz yeterlidir .

Çevrimiçi olarak gördüğüm çoğu Kaydırma Aracı / denetimi basit CSS klibine dayanır. Harici yamalar olmadan bile bu tür Kontrolleri uygulamanıza entegre etmek çok basittir.


Leaflet ile bunu yapan var mı?
Alex Leith


8

Mango bunu Leaflet ile yapıyor. Burada bir örnek inceleyin .

Tabii ki kendiniz kodlamak için zamandan tasarruf edebilir ve Mango'yu kullanarak haritayı ücretsiz olarak oluşturabilirsiniz.


Güzel bir arayüz! Ama orada tekrar kullanılabilir bir kod yok ... Kuruluşumuzun içinde olan bir şey istiyorum ve veri şekillendirme ve barındırma için zaten altyapım var.
Alex Leith

3

Bu, iki WMS katmanı ve 0.5 broşürü kullanan çalışan bir Broşür örneğidir. Biraz ince ayar gerektiriyor, örneğin kaydırma sırasında katmanlar kırpılmıyor. Ama gayet iyi çalışıyor.

Buraya bakın: https://github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


Yazar olup olmadığınızı bilmiyorum, ancak size iki öneri sunacağım: Öncelikle MoveEnd olayını kullanmak yerine MoveEnd olayı gerçek zamanlı kaydırma sağlar ve ikinci olarak, bu bir aracın nasıl olması gerektiğinin tam tersi olduğunu düşünüyorum Kullanılmış. Haritayı sürüklemek yerine, kaydırıcı sürüklenmelidir.
Devdatta Tengshe

Aslında hem kaydırıcıyı altta hem de farede hareket ettirmeyi seviyorum. Bu, bir fare ile her zaman çalışmasını sağlarsınız ve dokunarak hala yapabilirsiniz. Sadece bir araya geldim, bu sadece bir kavram kanıtı. Eminim birçok seçenek var.
Alex Leith

2

Leaflet için WMS Split'e bir göz atın .


1

broşür ile mümkündür. Burada broşür ve jquery ile tokatlamak harita yaptığım.

$(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 
        );
    }); 

Tam bir örneğiniz var mı? İki haritayı nasıl kaydırılacağını nasıl ayarlayabilirsiniz?
Alex Leith

iki haritaya ihtiyacınız yok, ihtiyacınız olan iki katmanlı bir harita, $ (". broşür katmanı: nth-child (3)"). css ("clip", "rect (" + coordLeft + ") "); $ (". broşür katmanı: nth-child (2)"). css ("klip", "rect (" + coordRight + ")");
khousuylong

Tamam, nerede (2) ve (3) haritaya eklemek için katman 2 ve 3'ü ifade ediyor?
Alex Leith

Yukarıdaki kod çalışıyor ve çalışıyor, önce ihtiyacınız olan bir harita oluşturmak ve iki katman eklemek, sonra jquery ile üst katman ve ikinci üst katman kabını alabilirsiniz. buna göre iki kapsayıcı klip "css" klip kullanarak
khousuylong

Tamam, burada naif bir uygulama var: jsfiddle.net/Ah6Bx eksik nedir?
Alex Leith


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.