gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1408回复:1

怎样在ArcIMS 3.1上实现专题图

楼主#
更多 发布于:2003-09-14 09:27


   在现实应用中,用户经常会需要用地理数据形成专题图。ArcIMS用户会发现在用ArcIMS Author定制地图服务时,并不能象在ArcMap中那样通过定制图层属性实现专题地图,而是需要通过ArcIMS的客户端的开发接口来实现。下面就以在ArcIMS的HTML Viewer中实现专题图为例阐述这个问题。
  
   1、HTML Viewer的文件组织结构
   通常情况下,用ArcIMS Designer生成地图服务站点以后,会形成上面的目录结构。在虚拟目录的根目录下会有ArcIMSParam.js以及大量的HTML页面。同时还会生成两个子目录:JavaScript和Images。如果要做专题图,还需要手工将aimsClassRenderParam.js放在此根目录下,在JavaScript目录下添加aimsClassRender.js。
   startimgage:<img src="dataimage/专题图1.gif">
   ArcIMSParam.js文件包含大量的配置参数,可以通过调整里面的参数改变Viewer的外观,例如OverView窗口的位置,是否显示层信息,是否显示图例,是否显示指北针,指北针的形状等等。HTML页面包含了页面元素在浏览器中显示的信息。JavaScript目录下是HTML Viewer的JavaScript类库。类库中包含了大量的JavaScript函数,HTML Viewer就是通过这些函数和后台服务器进行交互的。
  
   2、 开发步骤
   (1)用一种网页开发工具在Viewer.htm中加一个新框架FieldlistFrame。如下图所示:
  
   startimgage:<img src="dataimage/专题图2.gif">
   在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=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)最终效果如下:
   startimgage:<img src="dataimage/专题图3.gif">
   3.总结:
   HTML Viewer通过sendMapXML()函数向空间服务器发出请求,在此过程中会触发writeXML()和sendToServer()函数。开发的关键就是以writeXML()为线索,找出要客户化的地图元素,用程序生成相应的ArcXML代码,然后调用sendMapXML()函数向服务器发请求。返回的ArcXML由processXML()函数处理,用户不用更改此函数,就可以得到查询结果。
喜欢0 评分0
caojianjun
路人甲
路人甲
  • 注册日期2003-10-13
  • 发帖数46
  • QQ
  • 铜币148枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2003-10-17 22:14

举报 回复(0) 喜欢(0)     评分
游客

返回顶部