以前总是看到别人开发的GIS软件上有很多酷炫的效果,虽然没有什么实际上的功能,但是看起来真的是很酷炫了,有时候自己就想怎么才能做到这么酷炫的效果呢,直到我遇到Echart这个图标工具,通过这个图标工具就可以做到很酷炫的动态图效果了,通过合适的动态图效果能够为我们软件增色不少。
    首先我们需要一个js控件,叫eschartLayer.js可以直接放入ArcGIS SDK进行应用,也可以配置dojo进行引用,具体的引用方法在这里就不进行介绍了,在这里主要介绍一下这个控件的思路,具体的做法就是在地图层之上添加一个Div的遮罩层,这一层为Echart图表,然后坐标为当前数据显示范围,然后在这个基础上进行绘制,;利用Echart的图标添加各种动态效果,实际上动态效果就是根据Echart的配置功能进行配置,通过这样的方式实现地图动态效果的叠加。我们首先可以参看这个控件的Github地址,通过他的例子可以看到一些迁徙图的动态效果,但是这些迁徙图动态效果都是点与点之间的,那么基于这个东西我就在思考,能不能做一个将ArcGIS Feature Layer转换为可展示数据的功能呢,为了实现这个目标,我写了两个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* 数据转换方法,将查询到的Feature数据转换为Echart图表展示的形式
* 将Feature数据转换为Echart能够展示的点图层数据进行展示
*/
function FeaturesConvertToPoints(features,type){
var data=[];
for(var i=0;i<features.length;++i){
if(features[i].geometry.type=='point'){
data.push({
type:type,
value:[features[i].geometry.longitude,features[i].geometry.latitude]
});
};
if(features[i].geometry.type=='polygon'){
data.push({
type:type,
value:[features[i].geometry.centroid.longitude,features[i].geometry.centroid.latitude]
});
};
}
return data;
};

/**
* 数据转换方法,将查询到的Feature数据转换为Echart图表展示的形式
* 将Feature数据转换为Echart能够展示的线数据
*/
function FeatureConvertToLines(features){
var data=[];
for(var i=0;i<features.length;++i){
if(features[i].geometry.type=='polyline'){
var paths = features[i].geometry.paths;
for(var j=0;j<paths.length;++j){
for(var k=0;k<paths[j].length-1;++k){
data.push({
fromName:"",
toName:"",
coords:[paths[j][k],paths[j][k+1]]
});
};
};
};
};
return data;
};

    其实上面两段代码都比较简单,第一段代码是将点和面数据转换为Echart能够显示的散点图的散点信息,第二段代码为将线数据转换为可展示的线段的信息,在这里就要说一下ArcGIS的线数据存储格式了,线数据是按照Feature->paths->Points这个层级关系来进行存储的,首选获取Feature,然后获取Paths以及之下的点数据,为了实现点数据转换为Echart的格式,需要将点数据进行一些转换,然后在Echart中的Series的数据中对数据进行添加,展示效果为:
动态线路数据展示,如果大家有什么疑问也可以留言,大家一起探讨一下GIS数据的酷炫展示方式。