กำลังเปรียบเทียบสองแผนที่กับเว็บอินเตอร์เฟสที่ดี?


16

เป็นไปได้ใน Leaflet หรือ OpenLayers เพื่อเปรียบเทียบสองแผนที่กับแถบเพื่อเลื่อนระหว่างทั้งสอง?

ตัวอย่างรวมถึง:

ฉันรู้ว่ามันเป็นไปได้ฉันไม่รู้ว่าจะทำอย่างไร ใครมีความคิดเห็นบ้าง ตัวอย่าง?


1
ดูเหมือนว่าลิงก์ Hurricane Sandy จะตายตอนนี้ คือนี้การเชื่อมโยงที่ดีกว่าที่จะแสดงให้เห็นถึงความคิด?
สตีเฟ่นนำ

ใช้งานได้แล้วฉันจะแทนที่ลิงก์อื่น ๆ @StephenLead
Alex Leith

คำตอบ:


12

สิ่งที่คุณต้องการทำมักเรียกว่าเครื่องมือ 'ปัดนิ้ว'

ไม่มีเครื่องมือหรือตัวควบคุม inbuilt สำหรับสิ่งนี้ใน OpenLayers แต่โชคดีที่มีตัวอย่างที่นี่: รูดการควบคุมด้วย Google และ OSM ตามคลาสที่กำหนดเอง

คุณต้องรวมไฟล์ JavaScript นี้ไว้ในแอปพลิเคชันของคุณ

ส่วนใหญ่เครื่องมือรูด / ควบคุมที่ฉันได้เห็นออนไลน์จะขึ้นอยู่กับคลิป CSS ง่าย ๆ มันง่ายมากที่จะรวมการควบคุมประเภทนี้ไว้ในแอปพลิเคชันของคุณแม้ว่าจะไม่มีการแก้ไขภายนอก


เห็นใครทำกับ Leaflet?
Alex Leith


8

มะม่วงทำกับใบปลิว ตรวจสอบการออกตัวอย่างที่นี่

แน่นอนคุณสามารถประหยัดเวลาในการเขียนโค้ดด้วยตัวคุณเองและสร้างแผนที่ได้ฟรีโดยใช้ Mango


นั่นเป็นอินเตอร์เฟซที่ดูดี! แต่ไม่มีรหัสที่สามารถนำกลับมาใช้ใหม่ได้ที่นั่น ... ฉันต้องการบางสิ่งที่อยู่ภายในองค์กรของเราและฉันมีโครงสร้างพื้นฐานสำหรับจัดแต่งทรงผมและโฮสต์ข้อมูลอยู่แล้ว
Alex Leith

3

นี่เป็นตัวอย่างแผ่นพับที่ใช้งานได้โดยใช้สองชั้น WMS และแผ่นพับ 0.5 มันต้องมีการปรับแต่งเล็กน้อยเช่นเลเยอร์จะไม่ถูกเล็มในขณะแพนกล้อง แต่มันใช้งานได้ดีทีเดียว

ดูที่นี่: https://github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


ฉันไม่รู้ว่าคุณเป็นผู้เขียนหรือไม่ แต่ฉันจะให้คำแนะนำสองข้อ: ก่อนอื่นให้ใช้เหตุการณ์ย้ายจากนั้นเหตุการณ์ MoveEnd ให้การปัดแบบเรียลไทม์ & สองฉันรู้สึกว่านี่เป็นวิธีที่ตรงกันข้ามกับวิธีการใช้เครื่องมือ ใช้ ควรลากแถบเลื่อนแทนการลากแผนที่
Devdatta Tengshe

ฉันชอบมีทั้งตัวเลื่อนที่ด้านล่างและเมื่อเลื่อนเมาส์ หมายความว่าด้วยเม้าส์ที่คุณใช้งานได้ตลอดเวลาและด้วยการสัมผัสคุณก็ยังสามารถทำได้ ฉันเพิ่งได้รับมันด้วยกันมันเป็นข้อพิสูจน์ของแนวคิดเท่านั้น ฉันแน่ใจว่ามีตัวเลือกมากมาย
Alex Leith

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

คุณมีตัวอย่างที่สมบูรณ์หรือไม่ คุณจะตั้งค่าแผนที่ทั้งสองเพื่อปัดระหว่างได้อย่างไร
Alex Leith

คุณไม่จำเป็นต้องใช้สองแผนที่สิ่งที่คุณต้องการคือหนึ่งแผนที่ที่มีสองเลเยอร์ $ (". leaflet-layer: nth-child (3)"). css ("คลิป", "rect (" + coordLeft + ") "); $ (". leaflet-layer: nth-child (2)"). css ("คลิป", "rect (" + coordRight + ")");
khousuylong

ตกลงที่ (2) และ (3) อ้างถึงเลเยอร์ 2 และ 3 เพื่อเพิ่มในแผนที่?
Alex Leith

รหัสด้านบนขึ้นและทำงานสิ่งที่คุณต้องมีก่อนคือสร้างแผนที่และเพิ่มสองเลเยอร์จากนั้นด้วย jQuery คุณจะได้รับคอนเทนเนอร์ของเลเยอร์ชั้นบนและชั้นบนสุดที่สอง ใช้คลิป "css" เพื่อตัดทั้งสองตู้
khousuylong

ตกลงดังนั้นฉันมีการดำเนินการที่ไร้เดียงสาที่นี่: jsfiddle.net/Ah6Bx มีอะไรหายไปบ้าง
Alex Leith


0

ฉันใช้ส่วนขยาย Openlayers 3 และ 4 ที่ดีโดย viglino คุณสามารถหาตัวอย่างของเครื่องมือการปัดและแผนที่ที่ซิงโครไนซ์ได้ที่นี่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.