vml.js

来自「用来在地图上做操作GIS,在地图上做标记」· JavaScript 代码 · 共 569 行 · 第 1/2 页

JS
569
字号
    /**     * Method: createNode     * Create a new node     *     * Parameters:     * type - {String} Kind of node to draw     * id - {String} Id for node     *     * Returns:     * {DOMElement} A new node of the given type and id     */    createNode: function(type, id) {        var node = document.createElement(type);        if (id) {            node.setAttribute('id', id);        }        return node;        },        /**     * Method: nodeTypeCompare     * Determine whether a node is of a given type     *     * Parameters:     * type - {String} Kind of node to draw     * id - {String} Id for node     *     * Returns:     * {Boolean} Whether or not the specified node is of the specified type     */    nodeTypeCompare: function(node, type) {        //split type        var subType = type;        var splitIndex = subType.indexOf(":");        if (splitIndex != -1) {            subType = subType.substr(splitIndex+1);        }        //split nodeName        var nodeName = node.nodeName;        splitIndex = nodeName.indexOf(":");        if (splitIndex != -1) {            nodeName = nodeName.substr(splitIndex+1);        }        return (subType == nodeName);    },    /**     * Method: createRenderRoot     * Create the renderer root     *     * Returns:     * {DOMElement} The specific render engine's root element     */    createRenderRoot: function() {        var id = this.container.id + "_vmlRoot";        var rendererRoot = this.nodeFactory(id, "div");        return rendererRoot;                            },    /**     * Method: createRoot     * Create the main root element     *     * Returns:     * {DOMElement} The main root element to which we'll add vectors     */    createRoot: function() {        var id = this.container.id + "_root";        var root = this.nodeFactory(id, "v:group");        return root;    },    /**************************************     *                                    *     *     GEOMETRY DRAWING FUNCTIONS     *     *                                    *     **************************************/    /**     * Method: drawPoint     * Render a point     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawPoint: function(node, geometry) {        this.drawCircle(node, geometry, 1);    },    /**     * Method: drawCircle     * Render a circle.     * Size and Center a circle given geometry (x,y center) and radius     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     * radius - {float}     */    drawCircle: function(node, geometry, radius) {        if(!isNaN(geometry.x)&& !isNaN(geometry.y)) {            var resolution = this.getResolution();                    node.style.left = (geometry.x /resolution).toFixed() - radius;            node.style.top = (geometry.y /resolution).toFixed() - radius;                var diameter = radius * 2;                        node.style.width = diameter;            node.style.height = diameter;        }    },    /**     * Method: drawLineString     * Render a linestring.     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawLineString: function(node, geometry) {        this.drawLine(node, geometry, false);    },    /**     * Method: drawLinearRing     * Render a linearring     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawLinearRing: function(node, geometry) {        this.drawLine(node, geometry, true);    },    /**     * Method: DrawLine     * Render a line.     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     * closeLine - {Boolean} Close the line? (make it a ring?)     */    drawLine: function(node, geometry, closeLine) {        this.setNodeDimension(node, geometry);        var resolution = this.getResolution();        var path = "m";        for (var i = 0; i < geometry.components.length; i++) {            var x = (geometry.components[i].x/resolution);            var y = (geometry.components[i].y/resolution);            path += " " + x.toFixed() + "," + y.toFixed() + " l ";        }        if (closeLine) {            path += " x";        }        path += " e";        node.path = path;    },    /**     * Method: drawPolygon     * Render a polygon     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawPolygon: function(node, geometry) {        this.setNodeDimension(node, geometry);        var resolution = this.getResolution();            var path = "";        for (var j = 0; j < geometry.components.length; j++) {            var linearRing = geometry.components[j];            path += "m";            for (var i = 0; i < linearRing.components.length; i++) {                var x = linearRing.components[i].x / resolution;                var y = linearRing.components[i].y / resolution;                path += " " + x.toFixed() + "," + y.toFixed();                if (i==0) {                    path += " l";                }            }            path += " x ";        }        path += "e";        node.path = path;    },    /**     * Method: drawRectangle     * Render a rectangle     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawRectangle: function(node, geometry) {        var resolution = this.getResolution();            node.style.left = geometry.x/resolution;        node.style.top = geometry.y/resolution;        node.style.width = geometry.width/resolution;        node.style.height = geometry.height/resolution;    },    /**     * Method: drawCurve     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawCurve: function(node, geometry) {        this.setNodeDimension(node, geometry);        var resolution = this.getResolution();            var path = "";        for (var i = 0; i < geometry.components.length; i++) {            var x = geometry.components[i].x / resolution;            var y = geometry.components[i].y / resolution;                if ((i%3)==0 && (i/3)==0) {                path += "m"            } else if ((i%3)==1) {                path += " c"            }            path += " " + x + "," + y;        }        path += " x e";        node.path = path;    },    /**     * Method: drawSurface     *      * Parameters:     * node - {DOMElement}     * geometry - {<OpenLayers.Geometry>}     */    drawSurface: function(node, geometry) {        this.setNodeDimension(node, geometry);        var resolution = this.getResolution();            var path = "";        for (var i = 0; i < geometry.components.length; i++) {            var x = geometry.components[i].x / resolution;            var y = geometry.components[i].y / resolution;            if ((i%3)==0 && (i/3)==0) {                path += "m";            } else if ((i%3)==1) {                path += " c";            }            path += " " + x + "," + y;        }        path += " x e";        node.path = path;    },    CLASS_NAME: "OpenLayers.Renderer.VML"});

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?