ESRI官网关于Javascript的内容(3)__将3.x升级到4.0

时间:2020-12-19 20:27:27

前言

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/supportesri/tasks/support;

  • esri/config的结构改变了;属性esriConfig.defaults现在在esriConfig,例如设置默认的几何服务:

// 3.x
esriConfig.defaults.geometryService = new GeometryService("http://yourdomain.com/geometryService");

// 4.x
esriConfig.geometryService = new GeometryService("http://yourdomain.com/geometryService");
  • 3.x版本esriConfig.defaults.io 对象现在变成了 esriConfig.request;
// 3.x
esriConfig.defaults.io.alwaysUseProxy = true;

// 4.x
esriConfig.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小部件代替。