openlayers 3方法继承
之前Web GIS开发使用的ArcGIS API用起来很系统,但是使用开源Web GIS API已经成主流趋势(你懂的~),最近项目想要从ArcGIS API 转到openlayers API,用起来不是那么的得心应手。举个例子:ArcGIS API可以通过Map.getLayer(layerid)方法根据图层的id得到想要的图层,比较方便也便于后期图层管理,绘图也可以临时添加、删除图层来提高内部效率,而不是将Verctor绘图图层存储为全局变量。
以ol.layer.Vector为例,打开http://openlayers.org/en/latest/apidoc/ol.layer.Base.html:
1.找到ol.layer.Vector
可以看到ol.layer.Vector是从ol.layer.Layer继承,继而打开ol.layer.Layer,同样的步骤ol.layer.Layer是从ol.layer.Base继承。
2.打开ol-debug.js文件,搜索“ol.layer.Base”:
ol.layer.Base = function (options) { ol.Object.call(this); /**
* @type {Object.<string, *>}
*/
var properties = ol.obj.assign({}, options);
properties[ol.layer.Property.OPACITY] =
options.opacity !== undefined ? options.opacity : 1;
properties[ol.layer.Property.VISIBLE] =
options.visible !== undefined ? options.visible : true;
properties[ol.layer.Property.Z_INDEX] =
options.zIndex !== undefined ? options.zIndex : 0;
properties[ol.layer.Property.MAX_RESOLUTION] =
options.maxResolution !== undefined ? options.maxResolution : Infinity;
properties[ol.layer.Property.MIN_RESOLUTION] =
options.minResolution !== undefined ? options.minResolution : 0;
properties[ol.layer.Property.ID] =
options.id !== undefined ? options.id : "";
this.setProperties(properties); /**
* @type {ol.LayerState}
* @private
*/
this.state_ = /** @type {ol.LayerState} */ ({
layer: /** @type {ol.layer.Layer} */ (this),
managed: true
}); };
可以看到图层的基础属性全部在 ol.layer.Property变量中
ol.layer.Property = {
OPACITY: 'opacity',
VISIBLE: 'visible',
EXTENT: 'extent',
Z_INDEX: 'zIndex',
MAX_RESOLUTION: 'maxResolution',
MIN_RESOLUTION: 'minResolution',
SOURCE: 'source',
ID: "id"
};
3.Property变量中添加ID:"id",图层基类中添加图层的ID属性,同时在 ol.layer.Base方法中添加:
properties[ol.layer.Property.ID] =
options.id !== undefined ? ptions.id : "";
4.图层中添加图层:
var map = this.getMap();
var source = new ol.source.Vector(); var vector = new ol.layer.Vector({
id: "draw-layer",
source: source
}); map.addLayer(vector);
5.查看图层属性
打开开发者模式(F12),在 map.addLayer(vector);这一行添加断点
测试发现,所有从ol.layer.Base继承的图层都存在id这个属性。继而搜索ol.Map,添加你想要的方法,例如这边我可能需要添加验证Map是否包含某个图层和获取图层的方法
/**
* Gets a given layer of this map by layerid.
* {@link ol.Collection}.
* @param {ol.layer.Base} layer Layer.
* @api
*/
ol.Map.prototype.getLayer = function (layerID) { }; /**
* check if Map contains a Layer by LayerID
* @param string layerID
* */
ol.Map.prototype.contains = function (layerID) {
var layers = this.getLayerGroup().getLayers();
};
openlayers 3方法继承的更多相关文章
- Exception在方法继承中的限制
问题: 父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常: 首先定义异常和父类: class Exception1 extends Exception {} cla ...
- Java main方法继承
java中main方法是可以继承的 Test1.java package Variables; public class Test1 { public static void main(String[ ...
- javascript实现继承3种方式: 原型继承、借用构造函数继承、组合继承,模拟extends方法继承
javascript中实现继承的三种方式:原型继承.借用构造函数继承.混合继承: /* js当中的继承 js中 构造函数 原型对象 实力对象的关系: 1 构造函数.prototype = 原型对象 2 ...
- Python mutilprocess模块之第二种创建进程方法--继承Process类
'''创建新的进程的第二种方法: 使用类的方式,可以自己定义一个类,继承Process类,每次实例化这个类的时候, 就等于实例化一个进程对象 '''from multiprocessing impor ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- 工程日记之HelloSlide(1):Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)
需求描述 HelloSlide是把文本自动转化成幻灯片的软件,在幻灯片中我们有SmartArt:各种各样的几何形状,并且可以自定义大小和颜色,放在幻灯片不同的位置. 为了在我们的软件中实现类似的效果, ...
- js中es5 使用call方法继承实现 1.0
function Parent(name){ this.name = name; this.showMess = function(){ return this.name; } } Parent.pr ...
- .NET面试题解析(04)-类型、方法与继承
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 做技术是清苦的.一个人,一台机器,相对无言,代码纷飞,bug无情.须梦里挑灯,冥思苦想,肝血暗耗,板凳坐穿 ...
- OC 初识NSString,self关键字,继承,成员变量的可见性,description方法
OC 初识NSString,self关键字,继承,成员变量的可见性,description方法 初识 NSString: char * string = "旭宝爱吃鱼"; 常量字符 ...
随机推荐
- GC参考手册 —— GC 调优(基础篇)
GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理.初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试.其 ...
- redis测试实践
最近测试服务端的时候,接触到了redis,之前也看过,但不系统,借着这次实践,记录一下. 一.写在前面 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的 ...
- Python3|ddt|unittest|浅议数据驱动测试
目录 1.DDT简介 2.data装饰器 3.unpack装饰器 4.file_data装饰器 5.总结 1.DDT简介 Data-Driven Tests(DDT)即数据驱动测试.它允许您通过不同的 ...
- 使用 Premiere 制作视频简介
Premiere 简介 经常上B站或其他视频网站,有很多个人制作的有趣视频.也会想要自己制作视频.目前网上常见的视频剪辑软件有很多种,神剪辑.爱剪辑.会声会影.EDIUS等.但在专业视频剪辑师中,使用 ...
- 学习python的第一天
2019.4.25自我总结 一.Typora 关于用Typora 自我感觉良好,基本快捷键也比较简单,ps:还是要多用用 二.编程 1.编程语言 是用来定义计算机程序的形式语言.它是一种被标准化的交流 ...
- 将一个html文件引入另一个html文件的div中
width="" height=""属性可根据要求自己设定
- 8.使用aix拓展
本文拷贝自: http://aix.colintree.cn/zh/HowToInstallExtensions.html 并且强烈推荐 http://aix.colintree.cn 网站. 首先呢 ...
- string转QBytearray
最近在程序中遇到要把图片的二进制string存成图片到本地,其实就是写文件 structCameraInfo tmpCameraInfo; string strData = tmpCalibrateR ...
- ORM(四)字段参数
null:如果null=True,则该字段在数据库中的值可以为NULL,默认null=False. blank:如果blank=True,前端form表单可以空,注意,这与NULL不同.NULL纯粹与 ...
- http-server安装及运行
vue项目打包后会生成一个dist目录,我们想要直接运行dist目录...除了复制静态文件到服务器nginx目录下,然后启动nginx来启动项目, 另外一个办法就是安装http-server 直接启动 ...