ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

百度地图(BMapGL) 显示可视范围的插件 mapMaxBounds

2022-08-17 11:02:07  阅读:231  来源: 互联网

标签:function map 插件 bounds mapMaxBounds oldZoom addEventListener BMapGL zoomend


class mapMaxBounds {
  
  
// map 是百度的BMap实例对象
// bounds 是百度的可视范围类型 BMap.bounds
// 这里的map类型在我开发的时候使用的是BMapGL
constructor(map, bounds) {
this.map = map;
        map.disableInertialDragging();
        this.enableMaxBounds(bounds);
    }

    // 关闭限制区域
    disableMaxBounds() {
        this.map.container.removeEventListener("mouseup", this.containerMounseup);
        this.map.removeEventListener("moving", this.moving);
        this.map.removeEventListener("zoomstart", this.zoomstart);
        this.map.removeEventListener("zoomend", this.zoomend);
    }

    // 开启限制最大范围
    enableMaxBounds(bounds) {
        // 开启监听
        // var extent=new Object();
        // extent.minX="-180.380133";
        // extent.maxX="177.557674";
        // extent.minY="-80.395352";
        // extent.maxY="86"; 

        let _this = this;

        let oldPoint = null;
        let oldBounds = null, oldCenter = null, oldZoom = null;

        // this.containerMousedown = (e)=>{  };
        // this.map.container.addEventListener("mousedown", this.containerMousedown);

        this.containerMounseup = (e) => { this.map.enableDragging(); }
        this.map.container.addEventListener("mouseup", this.containerMounseup);

        // this.movestart = function(){ }
        // this.map.addEventListener("movestart", this.movestart);

        // this.dragend = function(){ console.log("dragend"); }
        // this.map.addEventListener("dragend", function(){ console.log("dragend"); });

        this.moving = function (type, target) {
            if (!bounds.containsBounds(this.getBounds())) {

                if (oldPoint) {

                    this.panTo(oldPoint, { noAnimation: false });
                }
                this.disableDragging();
            } else {
                oldPoint = this.getCenter();
            }
        }
        this.map.addEventListener("moving", this.moving);

        this.zoomstart = function () {
            if (!map.config.enableWheelZoom) return;
            oldBounds = this.getBounds();
            oldCenter = this.getCenter();
            oldZoom = this.getZoom();
        }
        this.map.addEventListener("zoomstart", this.zoomstart);

        const keyZoom = true;

        this.zoomend = function (type, target) {

            if (!map.config.enableWheelZoom) return;

            if (!bounds.containsBounds(this.getBounds())) {
                this.disableScrollWheelZoom();
                setTimeout(() => {
                    this.enableScrollWheelZoom()
                }, 1000)
                // oldBounds && this.setViewport([oldBounds.sw,oldBounds.ne], { enableAnimation: false, delay: 0, zoomFactor: -1});
                if (oldZoom < 4.4 || this.getZoom() < 4.6) {
                    // this.setBounds(bounds);
                    // this.panTo(new BMapGL.Point(106.75431201486032, 34.13381700418861), { noAnimation: false });
                    // this.setZoom(4.5);
                    this.setViewport({ center: new BMapGL.Point(106.75431201486032, 34.13381700418861), zoom: 4.5 })
                }
                else if (this.getZoom() != oldZoom) {
                    //this.panTo(oldCenter, { noAnimation: false });
                    //this.setZoom(oldZoom);
                    //this.centerAndZoom(oldCenter, oldZoom);
                    this.setViewport({ center: oldCenter, zoom: oldZoom });
                }
            };
        }
        this.map.addEventListener("zoomend", this.zoomend);

        this.map._off = this.map.off;
        this.map.off = function (type) {
            this._off.apply(this, arguments);
            if (type === "zoomend") {
                this.addEventListener("zoomend", _this.zoomend);
            }
        }
    }
}

标签:function,map,插件,bounds,mapMaxBounds,oldZoom,addEventListener,BMapGL,zoomend
来源: https://www.cnblogs.com/liao1992/p/16594295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有