OpenLayers--------------数据渲染分析
来源:互联网 发布:极光推送golang 编辑:程序博客网 时间:2024/06/05 21:56
实际上,OpenLayers的整个表现过程是这样的:通过调用获取数据,然后各种格式的解析器解析数据,在用所谓的渲染器渲染后加到图层上,最后再结合相应的控件表现出来,成为一幅我们看到的“动态”地图。
这里主要讨论OpenLayers. Renderer这个类及其子类。
Renderer类提供了一些虚方法,以供其子类继承,像setExtent、drawFeature、drawGeometry、eraseFeatures、eraseGeometry等。
Elements继承Renderer,具体实现渲染的类又继承Renderer类。之所以这样设计,是因为不同的矢量格式数据需要共享相应的函数,在Elements这个类中封装一下。这个类的核心是drawGeometry和drawGeometryNode两个函数。其中drawGeometry调用了drawGeometryNode,创建出基本的地理对象。
drawGeometry: function(geometry, style, featureId) {
var className = geometry.CLASS_NAME;
if ((className == "OpenLayers.Geometry.Collection") ||
(className == "OpenLayers.Geometry.MultiPoint") ||
(className == "OpenLayers.Geometry.MultiLineString") ||
(className == "OpenLayers.Geometry.MultiPolygon")) {
for (var i = 0; i < geometry.components.length; i++) {
this.drawGeometry(geometry.components[i], style, featureId);
}
return;
};
//first we create the basic node and add it to the root
var nodeType = this.getNodeType(geometry);
var node = this.nodeFactory(geometry.id, nodeType, geometry);
node._featureId = featureId;
node._geometryClass = geometry.CLASS_NAME;
node._style = style;
this.root.appendChild(node);
//now actually draw the node, and style it
this.drawGeometryNode(node, geometry);
}
渲染器的继承关系这样的:
具体实现渲染的方法在OpenLayers. Renderer.SVG和OpenLayers. Renderer.VML两个类中实现的,就是实现Elements提供的虚方法,比如drawPoint、drawCircle、drawLineString、drawLinearRing、drawLine、drawPolygon、drawSurface等。以drawCircle为例看看具体的实现过程:
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;
}
}
- OpenLayers--------------数据渲染分析
- OpenLayers--------------数据渲染分析
- OpenLayers项目分析[转](六):数据渲染分析
- OpenLayers项目分析——数据渲染分析
- OpenLayers项目分析——(六)数据渲染分析
- OpenLayers项目分析——(七)数据渲染分析
- OpenLayers项目分析(六)数据渲染分析
- openlayers 渲染wkt数据,标记中心值并弹窗
- OpenLayers项目分析(四)空间数据的组织与实现
- OpenLayers项目分析一
- OpenLayers事件机制分析
- OpenLayers项目分析
- OpenLayers项目分析
- OpenLayers项目分析
- OpenLayers 源码分析
- OpenLayers项目分析
- Openlayers 2013 源码分析
- openlayers加载jsonp数据
- OpenLayers----------空间数据的组织与实现
- SQL Server2005索引碎片分析和解决方法
- HDOJ1010dfs
- Set wlan for mobile devices in Wn7
- OpenLayers项目分析------------- 数据解析——以GML为例
- OpenLayers--------------数据渲染分析
- 学习Linux系统的十一点建议
- 为表字段增加 not null约束的风险
- 头文件errno.h
- POJ 1151 Atlantis(扫描线)
- yii框架学习笔记1
- android 抽屉功能初试
- Using the SQLite Online Backup API
- C\C++面试题