Порівнюючи дві карти з приємним веб-інтерфейсом?


16

Чи можливо в Leaflet або OpenLayers порівнювати дві карти з смужкою, щоб ковзати між ними?

Приклади включають:

Я знаю, що це можливо, але я не знаю, як це зробити. Хтось мав якісь ідеї? Приклади?


1
Здається, посилання урагану Сенді зараз мертва. Є чи це краще посилання , щоб продемонструвати ідею?
Стівен Ведучий,

Це працює, я заміню інше посилання @StephenLead
Алекс Лейт

Відповіді:


12

Те, що ви хочете зробити, зазвичай називають інструментом "Проведення пальцем".

Для цього в OpenLayers не існує вбудованого інструменту чи елемента контролю, але, на щастя, тут є приклад: проведіть пальцем управління за допомогою Google та OSM на основі користувацького класу.

Вам просто потрібно включити цей файл JavaScript у вашу заявку.

Більшість інструментів / елементів управління Swipe, які я бачив в Інтернеті, засновані на простому CSS-кліпі. Інтегрувати такий тип управління у свою програму дуже просто навіть без зовнішніх патчів.


Хтось бачив це з Leaflet?
Алекс Лейт


8

Манго робить це з Листочкою. Ознайомтеся з прикладом тут .

Звичайно, ви можете просто заощадити час, щоб кодувати його самостійно і просто створити карту безкоштовно, використовуючи Mango.


Це приємний зовнішній інтерфейс! Але немає коду для багаторазового використання ... Я хочу щось внутрішнє для нашої організації, і в мене вже є інфраструктура для стилізації та розміщення даних.
Алекс Лейт

3

Це приклад робочого листівки, що використовує два шари WMS та листівку 0,5. Для цього потрібно трохи підправити, наприклад, шари не обрізаються під час панорамування. Але це працює досить добре.

Дивіться тут: https://github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


Я не знаю, чи є ви автором, але я дам вам дві пропозиції: По-перше, використовуючи подію Move, а не MoveEnd, подія MoveEnd дає розгойдування в реальному часі & по-друге, я вважаю, що це протилежний спосіб, яким має бути інструмент б / в. Замість того, щоб перетягувати карту, слід перетягнути повзунок.
Devdatta Tengshe

Мені справді подобається мати як повзунок внизу, так і рух миші. Це означає, що за допомогою миші ви постійно працюєте, а з дотиком ви все одно можете це робити. Я тільки що зібрав це разом, це лише доказ концепції. Я впевнений, що варіантів дуже багато.
Алекс Лейт

2

Погляньте на WMS Split для Leaflet.


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

У вас є повний приклад? Як налаштувати дві карти для переходу між ними?
Алекс Лейт

вам не потрібні дві карти, вам потрібна одна карта з двома шарами, $ (". листівка-шар: nth-дитина (3)"). css ("clip", "rect (" + koordLeft + ") "); $ (". leaflet-layer: nth-child (2)"). css ("кліп", "rect (" + координата + +)) ");
khousuylong

Гаразд, де (2) і (3) відносяться до шарів 2 і 3 в порядку додавання до карти?
Алекс Лейт

вищевказаний код працює і працює, спочатку потрібно створити карту і додати два шари, потім за допомогою jquery можна отримати контейнер верхнього та другого верхнього шарів. використовуючи кліп "css", щоб відповідно обрізати два контейнери
khousuylong

Гаразд, тому я маю тут наївну реалізацію: jsfiddle.net/Ah6Bx чого не вистачає?
Алекс Лейт


0

Я використовую приємні розширення Openlayers 3 та 4 від viglino. Ви можете знайти приклади інструмента Swipe та синхронізованих карт тут.

http://viglino.github.io/ol3-ext/examples/map.control.swipe.html

http://viglino.github.io/ol3-ext/examples/map.interaction.synchronize.html

Його сховище GitHub знаходиться тут: https://github.com/Viglino/ol3-ext

Ці приклади включені до сховища GitHub.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.