前言
最近esri推出了ArcGIS Javascript的api4.0版本,在长时间的beta,都beta3后,终于郑重的推出了4.0 正式版本。作为开发者,长吁一口气。也许大家会有疑问,为何更新一个版本需要如此长的时间。真相只有一个,那就是:
4.0版本的api是全新的,其不是3.x版本的升级,而是esri推到重来,重新开发的API。
尝试过beta版本的开发者,会发现4.0的版本变化非常大。有两处给笔者留下非常深刻的印象:
功能上千呼万唤的3D功能终于出现,以及3D与2D一致的使用性和二三维一体性。
API本身的可用性和封装性。
3.x的API 很多地方出现封装不一致的情况,导致有时候使用会让你觉着莫名其名。 而4.0的变化非常大,对开发者非常的友好。举栗子如:在3.x API中对象的属性,有些对象属性可以通过赋值语句赋值,但是有的对象必须通过setMethod()种形式去赋值 。还有如对象名称的大小写不一致统一
具体变化
刚看看了看新特性变化,列举了如下一些:
dojo版本的变化,
4.0中使用的是dojo的版本为1.10.4。
3D 支持
4.0最主要的功能。真是arcgis的用户粘合度高啊,换成其他行业,这样的跳票。用户早就走光了。web 3D终于可以生产环境中用了。
为了能够通二三维一体效果。比如旋转什么的。增加sceneView和mapView对象用来构建一个容器。该容器用来添加map和scene对象。map对象可以添加到二维中,也可以添加到三维中,现在需要先构建mapview 再构建map对象,将map对象添加到view对象中。
除此之外,还有3d symbol对象的出现。
对象属性,方法等增删改
这一部分的更改,可能会让3.x的玩家感到无法适应。但是从ArcGIS 平台而非JS API这一个点来说,还是还有意义的改变。如:将ArcGISDynamicMapServiceLayer->MapImgeLayer, 将ArcGISTileMapServiceLayer->TileLayer等。不仅书写更为简洁,最重要的一点个人认为前后端的统一,当你看到portal中的item类型为map image Layer的时候,你就知道本质是什么了。
模块和包的变化
这个就要具体的去看了。
featureLayer的提升
featurelayer在js中是一个非常重要的图层。很多的功能在围绕这个图层展开。在4.0中有两个点觉着值得称赞:
- 在前端直接通过Graphics构建featureLayer。
前面的版本的的featurelayer只能是通过从featureservice或者mapservice的图层url构建。现在可以无需要服务,直接通过graphics数组就可以使用featurelayer。大家也许有疑虑,这不能编辑,有麻用呢?举个栗子,grapics不能设置render对象,而需要一个一个的setSymbol,而构建了featurelayer就可以整体render了。
- 前端过滤
一个非常实用的功能,3.x的版本只能在从服务器端取feature的时候,通过definitionExpres构建过滤。这个时候,减少数据的传输量,而当数据load到前端来后,要过滤数据,只能通过slectFeature方法来调用。现在featurelayer已经add到map中去后,通过definitionExpress任然可以前端进行过滤。 方便好多,有么有。
GraphicLayer的变化
以前GraphicLayer只能添加到所有图层的最顶端,而不能在其他位置,现在graphics Layers 可以位于Layer collection的任意位置。Sounds Good。。
对象属性变换
这是4.0只所以叫4.0而不是3.17的原因。这个变化实在太重要了。前面也举过这个例子。以前对象属性的赋值通过构造,也可以通过object.property=value的形式,还可以通过setMethod()的形式,还掌握不了前后顺序,谁覆盖谁。4.0中这能通过构造或者直接赋值的方式进行,且无需关注彼此的顺序。
除了上面这一点的变化,还有一点,就是属性变化事件监控。现在通过**.watch(property,callback)**方法就能属性变化, 而无需去绑定事件,。
basemap和operational layers分离
map对象中的allLayers是指basemap和operational layers集合。而layers特指operational layers ,而basemap单指。
增加了GroupLayer
不再支持通过JSON构建对象,需要通过fromJSON方法
在以前版本中,在构造方法中可以直接输入对象的JSON形式,来构造一个对象。而现在统一使用通过fromJSON方法。
AutoCast机制(五星好评)
在构造一个对象的时候,通常首先需要通过require()去添加模块。然后才能实例化对象。4.0推出了autocast机制,可以直接传入对象构造参数,而无需去AMD引入模块和初始化对象,这部分工作api帮做。如构造一个symbol对象,需要color初始化color对象,以前通常的做法如下:
var symbol = new SimpleMarkerSymbol({
style: "diamond",
color: new Color([255, 128, 45]), //这里需要使用new实例化对象
outline: new SimpleLineSymbol({ // 这里也需要
style: "dash-dot",
color: new Color([255, 128, 45]) //这里任然需要}) });
而现在既可以按照惯例也可以通过autocast。可以无需require()包和显式实例化。4.0中上面的代码可以改写为:
var symbol = new SimpleMarkerSymbol({
style: "diamond", color: [255, 128, 45], // 无需 new Color()
outline: {
style: "dash-dot",
color: [255, 128, 45] //无需 new Color() } });
方便很多有么有。。。当然但是并不是所有的对象都可以这么做,需要在api参考中,是否有标明面autocast支持
UI方面的变化
另一块比较重大的变化是UI的变化。这一块的变化较大。可以方便构建颜值很高的web应用程序。需要慢慢体会
总结
总体说非常惊艳的更新,用起来吧。。