当前位置:首页 » 操作系统 » openlayers源码

openlayers源码

发布时间: 2022-05-09 12:47:13

① 如何学习openlayers源码

或许是一直以来从事面向对象开发,我总觉得这块的知识在框架中占有很重要的地位。JavaScript语言因为其特性,即使做面向对象的开发,无法实现静态多态这个特性,封装性也很菜(基本谈不上),剩下的就是动态多态和复用性,个人觉得最重要的就是复用了。复用性只要针对的是的是方法,一方面是代码的复用,另一方面在JS中算是方法作为对象占有比较大的内存开销,至于属性一般用来记录数据信息,其复用暂且不提。

OpenLayers中的继承相关都写在BaseTypes/OpenLayers.Class.js中。

简单的类定义,继承使用的方式如下:

MySubClass = Openlayers.Class({
//父类属性方法
})
MyClass = OpenLayers.Class(MySubClass,{
//这里写我们的子类属性方法。
})

这里直接贴出源码分析

OpenLayers.Class = function() {
var len = arguments.length;
var P = arguments[0];
var F = arguments[len-1];
var C = typeof F.initialize == "function" ? F.initialize : function(){ P.prototype.initialize.apply(this, arguments); };
if (len > 1) {
var newArgs = [C, P].concat( Array.prototype.slice.call(arguments, 1, len));
OpenLayers.inherit.apply(null, newArgs);
} else {
C.prototype = F;
}
return C;
};

OpenLayers.inherit = function(C, P) {
var F = function() {};
F.prototype = P.prototype;
C.prototype = new F;
var i, l, o;
for(i=2, l=arguments.length; i<l; i++) {
o = arguments[i];
if(typeof o === "function") {
o = o.prototype;
}
OpenLayers.Util.extend(C.prototype, o);
}
};

OpenLayers.Util = OpenLayers.Util || {};
OpenLayers.Util.extend = function(destination, source) {
destination = destination || {};
if (source) {
//属性复制
for (var property in source) {
var value = source[property];
if (value !== undefined) {
destination[property] = value;
}
}
var sourceIsEvt = typeof window.Event == "function"
&& source instanceof window.Event;
if (!sourceIsEvt
&& source.hasOwnProperty && source.hasOwnProperty("toString")) {
destination.toString = source.toString;
}
}
return destination;
};

分析下代码会发现:OpenLayers.util.extend()方法是个属性复制的过程,比较简单。继承的主要实现来在OpenLayers.Class和OpenLayers.inherit;

假设使用MySubClass调用来调试走一遍代码:

父类没有继承,所以调用OpenLayers.Class只有一个参数(按照规范我们传入的对象有一个initialize()构造函数,而使用JS函数对象来模拟继承对象一直是比较流行的方式。)

var C = typeof F.initialize == "function" ?
F.initialize :
function(){ P.prototype.initialize.apply(this, arguments); };
C.prototype = F;
return C;

这里获取initialize方法作为最终的对象引用,其prototype属性指向传入的Object,这样我们写在 Object中都所有属性和方法都可以被F(initialize)通过原型链获取并且使用。利弊:所有的方法都达到了公用的目的,但是属性本身位于 prototype中,则在设置属性的时候等于在对象本身C上添加了格外属性,考虑多个对象属性基本很难公用的问题,这里基本没错,唯一可惜的就是在 prototype中多用了些属性内存开销。

结论: C = Object.initilize();

C.prototype = Object;使用MyClass来分析下继承。

首先还是获取对象构造方法,但是如果没有写则返回父类的构造方法,注意父类的方法不是直接返回,而是调用,相当于获取了父类构造方法另一个副本

var C = typeof F.initialize == "function" ?
F.initialize :
function(){ P.prototype.initialize.apply(this, arguments); };

接下来调用继承。(注:这里继承多个父类很少用到(个人觉得这里不支持继承多个父类,这里的写法是为了分开定义子类中的方法和属性(也可视为未子类添加额外属性方法),有兴趣可以自行研究),所以只分析继承一个父类的情况)

var newArgs = [C, P].concat(
Array.prototype.slice.call(arguments).slice(1, len-1), F);
OpenLayers.inherit.apply(null, newArgs);

所以最终调用相当于是 OpenLayers.inherit(C , P , F);

var F = function() {};

F.prototype = P.prototype;

C.prototype = new F;

结果:

C = initialize();

C.prototype = function();(F,只是一个引用,无多大意义)

C.prototype._proto_ == P.prototype

考虑P就是我们前面所得到的父类MySubClass,那么C即可以通过原型链 访问到P所有的属性和方法,继承就差不多实现了。

for(i=2, l=arguments.length; i<l; i++) {
o = arguments[i];
if(typeof o === "function") {
o = o.prototype;
}
OpenLayers.Util.extend(C.prototype, o);
}

这段代码如果只考虑单父类继承的情况,则o = F,即我们的子类Object对象,而o本身不是方法,最终调用如下:

OpenLayers.Util.extend(C.prototype, Object);

即把我们所有的属性,方法都赋值到C.prototype上,一方面保证了同对象上属性的公用,另一方面考虑在原型链层,Object定义的属性和方法相比父类的方法更高一层,C.prototype 相比C.prototype._proto_,所以调用过程中优先使用Object中的定义,相当于继承中的函数覆写。

关于调用父类同名(被覆写了)方法,因为不存在super指针,所以这里在使用的时候需要全名调用MySubClass.XXX.apply(this,args);

至于属性复制使用将构造函数也顺道赋值了一遍,C.prototype.initilize===C 本身,这个链接的存在有什么特殊效果没看出来

C.prototype.CLASS_NAME 按照规范存在着类型名称信息,可以提供使用中的类别判断
转载

② openlayers3 是基于 html5 开发的吗

OpenLayers是web端比较好的一个GIS引擎,广受大家的青睐,最开始我以为这是一个比较小众的引擎,没想到后面发现有很多人使用,并且还有很多人正在学习使用。

  1. 需要具备基本的Javascript知识,如果还不具备,请googleJavaScript学习推荐书籍(我推荐JavaScript核心编程)进行学习,同时可以在CodeWars上面在线练习。

  2. 具备基本的GIS理论知识,知道GIS引擎的作用,不知道的请google相关资料脑补。

  3. 需要具备基本的面向对象思想,因为OpenLayers 3引擎是实用面向对象编程的。

③ openlayers如何结合wms服务开发webGIS

getFeatureInfo是wms服务一个参数,你将那个参数改变一下就可以获取到点击feature的info了

④ 有哪些值得推荐的数据可视化工具

大讲台数据可视化培训为你解答:
第一部分:入门级工具
1、Excel
Excel的图形化功能并不强大,但Excel是分析数据的理想工具,上图是Excel生成的热力地图
作为一个入门级工具,Excel是快速分析数据的理想工具,也能创建供内部使用的数据图,但是Excel在颜色、线条和样式上可选择的范围有限,这也意味着用Excel很难制作出能符合专业出版物和网站需要的数据图。但是作为一个高效的内部沟通工具,Excel应当是你百宝箱中必备的工具之一。
2、CSV/JSON
CSV(逗号分隔值)和JSON(JavaScript对象注释)虽然并不是真正的可视化工具,但却是常见的数据格式。你必须理解他们的结构,并懂得如何从这些文件中导入或者导出数据。以下将要介绍的所有数据可视化工具都支持CSV、JSON中至少一种格式。
第二部分:在线数据可视化工具
3、GoogleChartAPI
GoogleChartAPI工具集中取消了静态图片功能,目前只提供动态图表工具。能够在所有支持SVG\Canvas和VML的浏览器中使用,但是GoogleChart的一个大问题是:图表在客户端生成,这意味着那些不支持JavaScript的设备将无法使用,此外也无法离线使用或者将结果另存其他格式,之前的静态图片就不存在这个问题。尽管存在上述问题,不可否认的是GoogleChartAPI的功能异常丰富,如果没有特别的定制化需要,或者对Google视觉风格的抵触,那么你大可以从GoogleChart开始。
4、Flot
Flot是一个优秀的线框图表库,支持所有支持canvas的浏览器(目前主流的浏览器如火狐、IE、Chrome等都支持)。
5、Rapha?l
Rapha?l是创建图表和图形的JavaScript库,与其他库最大的不同是输出格式仅限SVG和VML。SVG是矢量格式,在任何分辨率下的显示效果都很好。
6、D3
D3(DataDrivenDocuments)是支持SVG渲染的另一种JavaScript库。但是D3能够提供大量线性图和条形图之外的复杂图表样式,例如Voronoi图、树形图、圆形集群和单词云等。虽然D3能够提供非常花哨的互动图表,但你在选择数据可视化工具时,需要牢记的一点是:知道在何时保持简洁。
7、Visual.ly
如果你需要制作信息图而不仅仅是数据可视化,目前也有大把的工具可用。Visual.ly就是最流行的一个选择。虽然Visual.ly的主要定位是:“信息图设计师的在线集市”,但是也提供了大量信息图模板。虽然功能还有很多限制,但是Visual.ly绝对是个能激发你灵感的地方。
第三部分:互动图形用户界面(GUI)控制
如果数据可视化的互动性强大到可以作为GUI界面会怎样?随着在线数据可视化的发展,按钮、下拉列表和滑块都在进化成更加复杂的界面元素,例如能够调整数据范围的互动图形元素,推拉这些图形元素时输入参数和输出结果数据会同步改变,在这种情况下,图形控制和内容已经合为一体。以下这些工具能够帮你实现这些功能:
8、Crossfilter
当我们为方便客户浏览数据开发出更加复杂的工具时,我们已经能够创建出既是图表,又是互动图形用户界面的小程序。JavaScript库Crossfilter就是这样的工具。
Crossfilter应用:当你调整一个图表中的输入范围时,其他关联图表的数据也会随之改变。
9、Tangle
JavaScript库Tangle进一步模糊了内容与控制之间的界限。在下图这个应用实例中,Tangle生成了一个负载的互动方程,读者可以调整输入值获得相应数据。
第四部分:地图工具
地图生成是web上最困难的任务之一。GoogleMaps的出现完全颠覆了过去人们对在线地图功能的认识。而Google发布的MapsAPI则让所有的开发者都能在自己的网站中植入地图功能。
近年来,在线地图的市场成熟了很多,如果你需要在数据可视化项目中植入定制化的地图方案,目前市场上已经有很多选择,但是知道在何时选择何种地图方案则成了一个很关键的业务决策。地图方案看上去功能都很强大,但是切忌:“有了一把锤子,看什么都像钉子。”
10、ModestMaps
顾名思义,ModestMaps是一个很小的地图库,只有10KB大小,是目前最小的可用地图库。这似乎意味着ModestMaps只提供一些基本的地图功能,但是不要被这一点迷惑了。在一些扩展库的配合下,例如Wax,ModestMaps立刻会变成一个强大的地图工具。
11、Leaflet
CloudMade团队为大家带来了Leaflet,这是另外一个小型化的地图框架,通过小型化和轻量化来满足移动网页的需要。Leaflet和ModestMaps都是开源项目,有强大的社区支持,是在网站中整合地图应用的理想选择。
12、PolyMaps
Polymaps是另外一个地图库,但主要面向数据可视化用户。Polymaps在地图风格化方面有独到之处,类似CSS样式表的选择器,是不可错过的好东西。
13、OpenLayers
OpenLayers可能是所有地图库中可靠性最高的一个。虽然文档注释并不完善,且学习曲线非常陡峭,但是对于一些特定的任务来说,OpenLayers无可匹敌。例如能够提供一些其他地图库都没有的特殊工具。
14、Kartograph
Kartograph的标记线是对地图绘制的重新思考,我们都已经习惯了莫卡托投影(Mercatorprojection),但是Kartograph为我们带来了更多的选择。如果你不需要调用全球数据,而仅仅是生成某一区域的地图,那么Kartogaph将使你脱颖而出。
15、CartoDB
CartoDB是一个不可错过的网站。你可以用CartoDB很轻易就把表格数据和地图关联起来,这方面CartoDB是最优秀的选择。例如,你可以输入CSV通讯地址文件,CartDB能将地址字符串自动转化成经度/维度数据并在地图上标记出来。目前CartoDB支持免费生成五张地图数据表,更多使用需要支付月费。
ChartingFonts(随着iPad3等高清移动设备的普及)web开发的一个最新趋势是将符号字体与字体整合(把符号变成字体),创建出漂亮的矢量化图标。在这些新型字体中,例如FFChartwell和Chartjunk是专门用来显示图表和图形的。他们与OpenType碰到的问题一样,就是不能被所有的浏览器支持,但是不久的未来这些矢量字体将是数据可视化工作中需要考虑到的因素。
第五部分:进阶工具
如果你准备用数据可视化做一些“严肃”的工作,那么你可能不会对在线可视化工具或者web小程序有太大兴趣,你需要的是桌面应用和编程环境。
16、Processing
Processing是数据可视化的招牌工具。你只需要编写一些简单的代码,然后编译成Java。目前还有一个Processing.js项目,可以让网站在没有JavaApplets的情况下更容易地使用Processing。由于端口支持Objective-C,你也可以在iOS上使用Processing。虽然Processing是一个桌面应用,但也可以在几乎所有平台上运行,此外经过数年发展,Processing社区目前已近拥有大量实例和代码。
17、NodeBox
NodeBox是OSX上创建二维图形和可视化的应用程序。你需要了解Python程序,NodeBox与Processing类似,但是没有Processing的互动功能。
第六部分:专家级工具
与Excel相对的是专业数据分析工具。如果你是一个专业的数据分析师,那么你就必须对下面将要介绍的工具有所了解(如果不是精通的话)。众所周知,SPSS和SAS是数据分析行业的标准工具,但是这些工具的费用不菲,只有大型组织和学术机构才有机会使用,下面我们介绍几种免费的替代工具,这些开源工具的共同特征是都有强大的社区支持。开源分析工具性能不输老牌专业工具,插件的支持甚至更好。
18、R
作为用来分析大数据集的统计组件包,R是一个非常复杂的工具,需要较长的学习实践,学习曲线也是本文所介绍工具中最陡峭的。但是R拥有强大的社区和组件库,而且还在不断成长。当你能驾驭R的时候,一切付出都是物有所值的。
19、Weka
当你成长成一名数据科学家的时候,你需要将个人能力从数据可视化扩展到数据挖掘领域。Weka是一个能根据属性分类和集群大量数据的优秀工具,Weka不但是数据分析的强大工具,还能生成一些简单的图表。
20、Gephi
Gephi是进行社交图谱数据可视化分析的工具,不但能处理大规模数据集并生成漂亮的可视化图形,还能对数据进行清洗和分类。Gephi是一种非常特殊的软件,也非常复杂,先于他人掌握Gephi将使你一骑绝尘。

⑤ 怎么在weblogic发布.war包,我要调用wms服务该如何通过OpenLayers框架实现在weblogic发布的服务啊

OpenLayer向地图添加图层的例子源码 http://www.gisjc.com/a/gisyuanma/2010/0416/50.html 追问: 我要将这个wms服务发布在weblogic里面,本人没用过GeoServer;现在只是用的tomcat和weblogic服务器

热点内容
电脑上怎么看本机的配置 发布:2024-10-08 13:26:02 浏览:41
androidepub 发布:2024-10-08 13:25:22 浏览:549
怎么拿云服务器做进销存 发布:2024-10-08 13:25:14 浏览:724
小本解说服务器是什么 发布:2024-10-08 13:25:09 浏览:393
安卓倍速脚本 发布:2024-10-08 13:18:48 浏览:77
饥荒本地服务器后续怎么添加服务器模组 发布:2024-10-08 13:18:24 浏览:199
阿里云服务器centos7还是8 发布:2024-10-08 13:16:16 浏览:718
安卓手机的屏幕设置在哪里 发布:2024-10-08 13:14:37 浏览:702
解压车祸 发布:2024-10-08 12:50:16 浏览:636
我的世界天空之镜服务器文件夹 发布:2024-10-08 12:49:38 浏览:75