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 + -
显示快捷键?