在二维地图上叠加业务数据是一个最基本的功能需求。API提供了很多类型的图层来帮助开发者添加所需要的业务数据。其中最常用的是以下两类:
1. MapImageLayer:
- 跟它的名字一样“地图图像图层”,字面理解是负责加载一份地图图像的图层。对应加载ArcGIS Server发布的MapServer服务,每次客户端请求地图服务的时候,GIS服务器根据请求的地图范围,将该范围内的数据生成一张图片返回客户端。它的优点是数据量大时(百万级别),由于由GIS服务器处理,所以速度很快。另外,由于返回的是图片,所以在客户端获取不到要素的信息(坐标和属性)。如果需要获取要素的信息,需要通过空间查询完成。
- 构造一个MapImageLayer对象时,地图服务的地址是MapServer,完整的地址格式类似
http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer”
2. FeatureLayer
- FeatureLayer:要素图层,加载的是要素对象信息。对于加载ArcGIS Server发布的FeatureServer,每次客户端请求服务的时候,GIS服务器将根据请求的地图范围,返回该范围内的数据给客户端,注意返回的是要素的信息,包括几何坐标、属性信息和符号,由客户端对要素进行符号化。
- 构造一个FeatureLayer对象时,地图服务的地址是FeatureServer中的一个图层,完整的地址格式类似:
http://services.arcgis.com/V6ZHFr6zdgNZuVG0/ArcGIS/rest/services/Oklahoma_earthquakes/FeatureServer/0”
- 适合少量数据(2000条数据是Esri建议的最大显示要素数)的可视化,可以配合热点图、聚合图功能使用。另外,由于返回的信息中包含了属性信息,所以开发者习惯的直接点击地图上的要素弹出该要素的信息的需求,可以直接满足而不需要再去执行空间查询。之所以FeatureLayer不建议返回过多的要素在客户端渲染,是由于目前的API不管是符号化的接口还是渲染器,主要采用SVG来渲染。SVG有自己的优势,譬如内存占用率低,渲染性能略高,并且用户使用浏览器的内置的缩放功能时符号不会变模糊。但是在图形数量比较多的时候,就会导致浏览器加载卡顿的问题。
- 基于上述问题,Esri目前正在推出基于WebGL的FeatureLayer渲染,以提高要素量较大的情况下的渲染性能表现,并在动画和视觉特效方面有所推进,目前在官网上推出的Sample 对18万个要素进行渲染,效果非常给力。
以下这个Demo,加载了MapImageLayer和FeatureLayer,代码很简单,我们直接看代码: