怎样在ArcIMS 上实现专题图

在现实应用中,用户经常会需要用地理数据形成专题图。ArcIMS用户会发现在用ArcIMS Author定制地图服务时,并不能象在ArcMap中那样通过定制图层属性实现专题地图,而是需要通过ArcIMS的客户端的开发接口来实现。下面就以在ArcIMSHTML Viewer中实现专题图为例阐述这个问题。

1HTML Viewer的文件组织结构
通常情况下,用ArcIMS Designer生成地图服务站点以后,会形成上面的目录结构。在虚拟目录的根目录下会有ArcIMSParam.js以及大量的HTML页面。同时还会生成两个子目录:JavaScriptImages。如果要做专题图,还需要手工将aimsClassRenderParam.js放在此根目录下,在JavaScript目录下添加aimsClassRender.js

ArcIMSParam.js文件包含大量的配置参数,可以通过调整里面的参数改变Viewer的外观,例如OverView窗口的位置,是否显示层信息,是否显示图例,是否显示指北针,指北针的形状等等。HTML页面包含了页面元素在浏览器中显示的信息。JavaScript目录下是HTML ViewerJavaScript类库。类库中包含了大量的JavaScript函数,HTML Viewer就是通过这些函数和后台服务器进行交互的。

2、 开发步骤
1)用一种网页开发工具在Viewer.htm中加一个新框架FieldlistFrame。如下图所示:

 

FieldlistFrame.htm中动态加入当前活跃图层的字段名以及几个功能按钮。字段名主要用来选择要做专题图的字段,功能按钮主要用来触发一些特定的功能,如生成饼图,生成直方图,显示图例等。

2)在Viewer.htm中定义FieldVisible数组,并初始化。
var FieldVisible=new Array(); //define a new array and initialize it.
for (var i=0;i<100;i++)
{
FieldVisible[i]=0;
}
FieldVisible
保存了哪些字段用来做专题图,这样在刷新地图时字段信息不会被刷新。

3)设置当前活动层,并更新FieldlistFrame中显示的字段信息。
toc.htm中,更改setActiveLayer()函数,每次设置完当前活动层后,重新载入FieldlistFrame中的内容
parent.FieldlistFrame.location.reload(); //refresh the content of FieldlistFrame.

这样,就保证了每次更改当前活动层时,当前字段值也会随着刷新。

4)在MapFrame.htm中,在适当的位置加入如下两行:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript" SRC="javascript/aimsClassRender.js"></SCRIPT>
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript" SRC="aimsClassRenderParam.js"></SCRIPT>

这样,当MapFrame.htm被加入到浏览器中时,上面两个JavaScript文件中的函数就被载入到当前页面中。AimsClassRender.js中定义了一些做专题图时要用到的函数,aimsClassRenderParam.js中定义了一些做专题图时要用到的参数,开发人员可以自己定义所需要的参数。

5)设置aimsClassRenderParam.js文件。
AimsClassRenderParam.js
文件需要用户根据实际情况手工编辑。
这里用的数据是ArcIMS带的教学数据(d:\Program Files\ESRI\ArcIMS3.1\Samples\Viewers\Data\SanFrancisco)。

aimsClassRenderParam.js中存放了一些做专题图时要用到的参数,如图层的名称。

6)在aimsClassRender.js中加如两个函数:
function startChart_Bar()
function startChart_Pie()
在这两个函数中设置ClassRenderString[ActiveLayerIndex],使之等于一个ArcXML字符串,这个字符串决定了地图的表现方法(分类,直方图,饼图等等)。然后调用系统提供的函数sendMapXML()就可以向服务器发送XML指令,并在客户端显示查询结果。

7)最终效果如下:

 

3.总结:
HTML Viewer
通过sendMapXML()函数向空间服务器发出请求,在此过程中会触发writeXML()sendToServer()函数。开发的关键就是以writeXML()为线索,找出要客户化的地图元素,用程序生成相应的ArcXML代码,然后调用sendMapXML()函数向服务器发请求。返回的ArcXMLprocessXML()函数处理,用户不用更改此函数,就可以得到查询结果。

你可能感兴趣的:(arc)