• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧
  • 欢迎加博主微信:jiang_shaobo

OpenLayers源码分析(四) ? Renderer.js

点滴 admin 3年前 (2016-05-18) 195次浏览 已收录 扫描二维码
Renderer.js ? 渲染抽象类

Properties 属性

container {DOMElement} HTML容器;

root {DOMElement}

extent {OpenLayers.Bounds} 当前视域范围;

locked {Boolean}

size {OpenLayers.Size}

resolution {Float} cache of current map resolution

map {OpenLayers.Map} Reference to the map ? this is set in Vector’s setMap()

OpenLayers的构造函数采用initialize函数写法;

构造函数里通过containerId初始化container; 覆盖了this属性;

supported : 表示是否支持特定渲染器, 由子类覆盖;

setExtent : 重新设置范围, 其中一个参数resolutionChanged表示范围设置是否引起分辨率的变化, 如果修改了分辨率, 则将resolution置空, 当需要时再通过getResolution()方法重新计算获取;

setSize : 重新设置大小, 原理同setExtent一致; 不过方法内部直接将resolution置空;

getResolution : 获取缓存cache值或者通过map.getResolution()重新计算; 这是获取resolution正确的途径, 不能直接通过resolution属性直接获取;

drawFeature : 仅提供给layer.drawFeature()调用; 内部调用drawGeometry和drawText完成矢量绘制; 其中, 计算feature的bounds是否与this.extent相交, 不相交则将style设置成{display: “none”};

drawGeometry : 抽象函数, 仅提供给渲染器自身调用; 三个参数: geometry, style, featureId;

这里的featureId在Canvas实现类里作为缓存Map键;

drawText : 抽象函数, 三个参数: featureId, style, location;

removeText : 抽象函数, 一个参数featureId;

clear : 抽象函数, 清空矢量;

getFeatureIdFromEvent : 抽象函数, 仅提供给layer.getFeatureFromEvent()调用, 具体如何实现由特定的渲染器指定, 根据渲染器特定的事件返回featureId;

其实, 这里的Event实际指当前鼠标位置; 因为Canvas实现类里通过evt获取evt.xy; 然后在hitContext里查询feature;

eraseFeatures : 提供给layer调用, 清除Feature, 内部调用eraseGeometry 和 removeText;

eraseGeometry : 抽象函数, 根据featureId查找并清除geometry绘制;

moveRoot : 抽象函数, 移动一个渲染器的root到另一个渲染器, 渲染器root用于要素选择;

在Elements实现类和VML实现类里实现;

getRenderLayerId : 获取this.container.id, 如果moveRoot执行, 这真正的渲染器id和此渲染器id将会不一致;

applyDefaultSymbolizer : 应用默认渲染样式;


http://www.openlayers.cn/forum.php?mod=viewthread&tid=42&extra=page%3D5

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。