zoukankan      html  css  js  c++  java
  • leaflet marker 旋转

    leaflet.markerRotation.js 代码(这段代码是从插件 leaflet.polylineDecorator.js 中复制的):

    // leaflet 实现 marker 旋转
    (function () {
        // save these original methods before they are overwritten
        var proto_initIcon = L.Marker.prototype._initIcon;
        var proto_setPos = L.Marker.prototype._setPos;
    
        var oldIE = (L.DomUtil.TRANSFORM === 'msTransform');
    
        L.Marker.addInitHook(function () {
            var iconOptions = this.options.icon && this.options.icon.options;
            var iconAnchor = iconOptions && this.options.icon.options.iconAnchor;
            if (iconAnchor) {
                iconAnchor = (iconAnchor[0] + 'px ' + iconAnchor[1] + 'px');
            }
            this.options.rotationOrigin = this.options.rotationOrigin || iconAnchor || 'center bottom';
            this.options.rotationAngle = this.options.rotationAngle || 0;
    
            // Ensure marker keeps rotated during dragging
            this.on('drag', function (e) { e.target._applyRotation(); });
        });
    
        L.Marker.include({
            _initIcon: function () {
                proto_initIcon.call(this);
            },
    
            _setPos: function (pos) {
                proto_setPos.call(this, pos);
                this._applyRotation();
            },
    
            _applyRotation: function () {
                if (this.options.rotationAngle) {
                    this._icon.style[L.DomUtil.TRANSFORM + 'Origin'] = this.options.rotationOrigin;
    
                    if (oldIE) {
                        // for IE 9, use the 2D rotation
                        this._icon.style[L.DomUtil.TRANSFORM] = 'rotate(' + this.options.rotationAngle + 'deg)';
                    } else {
                        // for modern browsers, prefer the 3D accelerated version
                        this._icon.style[L.DomUtil.TRANSFORM] += ' rotateZ(' + this.options.rotationAngle + 'deg)';
                    }
                }
            },
    
            setRotationAngle: function (angle) {
                this.options.rotationAngle = angle;
                this.update();
                return this;
            },
    
            setRotationOrigin: function (origin) {
                this.options.rotationOrigin = origin;
                this.update();
                return this;
            }
        });
    })();
    View Code

    引用 leaflet.markerRotation.js,然后就可以设置 marker 的旋转角度了:

    marker.setRotationOrigin('center center');
    marker.setRotationAngle(45);
    View Code

    参考github:

    https://github.com/bbecquet/Leaflet.RotatedMarker

  • 相关阅读:
    python-opencv 分离图片(视频)中的某一颜色物体
    python-opencv遍历图片像素,并对像素进行操作
    7月5日实习日志
    7月4日实习日志
    对《软件工程》这门课总结
    作业四: 结对编程项目---四则运算
    PSP记录个人项目耗时情况
    代码复审
    是否需要有代码规范
    四则运算程序生成
  • 原文地址:https://www.cnblogs.com/s0611163/p/15603106.html
Copyright © 2011-2022 走看看