So sánh hai bản đồ với giao diện web đẹp?


16

Có thể trong Leaflet hoặc OpenLayers để so sánh hai bản đồ với một thanh để trượt giữa hai bản đồ không?

Những ví dụ bao gồm:

Tôi biết điều đó là có thể, tôi không biết làm thế nào để làm điều đó. Bất cứ ai có ý tưởng? Ví dụ?


1
liên kết Bão Sandy dường như đã chết. Là này một liên kết tốt hơn để chứng minh ý tưởng?
Stephen chì

Nó hoạt động, tôi sẽ thay thế liên kết khác @StephenLead
Alex Leith

Câu trả lời:


12

Những gì bạn muốn làm, thường được gọi là công cụ 'Vuốt'.

Không có công cụ hoặc điều khiển sẵn có nào cho điều này trong OpenLayers, nhưng may mắn thay, có một ví dụ ở đây: Swipe Control với Google và OSM dựa trên một lớp tùy chỉnh.

Bạn chỉ cần đưa tệp JavaScript này vào ứng dụng của mình.

Hầu hết các công cụ / điều khiển Swipe mà tôi đã thấy trực tuyến, đều dựa trên clip CSS đơn giản. Rất đơn giản để tích hợp loại Điều khiển này trong ứng dụng của bạn ngay cả khi không có các bản vá bên ngoài.


Nhìn thấy ai làm điều đó với Tờ rơi?
Alex Leith


8

Mango làm điều đó với tờ rơi. Kiểm tra một ví dụ ở đây .

Tất nhiên bạn chỉ có thể tiết kiệm thời gian để tự viết mã và chỉ cần tạo bản đồ miễn phí bằng Mango.


Đó là một giao diện đẹp! Nhưng không có mã có thể tái sử dụng ở đó ... Tôi muốn một cái gì đó là nội bộ cho tổ chức của chúng tôi và tôi đã có sẵn cơ sở hạ tầng để tạo kiểu và lưu trữ dữ liệu.
Alex Leith

3

Đây là một ví dụ về Tờ rơi hoạt động bằng cách sử dụng hai lớp WMS và tờ rơi 0,5. Nó cần một chút tinh chỉnh, ví dụ như các lớp không bị cắt trong khi xoay. Nhưng nó hoạt động khá tốt.

Xem tại đây: https://github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


Tôi không biết bạn có phải là tác giả không, nhưng tôi sẽ đưa ra cho bạn hai gợi ý: Đầu tiên là sử dụng sự kiện Move thay vì đó là sự kiện MoveEnd thực hiện thao tác vuốt thời gian thực & thứ hai, tôi cảm thấy đây là cách ngược lại với cách một công cụ nên đã sử dụng. Thay vì kéo bản đồ, nên kéo thanh trượt.
Devdatta Tengshe

Tôi thực sự thích có cả thanh trượt ở phía dưới và chuột di chuyển. Điều đó có nghĩa là với một con chuột bạn làm cho nó hoạt động mọi lúc và với cảm ứng, bạn vẫn có thể làm điều đó. Tôi chỉ có nó với nhau, nó là một bằng chứng về khái niệm mà thôi. Tôi chắc chắn có rất nhiều lựa chọn.
Alex Leith


1

nó có thể với tờ rơi đây là những gì tôi đã thực hiện bản đồ vuốt với tờ rơi và 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 
        );
    }); 

Bạn đã có một ví dụ hoàn chỉnh? Làm thế nào để bạn thiết lập hai bản đồ để vuốt giữa?
Alex Leith

bạn không cần hai bản đồ, thứ bạn cần là một bản đồ có hai lớp, $ (". leaflet-layer: nth-child (3)"). css ("clip", "orth (" + viceLeft + ") "); $ (". leaflet-layer: nth-child (2)"). css ("clip", "orth (" + viceRight + ")");
khousuylong

Ok, trong đó (2) và (3) đề cập đến lớp 2 và 3 theo thứ tự thêm vào bản đồ?
Alex Leith

đoạn mã trên đang hoạt động, điều bạn cần đầu tiên là tạo bản đồ và thêm hai lớp, sau đó với jquery bạn có thể lấy vùng chứa của lớp trên cùng và lớp trên cùng thứ hai. sử dụng clip "css" để cắt hai container tương ứng
khousuylong

Ok, vậy tôi có một triển khai ngây thơ ở đây: jsfiddle.net/AH6Bx còn thiếu gì không?
Alex Leith


0

Tôi đang sử dụng một tiện ích mở rộng 3 và 4 Openlayers tuyệt vời của viglino. Bạn có thể tìm thấy các ví dụ về công cụ Swipe và bản đồ được đồng bộ hóa tại đây.

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

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

Kho lưu trữ GitHub của anh được đặt tại đây: https://github.com/Viglino/ol3-ext

Những ví dụ này được bao gồm trong kho GitHub.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.