Mapbox双屏联动,两个地图联动

利用Mapbox api实现两幅地图的联动,拖拉一幅地图,另一幅地图也出现相同的操作。

实现思路

1、要想有两个地图就需要有两个div来放容器。
2、两个容器各自放一个地图map
3、操作一个地图的时候,另一个地图随着动时,我们可以获取操作的那一个地图的属性信息,利用这个信息,来设置另一个地图的属性信息。

代码如下:

<body>
    <div style="height:650px;width:50%;float:left;" id="map1"></div>
    <div style="height:650px;width:50%;float:left;" id="map2"></div>
    <button id="btn">点击</button>
    <script>
        var map1_x;
        var map1_y;
        var map1_zoom;
        var map2_x;
        var map2_y;
        var map2_zoom;
        var map1_pitch;
        var map2_pitch;
        var map1_bear;
        var map2_bear;
        mapboxgl.accessToken =
            "pk.eyJ1IjoibGkxMjMzMjEiLCJhIjoiY2pxbWM3dWFtM3JqMDQybGJiNDhiaHRwaSJ9.-KPrXTSeKfaRo6TrrheFIA";
        var map1 = new mapboxgl.Map({
            container: "map1",
            style: "mapbox://styles/mapbox/dark-v10",
            zoom: 12,
            center: [117.72, 39.05]
        });
        var map2 = new mapboxgl.Map({
            container: "map2",
            style: "mapbox://styles/mapbox/satellite-streets-v10",
            zoom: 12,
            center: [117.72, 39.05]
        });
        // 拖拽
        map2.on("drag", function() {
            map2_x = map2.getCenter().lng;
            map2_y = map2.getCenter().lat;
            map1.setCenter([map2_x, map2_y]);
        });
        map1.on("drag", function() {
            map1_x = map1.getCenter().lng;
            map1_y = map1.getCenter().lat;
            map2.setCenter([map1_x, map1_y]);
        });

        //   放大缩小
        map2.on("zoom", function() {
            map2_zoom = map2.getZoom();
            map1.setZoom(map2_zoom);
        });
        map1.on("zoom", function() {
            map1_zoom = map1.getZoom();
            map2.setZoom(map1_zoom);
        });

        // 倾斜
        map2.on("pitch", function() {
            map2_pitch = map2.getPitch();
            map1.setPitch(map2_pitch);
        });
        map1.on("pitch", function() {
            map1_pitch = map1.getPitch();
            map2.setPitch(map1_pitch);
        });

        // 旋转
        map1.on("rotate", function() {
            map1_bear = map1.getBearing();
            map2.setBearing(map1_bear);
        });
        map2.on("rotate", function() {
            map2_bear = map2.getBearing();
            map1.setBearing(map2_bear);
        });
</body>

效果图

效果图
以上是Mapbox的两幅地图联动的功能,有什么好的建议提一下,大家相互借鉴,共同进步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章