멋진 웹 인터페이스로 두 개의 맵을 비교하십니까?


16

Leaflet 또는 OpenLayers에서 두 맵을 막대와 비교하여 두 맵 사이를 슬라이드 할 수 있습니까?

예를 들면 다음과 같습니다.

나는 그것이 가능하다는 것을 알고 있지만 어떻게 해야할지 모르겠다. 누구든지 아이디어가 있습니까? 예?


1
허리케인 샌디 링크는 이제 죽었을 것 같습니다. 가 이 아이디어를 보여주기 위해 더 나은 링크?
— Stephen Lead

작동합니다. 다른 링크 @StephenLead를 교체하겠습니다
— Alex Leith

답변:


12

하고 싶은 것을 보통 '스 와이프'도구라고합니다.

OpenLayers이에 대한 붙박이 도구 또는 컨트롤이 없다,하지만 다행히도, 여기 예를 들어이 : 구글과 출근 제어 및 OSM 사용자 정의 클래스에 기반.

이 JavaScript 파일을 응용 프로그램에 포함 하면 됩니다.

온라인에서 본 대부분의 스 와이프 도구 / 컨트롤은 간단한 CSS 클립을 기반으로합니다. 외부 패치 없이도 이러한 종류의 Control을 응용 프로그램에 통합하는 것은 매우 간단합니다.


누구든지 Leaflet으로 그것을 본 적이 있습니까?
— Alex Leith


8

망고 는 리플릿과 함께합니다. 예를 확인 하십시오 .

물론 직접 코딩하는 시간을 절약하고 망고를 사용하여 무료로지도를 만들 수 있습니다.


멋진 인터페이스입니다! 그러나 재사용 가능한 코드는 없습니다 ... 조직 내부의 무언가를 원하며 이미 데이터를 스타일링하고 호스팅하기위한 인프라를 갖추고 있습니다.
— Alex Leith

3

이것은 두 개의 WMS 레이어와 전단지 0.5를 사용하는 작동하는 전단지 예제입니다. 패닝하는 동안 레이어가 잘리지 않는 등 약간의 조정이 필요합니다. 그러나 그것은 꽤 잘 작동합니다.

여기를 참조하십시오 : https://github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


나는 당신이 저자인지 모르겠지만 두 가지 제안을 할 것입니다. 먼저 MoveEnd 이벤트 대신 Move 이벤트를 사용하면 실시간으로 스 와이프하고 두 번째로, 이것이 도구가되어야하는 방식과 반대되는 방법이라고 생각합니다 익숙한. 지도를 드래그하는 대신 슬라이더를 드래그해야합니다.
— Devdatta Tengshe

나는 실제로 하단에 슬라이더와 마우스를 움직이는 것을 좋아합니다. 즉, 마우스를 사용하면 항상 작동하게되고 터치를 사용하면 여전히 마우스를 사용할 수 있습니다. 나는 단지 그것을 함께 얻었다, 그것은 단지 개념의 증거이다. 많은 옵션이 있다고 확신합니다.
— Alex Leith

2

전단지 용 WMS 분할 을 살펴보십시오 .


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 ( "clip", "rect ("+ coordLeft + ") "); $ ( ". leaflet-layer : nth-child (2)"). css ( "clip", "rect ("+ coordRight + ")");
— khousuylong

좋아, (2)와 (3)은 맵에 추가하기 위해 레이어 2와 3을 참조합니까?
— Alex Leith

위의 코드가 시작되어 실행 중입니다. 먼저 필요한 것은 맵을 만들고 두 개의 레이어를 추가하는 것입니다 .jquery를 사용하면 최상위 레이어와 두 번째 최상위 레이어의 컨테이너를 얻을 수 있습니다. "css"클립을 사용하여 그에 따라 두 개의 컨테이너를
— 자릅니다

좋아, 그래서 순진한 구현이 있습니다 : jsfiddle.net/Ah6Bx 무엇이 빠졌습니까?
— Alex Leith


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.