ESRI官网关于Javascript的内容(3)__将3.x升级到4.0
来源:互联网 发布:js a href click 编辑:程序博客网 时间:2024/06/05 21:10
前言
4.0对于之前的ArcGIS API for J和地图组件做出了根本性的修改,所以需要重写应用而不是简单的更新API版本。
这篇文章主要为使用3.xAPI的应用的开发者准备的;尽管在这有一长串做出更新API,但我们只有少量需要注意的内容:
操作属性
使用视图(Views)
特定的地图和图层
更新模型和包
支持WebMap
定位
只能AMD
弃用
4.0中做出了一些重要的改动,做出这些改动是为了帮助开发者更加的有效与有效率的开发所有应用,在如何处理构造函数,属性和事件中可以看到这些改动。
操作属性
在4.0之前的版本这属性的读和写可以通过使用getMethodName或者setMethodName方法;这些方法现在不再被需要,API现在使用更加简单和统一的方式操作所有属性。
- 直接在对象上设置,如:
map.basemap='ocean';
- 直接通过对象获得属性,如:
map.basemap.title;
在3.x版本中,设置一个图层definitionExpression是这样的:
myFeatureLayer.setDefinitionExpression(expression);
然而下面的代码展示了如何在4.0中设置图层的setDefinitionExpression:
myFetaureLayer.definitionExpression=expression;
在4.0中,你还可以使用get()方法得到更深一层的属性:
var basemapTitle=map.get("basemap.title");
监视属性的改变
4.0之前的版本通过操作事件来监控属性改变;在4.0中,监视属性的改变变得更加容易,通过javascript .watch(property,callback)
来控制监控属性的改变,每当property改变时触发callback,同时允许你操作新的属性值,旧的属性值,属性名称和被监视对象。
var propertyChangeHandler = function(newValue, oldValue, property, object){ console.log("New Value: ",newValue," Old Value: ",oldValue," Changed Property: ",property," Watched Object: ",object);};
使用视图(Views)
4.0中地图可以展示2D与3D数据,因此,绘图逻辑就需要修订;地图和图层不再负责绘图逻辑,而是由视图Views来绘图。
视图(Views)的概念是在4.0版本引进的;一个视图可以这两种类型中的一个:
MapView,适用于2D视图;
SceneView,适用于3D视图;
Views在Map和Scene视图中使得数据可视化,一个map使用实际的数据或者图层去显示,然而视图操纵显示数据;数据如何展示,依据于是在2D或者3D视图中而不同;视图view拥有一个map引用javascript view.map
;但是地图没有视图(View)引用;一个特别需要注意的要点是一个地图可以被多个视图使用。
这里有另一个角度来理解这些内容:地图描述世界中的basemap和features,然而视图是让地图展示的窗口
下面的语法展示了如何创建和使用2D视图(MapView)和3D视图(SceneView)。
下面的代码片段使用MapView展示2D地图,
function (Map, MapView){ map = new Map({ basemap: "topo" }); view = new MapView({ container: "viewDiv", map: map, scale: 2400000 });}
下面的代码片段使用SceneView展示3D地图,
function (Map, SceneView){ map = new Map({ basemap: "topo" }); view = new SceneView({ container: "viewDiv", map: map, scale: 2400000 });}
特定的地图和图层
关于地图和图层有一些重大的改变;下面列出了一些:
在4.0中,basemap是与operational layers在map中是隔离开来的;
现在有可能旋转视图,无论是在2D还是在3D视图中;
Graphic图层可以可以被添加到地图图层集合的任何位置;在4.0之前,Graphic图层总是被添加非Graphic图层之上。
添加了GroupLayer图层类。
更新模型和包
如果想要了解更多详情,戳这里;下面这些一些明显的改动:
包的名称改变,e.g.
esri/dijit
变成了esri/widgets/
;更简短,清晰的模型名称,e.g. TileLayer代替了ArcGISTiledMapServiceLayer;
包装一致的模型名称,现在所有模型名称以一个大写字母开头,包括Map,Graphic和Query;
支撑类被移动到了支撑文件夹为了使得API引用更加有组织,比如
esri/layers/support
和esri/tasks/support
;esri/config
的结构改变了;属性esriConfig.defaults
现在在esriConfig
,例如设置默认的几何服务:
// 3.xesriConfig.defaults.geometryService = new GeometryService("http://yourdomain.com/geometryService");// 4.xesriConfig.geometryService = new GeometryService("http://yourdomain.com/geometryService");
- 3.x版本
esriConfig.defaults.io
对象现在变成了esriConfig.request
;
// 3.xesriConfig.defaults.io.alwaysUseProxy = true;// 4.xesriConfig.request.alwaysUseProxy = true;
三个 *-all格式的遗留模型已经被删除了;这样更好操作在一个应用中或者在使用web优化器;
构造函数不再支持JSON格式,使用fromJSON()替代;比如,
Graphic.fromJSON()
在FeatureLayer上没有graphics;现在LayerView渲染graphics代表在FeatureLayer上的features;
支持WebMap
从4.x开始,可能读取WebMaps;支持部分与WebMap的功能;这意味着它依赖于已经存在API中的功能;比如,可以读取WebMap如果它包含没有被4.xAPI实现的的图层类型(e.g.WMS Layer);在这个实例中,只有API支持的图层类型才能显示,请注意写出到webmap那个不被支持的layer。
定位
在4.x中,right-to-left(RTL)不再是一个设置位置”ar”或者”he”的副作用;
现在你可以选择性的RTL到任何位置,参考RTL support
你可以在html和body标签上制定方向,参考RTL support
只能AMD
在4.0之前的版本,你可以使用AMD(异步模型定义)和继承模型两者;从4.0开始,只提供AMD模型。
弃用
Geocoder
widget小部件从3.13版本已经被弃用了,它不是4.0版本的一部分,请使用Search小部件代替。
- ESRI官网关于Javascript的内容(3)__将3.x升级到4.0
- ESRI官网关于Javascript的内容(2)__选择3.x还是4.x版本?
- ESRI官网关于Javascript的内容(1)__获取ArcGIS API for Javascript
- 手动从Mysql 5.1.X 升级到 5.5.X 要注意的其它内容
- cocos2.x升级到3.x的脚本
- ubuntu 将python从默认的2.7升级到3.*
- C++0x草案将于年内发表,C++即将重大升级
- C++0x草案将于年内发表,C++即将重大升级
- C++0x草案将于年内发表 C++即将重大升级
- javascript(3)__最常用的技巧
- caffe官网关于fine tuning的一个例子
- 将Anaconda 的python2升级到python3
- 由HttpClient_3 升级到 HttpClient_4.3.x
- 字符串处理3 - 将0X数字中小于E的换成F
- Mac上Python从2.x升级到3.x的艰苦历程
- 将X字节单元中的内容拆为两个十六进制数,并分别转换为相应的ASCII 码存于Y及Z单元中。
- "类型同时存在于ESRI.ArcGIS.AxMapControl.dll和ESRI.ArcGIS.MapControl.dll中"的错误
- 使用JavaScript将Web页面内容导出到Word、Excel
- Hadoop2.4.1 简单的用户手机流量统计的MapReduce程序(二)
- Linux 下环境变量配置文件
- 占位
- 单向链表
- [Leetcode]19. Remove Nth Node From End of List
- ESRI官网关于Javascript的内容(3)__将3.x升级到4.0
- IOS Dev Intro - Create UImage from Sample Buffer Data
- 如何去除UITableView多余的空Cell
- bzoj2818(改为线性筛求欧拉函数的模版)
- nrf52 - 快速广播与慢速广播
- PHP中MySQL、MySQLi和PDO的用法和区别
- 自定义控件时绘制文字居中
- 双向链表
- Java枚举