概述:

在前面有篇文章提到了OL3中的多地图联动展示,在本节中讲述在OL2中实现多地图的联动展示。


效果:


实现思路:

在Ol2中,实现多地图的联动展示也是比较简单的。查看OL2中map的api,可知只要添加map的move事件即可。


实现代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>OpenLayers MapQuest Demo</title>
    <link rel="stylesheet" type="text/css" href="http://dev.openlayers.org/theme/default/style.css"/>
    <style type="text/css">
        html, body, .map{
            padding:0;
            margin:0;
            height:100%;
        }
        .map{
            width: 50%;
            float: left;
            box-shadow: 1px 1px 1px;
        }
    </style>
    <script type="text/javascript" src="http://dev.openlayers.org/OpenLayers.js"></script>
    <script type="text/javascript">
        var map1, map2;
        function init(){
            function getBaseLayer(layername, layer){
                return new OpenLayers.Layer.XYZ(
                        layername,
                        [
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}"

                        ],
                        {
                            isBaseLayer: true,
                            displayInLayerSwitcher:true
                        }
                );
            };
            function getAnnoLayer(layername, layer, visiable){
                return new OpenLayers.Layer.XYZ(
                        layername,
                        [
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}",
                            "http://t0.tianditu.com/DataServer?T="+layer+"&X=${x}&Y=${y}&L=${z}"

                        ],
                        {
                            isBaseLayer: false,
                            visibility:visiable,
                            displayInLayerSwitcher:false
                        }
                );
            };

            var baseLayers = ["vec_c","img_c"];
            var vecLayer = getBaseLayer("vec",baseLayers[0]);
            var imgLayer = getBaseLayer("img",baseLayers[1]);
            var vecAnno1 = getAnnoLayer("cva", "cva_c", true);
            var vecAnno2 = getAnnoLayer("cva", "cva_c", true);
            var mousepos2 = new OpenLayers.Layer.Markers("mousepos");

            map1 = new OpenLayers.Map({
                div: "map1",
                projection: "EPSG:4326",
                layers: [vecLayer, vecAnno1],
                numZoomLevels:20,
                center: [103.847, 36.0473],
                zoom: 4
            });
            map2 = new OpenLayers.Map({
                div: "map2",
                projection: "EPSG:4326",
                layers: [imgLayer, vecAnno2, mousepos2],
                numZoomLevels:20,
                center: [103.847, 36.0473],
                zoom: 4
            });
            map1.events.register("move", map1, function(evt){ 
                var extent = map1.getExtent();
                map2.zoomToExtent(extent, true);
            });
            map1.events.register("mousemove", map1, function(evt){ 
                mousepos2.clearMarkers();               
                var scrPt = evt.xy;
                var mapPt = map1.getLonLatFromPixel(scrPt);
                var marker = new OpenLayers.Marker(mapPt);
                mousepos2.addMarker(marker);
            });
        }
    </script>
</head>
<body onload="init()">
    <div id="map1" class="map"></div>
    <div id="map2" class="map"></div>
</body>



posted on 2015-09-30 20:49  LZU-GIS  阅读(326)  评论(0编辑  收藏  举报