• arcims 讲座四:ArcIMS(HTML Viewer)定制开发探讨


     (以水情监测信息系统原型开发为例) 一、ArcIMS体系结构简介
    ArcIMS(Internet Map Server)是ESRI最新推出的第二代互联网上地理信息系统平台,其结构经过特别设计用来满足在Internet上提供地理数据和服务的需要。
    多层结构
    ArcIMS 的多层结构由展示层(presentation Tier),逻辑事务层(Business Logic Tier)和数据存储层(Data Storage Tier)组成。展示层是指ArcIMS Viewers。逻辑事务层由Web Server,ArcIMS应用服务器和ArcIMS应用服务器连接器及ArcIMS空间服务器组成。数据存储层指数据源。各个不同层之间通过 ArcXML进行通讯。ArcXML是ArcIMS版本的XML,即可扩展的标记语言(eXtensible Markup Language)。
    二、ArcIMS客户:Viewers介绍
    ArcIMS Viewers可以全部由HTML组成或包含Java Applets。ArcIMS通过Designer可以生成一种HTML/DHTML Viewer和两种Java Viewer,并在实例中包含了使用ColdFusion和ActiveX连接器的HTML Viewer。ArcIMS还包含一种独立运行的Java Viewer叫ArcExplorer 3。这些viewer可以通过HTML和JavaScript进行修改。
    1、HTML/DHTML Viewer
    HTML Viewer由HTML,DHTML和JavaScript写成。在HTML Viewer里同时只能支持一个影像地图服务。当用户点击地图或工具后,Viewer生成一个请求并通过Servlet Connector将请求发送到ArcIMS的空间服务器端。当响应返回时,客户端解析响应结果并完成显示操作。HTML Viewer要求4.0或更高版本的浏览器。通过定制Viewer,可以支持低版本的浏览器。
    2、使用ColdFusion和ActiveX连接器的Viewer
    ColdFusion 和ActiveX Viewer同样也是HTML/DHTML机制。他们与HTML Viewer的不同之处在于所有的处理过程都在服务器端完成。请求通过第三方应用服务器生成,响应以HTML页的格式动态返回。这类viewer不需要自己生成请求或解析响应,因此是最瘦的客户端。对于最终用户来说,这两类viewer外观相似,功能相仿,但他们处理请求和响应的方式完全不同。 ArcIMS提供了使用ColdFusion和ActiveX连接器的viewer的例子。
    3、Java Viewers
    与HTML/DHTML Viewer相比,Java Viewer是胖客户端。因为他同时支持影像和矢量地图服务。多个地图服务的数据可以与本地数据一起显示在一个Java Viewer里。Java Viewer通过Java 2 Applet来显示地图和处理请求。
    Java Viewer支持矢量数据流和更丰富的客户端的功能。数据临时下载到客户机的高速缓存中。除非需要下载新的数据,其他所有的请求都由客户机来完成当viewer关闭时,临时缓存被清空。
    ArcIMS支持两种Java Viewers:可定制的Java Viewer和标准的Java Viewer。它们具有相似的功能。
    可定制的Java Viewer通过JavaScript与applets通讯。通过Viewer的对象模型接口(Object Model API)可以定制viewer的功能。同时,可定制的Java Viewer只支持Internet Explorer 4.0和5.0。
    标准的Java Viewer不使用JavaScript。所有的工具和功能都是预先设定的,不能通过对象模型接口(Object Model API)进行定制。标准的Java Viewer同时支持Netscape和Internet Explorer 4.0及更高版本。
    ArcIMS还包含一个独立运行的、不需要标准浏览器的Viewer,ArcExplorer 3。
    Java Viewer需要下载两部分内容。一是使用Java 2 Applet要求的Java运行环境。二是一次性下载的ArcIMS viewer的部件,applet通过这些部件与服务器进行通讯。
    三、客户Viewers的定制开发
    支持定制开发ArcIMS的客户端有HTML VIEWER与JAVA VIEWER其中HTML VIEWER根据应用服务器连接类型可分为:Servlet connector、ActiveX connector、ColdFusion connector三种。针对以上四种类型的客户都有相应的定制开发方法,ESRI也提供了相应的文挡,本文将重点介绍Servlet connector HTML VIEWER的定制开发方法。
    HTML VIEWER由HTML、DHTML及JavaScript组成,因此对HTML、DHTML及JavaScript的熟悉是进行深度定制开发的前提与基础。此外,ArcXML是ArcIMS各部件间用来通讯的语言,对它有一定的了解是十分必要的,而且了解越深,收益越大;最后,如果要操作外部数据库的话,对JSP(JAVA SERVER PAGE)或ASP(ACTIVE SERVER PAGE)以及SQL应有所掌握,掌握越深,见效越快。
    HTML 是WEB站点设计使用与支持最为广泛的语言,而且相当简单,只需一两天就能够学会,主要用来描述页面的表现形式,HTML周期性地标准化,随着浏览器开发商不断推出新的标志,属性和属性值,这个语言在不断扩大,版本不断翻新。由于Netscape和Microsoft占有了浏览器市场的最大份额,他们领导了HTML新内容的定义。由于这些补充不是正式HTML语言的一部分,他们称其为扩展。大多数扩展最终都会集成到下一个HTML正式版本中。 HTML3.2的扩展中有个LAYER标志,使WEB页面可以放上多个重叠文档层,这个LAYER标志对于ArcIMS的HTML VIEWER也是相当重要的。此外,FRAME标志与TABLE标志使HTML VIEWER的布局更为漂亮。
    JavaScript是个脚本编程语言,支持Web应用程序的客户机和服务器方构件的开发。在客户机中,它可用于编写Web浏览器在Web页面上下文中执行的程序;在服务器端,它可用于编写处理Web浏览器提交的信息并相应地更新浏览器显示的Web服务器程序。ARCIMS的HTML VIEWER缺省包含一个JavaScript函数库,其中设计了几百个函数和几百个全局变量,是进行定制开发的核心。这些函数按功能进行了分组,以 *.js形式保存。当然,你可以改写或补充它,这也是进行深度定制开发所必经的过程,有一个组织良好的Javascript函数库,决定了开发的效率与质量。本文的重点与创新也在于JavaScript函数库的设计。下面的代码片段展示了如何创建自己的Javascript函数库:
    // debugflag.js
    //===================================================================
    //NOTES: 2/24/2001
    debugflag.js中的全局变量和函数主要用来调试跟踪其它Javascript函数库中的函数及全局变量,因此其它Javascript函数库中的函数要做相应的修改,修改可以手工操作,也可以程序方式批量操作。
    //====================================================================== <br />//用于调试的开关变量设计
    var aimscommon = false; // debug flag for aimsCommon.js
    var aimscustom = false; // debug flag for aimsCustom.js
    var aimsmap = false; // debug flag for aimsMap.js
    var aimslayers = false; // debug flag for aimsLayers.js
    var aimsdhtml = false; // debug flag for aimsDHTML.js
    var aimstracker = false; // debug flag for aimsTracker.js
    var aimsclick = false; // debug flag for aimsClick.js
    var aimsselect = false; // debug flag for aimsSelect.js
    var aimsidentify = false; // debug flag for aimsIdentify.js
    var aimslegend = false; // debug flag for aimsLegend.js
    var call_display ;
    var current_loc ;
    var first_debug=false;
    var alert_display ;
    //用于以信息列表框方式显示调试信息,其中dflag为调试开关变量,func_name为被调试
    函数名,file_name为被调试函数所在的js文件名
    function debugfun(dflag,func_name,file_name) {
    if(dflag) {
    //call_display,current_loc,first_debug是上面所定义的全局变量,TopFrame是HTML叶面中一框窗名
    call_display = call_display+"||"+current_loc + "|" + file_name+":"+func_name+"nr";
    if(first_debug) {
    if(call_display.length > 4000) {
    parent.TopFrame.document.writeln(call_display);
    call_display = "";
    first_debug = false;
    }
    }else{
    parent.TopFrame.document.writeln(call_display);
    call_display = "";
    }
    }

    //用于以弹出对话框方式显示调试信息,其中dflag为调试开关变量,func_name为被调试
    函数名,file_name为被调试函数所在的js文件名,alert_str为所要显示的调试信息
    function debugfun_alert_fun(dflag,func_name,file_name,alert_str) {
    if(dflag){
    //alert_display,current_loc是上面所定义的全局变量,MapFrame是HTML叶面中一框窗名
    alert_display = "||"+parent.MapFrame.current_loc + "|" +
    file_name+":"+func_name+"nr"+alert_str;
    alert(alert_display);
    }
    }

    面的代码片段展示了其它Javascript函数库中的函数要做相应的修改:
    // aimsDHTML.js
    // move layer to x,y
    //下面这个函数是aimsDHTML.js中的函数,具有图层位置移动功能
    function moveLayer(name, x, y) {
    //用于调试的语句,设置全局变量current_loc
    current_loc = current_loc + ":moveLayer";
    //用于调试的语句,调用debugflag.js模块中的调试函数debugfun
    debugfun(aimsdhtml,"moveLayer(name=" + name + ",x=" + x + ",y=" + y,"aimsDHML.js");
    //以上增加的两句用于调试版,在正式版中可以去掉
    var layer = getLayer(name);
    if (isNav4)
    layer.moveTo(x, y);
    //if (document.all) {
    else {
    layer.left = x;
    layer.top = y;
    }
    //用于调试的语句,恢复全局变量current_loc的设置,其中string_rtrim是aimsCommon.js
    中的一个函数
    current_loc =string_rtrim(current_loc,":moveLayer");
    //以上增加的一句用于调试版,在正式版中可以去掉 }
    JavaScript 的一个最重要的功能是基于对象(Object-Based)功能的支持,这一点使JavaScript程序的设计更加简单,直观,结构模块化以及代码可复用。但是,JavaScript是个脚本语言,而不是完整的编程语言,它不支持分类,继承,包装和信息隐藏等面向对象编程的基本功能。至于对象编程的详细规范在此不做介绍,如有兴趣,可阅读相关文档。
    ArcXML在不同部件间通讯。ArcXML文件类似于HTML页。但区别在于,HTML用于显示,而ArcXML用来描述内容。如果熟悉HTML及XML,手边有一本ArcXML参考手册或电子文档,使用起来相当简单,在此不再多言。
    JSP或ASP是服务器端的脚本环境,功能接近,开发者可根据系统需求及个人喜好选择其一,至于各自的优缺点及使用方法,在此不做介绍。本文所提到的开发系统原型选择了ASP技术。
    四、示范ArcIMS开发方法的水情监测信息系统原型的目标及需求
    (1)系统建设目标
    从某省水利厅信息管理工作来看,当前的首要任务是在汛期来临之际,对各重要地区的水情进行实时监测和有效管理,为相关决策部门提供实时的水情数据,以确保防汛工作科学有效地展开。
    (2)系统需求
    该系统需实现的功能如下:
    * 浏览器端可对相关地图进行放大、缩小、平移、索引图等功能;
    * 可分图层浏览、显示,并以图上点击、输入监测站名、输入地名、给定范围等多种方式查询监测站信息;
    * 图上监测信息可由客户端选择组合标注;
    * 可进行图形、属性的双向查询;
    * 可动态显示监测数据的统计曲线图和柱状图;
    * 对超过警戒水位的监测站点进行自动报警。
    五、示范ArcIMS开发方法的水情监测信息系统原型的技术路线分析与方案配置
    考虑到全省水文监测站近三百个且分散分布,采用基于Browser/Server分布式计算模式的WebGIS作为应用与开发平台应该是最经济,最合理的。每个水文监测站会定期地将所测数据通过网络传入水利厅的数据库中,因此对属性数据库的网络存取也是本系统的重点,要做到属性数据库与空间数据库,静态数据库与实时数据库的完美整合。
    采用基于Browser/Server分布式计算模式的WebGIS的优点:
    1、客户端维护工作量很少;
    2、有利于研究区域内分散分布的监测站实时数据的集中收集与处理;
    3、操作界面统一且简单,可节省培训成本;
    4、系统的扩展与升级集中在服务器端完成,浏览器可以很快地分享到系统升级带来的高效;
    5、信息高度共享,提高了相关部门协调工作和相互交流的能力。
    ArcIMS是ESRI新一代的基于Web的制图和GIS软件。对于最终用户来说,它提供了一种更为快速、廉价的方式以获取地理信息。从前面章节的介绍中可以看出,ArcIMS是一个理想的WebGIS平台,所以本系统选择它作为水情监测信息的收集与发布平台。
    Web server的性能对于WebGIS应用很关键,特别在并发访问数非常高的情况下,ArcIMS可以支持多种Web服务器,考虑到是一个原型系统,选择了Microsoft的IIS(Internet Information Server)。
    数据库方面,Microsoft的SQL Server是一个价格不贵,适合于中型应用的数据库平台,所以本原型系统选择了它。
    ASP(Active Server Pages)内含于IIS中,与IIS运行于同一进程,能更快,更有效地处理客户请求。ASP提供了更简单,更方便的数据库访问方法,所以,本系统选择了它。
    系统配置如下:
  • 相关阅读:
    Nginx初探
    很详细的Nginx配置说明
    linux环境下Apache+Tomcat集群配置
    Apache+Tomcat集群配置
    apache + tomcat 负载均衡分布式集群配置
    js 如何将dom转换为 图片(base64)
    饥荒猪镇物品 代码
    angular2 图片赋值的时候前面自动加 unsafe:xxx 导致图片信息不显示问题
    angular6、7 兼容ie9、10、11
    @angular/cli (angular脚手架) 如何降级
  • 原文地址:https://www.cnblogs.com/googlegis/p/2979128.html
Copyright © 2020-2023  润新知