比较具有良好网络界面的两个地图?


16

在Leaflet或OpenLayers中是否可以将两个地图与一个在两个之间滑动的条形图进行比较?

示例包括:

我知道这是可能的,但我不知道该怎么做。任何人有任何想法吗?例子?


1
飓风桑迪的链接现在似乎已消失。是更好的链路验证这个想法?
斯蒂芬·

那行得通,我将替换其他链接@StephenLead
Alex Leith

Answers:


12

您想要执行的操作通常称为“滑动”工具。

OpenLayers中没有用于此目的的内置工具或控件,但值得庆幸的是,这里有一个示例: 基于自定义类的Google和OSM滑动控件

您只需要在您的应用程序中包含 JavaScript文件。

我在网上看到的大多数滑动工具/控件都基于简单的CSS剪辑。即使没有外部补丁,将这种控件集成到您的应用程序中也非常简单。


看到有人用Leaflet这么做吗?
Alex Leith

@alexgleith看看这个:groups.google.com/forum
#!msg/leaflet

8

芒果用小叶做它。在此处查看示例

当然,您可以节省时间自己编写代码,并使用Mango免费创建地图。


这是一个漂亮的界面!但是那里没有可重用的代码...我想要我们组织内部的东西,而且我已经拥有用于样式化和托管数据的基础结构。
Alex Leith

3

这是一个使用两个WMS图层和0.5版传单的有效Leaflet示例。它确实需要一些调整,例如平移时不会剪切图层。但它运作良好。

看到这里:https : //github.com/gccgisteam/leaflet-examples/blob/master/leafletSwipe.html


我不知道您是否是作者,但我会给您两个建议:首先使用Move事件,而不是MoveEnd事件进行实时滑动;其次,我认为这与工具的使用方式相反用过的。代替拖动地图,应该拖动滑块。
Devdatta Tengshe

我实际上喜欢同时将滑块底部和鼠标移动。这意味着使用鼠标可以使其始终处于工作状态,而通过触摸,仍然可以进行操作。我只是在一起,这只是概念证明。我敢肯定有很多选择。
Alex Leith

2

看一看WMS Split for 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(“ clip”,“ rect(” + coordLeft +“) “); $(“。leaflet-layer:nth-​​child(2)”)。css(“ clip”,“ rect(” + coordRight +“)”));
khousuylong

好的,在哪里(2)和(3)按照添加到地图的顺序分别指向第2层和第3层?
Alex Leith

上面的代码已经启动并运行,您首先需要创建一个地图并添加两层,然后使用jquery获得顶层和第二层顶层的容器。使用“ css”夹相应地夹两个容器
khousuylong13 2013年

好的,所以我在这里有一个简单的实现:jsfiddle.net/Ah6Bx缺少什么?
Alex Leith


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.