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 |