ArcIMS初级教程(9)转载
时间:2006-01-11 来源:shadow-lx
第九章定制Java浏览器
章节概述
本章将从多个方面来分析Java浏览器的优点。通过前面的学习我们知道,HTML很适合于希望快速创建地图的瘦客户端,但是它只适用于影像数据流,而不是真正的地理数据。Java浏览器的优点就在于它们不仅仅支持影像地图。
Java浏览器提供了一种独特而又强大的要素数据发布方案,而且和HTML浏览器一样,也可以使用JavaScript和HTML编程来定制。你不仅可以通过Java标准模板来快速地创建标准网站界面,而且还可以定制自己的网站。
要了解Java浏览器的强大的功能,必须先搞清楚模板中几个关键的HTML文件和JavaScript文件之间的关系。为此,我们将介绍另一个AXL文件default.axl,以及如何使用这个文件来标准化你的网站。你还将学习如何利用applets来实现ArcIMS功能。此外,我们还将详细地讲述Java浏览器的文件结构及其框架布局。最后,你将学习一些Java浏览器对象模型的基础知识,这些模型是如何起作用的,以及如何交互地使用ArcIMS的Java applets。
Java浏览器概述
Java编程语言被誉为是助长了Internet增长的催化剂。Sun Microsystems公司开发的这种语言能够在包括Windows和UNIX在内的任何平台上进行编程。由于它考虑到了Internet的复杂性,就增加了程序员在许多不同的应用领域中开发跨平台的Java程序的能力。
ArcIMS吸取了Java语言的优点,为网站程序员提供了一个简单实用的创建基于Java的Internet网站的方法。在Designer程序向导中,可以选择创建HTML网站或Java网站。当你选择了创建一个Java网站时,你可以从Java Standard和Java Custom两种模板中选择一种。
Java浏览器被认为是一种“胖”客户端。简言之,Java浏览器生成地图的速度比HTML网站要慢。理由很简单,几乎所有的地图交互和处理操作都在客户端机器进行,而不是在服务器端机器上进行的。服务器把Java Applets发送到客户端浏览器,终端用户就是通过这些Applets与服务器进行交互的。
Java Custom网站还要求客户端浏览器能够使用脚本语言与Java 2 applets进行通讯。目前Netscape Navigator(4.5版本)不支持这一功能。此外,客户端机器还要求安装Java Runtime Environment。
Java浏览器的优点
ArcIMS使得Internet GIS又向前推进了一大步。ArcIMS的典型特征是进行要素数据流的能力。换句话说,客户可以在Java站点之间传输矢量要素数据。例如,客户可以接收一幅包含了几个图层的地图并进行修改,然后把修改过的地图发送给另一个客户共享。这样,GIS用户就可以在局域网内互相交流数据,并且可以使用这些数据进行叠加、数据处理和GIS分析等操作。
由于Java浏览器依赖于服务器端对数据进行处理,所以Java网站可以最大地减小对服务器发送的请求数,从而大大地减轻了向服务器传送数据的压力。
Java浏览器网站的另一个优点是,它能够在同一个浏览器中合成多个地图服务。例如,你可以在你的网站上包含一个加拿大的影像地图服务和一个美国的要素地图服务,而两者却毫不冲突。在这一点上,HTML网站就只能使用一个影像地图服务。
Java网页很容易定制,方法与HTML网站基本一样。你可以运用你的HTML编程技巧按照需要改变某些标签和参数,也可以通过修改Designer中创建的JavaScript参数文件来改变页面显示。此外,你还可以通过与地图Applets本身打交道来改变Java网页,可以使用Java Applet API生成站点请求。通过后面的练习你就会知道,在Java浏览器中很容易就把API请求插入工具中,然后用该工具来与网站通讯。
Java Custom浏览器
Java Custom浏览器为网站程序员定制网站提供了最大的灵活性。原始的Java Custom网站是通过Designer创建的。Designer输出的一些文件构成了Java网站的基础。这些文件中包含了用来生成每一网页组件以及与地图applet交互的HTML页面,而这些页面多数都包含了可以修改的嵌入式JavaScript代码。此外,这些文件中还包含了可供定制的JavaScript文件,用户可以添加或删减框架、改变工具、颜色或专题类型。
Java浏览器还将创建一些applets发送到网页浏览器中。这些applets提供了网站的功能,并且被发送到ArcIMS体系结构中的客户端。地图的交互操作都在客户端机器中进行处理的。因此,Java 浏览器模板能够创建功能更大、速度更快的地图网站。在Java Custom浏览器中,ArcIMS创建了四个applets:地图applet(IMSMap)、内容表applet、概略图applet和比例尺applet。
Java Custom站点一般被划分成许多框架,每个框架包含网站的一个重要的功能。系统默认的框架数是八个。后面我们将学到如何移动、删除框架或改变它们的的大小。
Java Custom浏览器的HTML文件
在使用Designer程序设计完网站后,Java Custom浏览器将生成一些HTML文件。尽管这些文件是通过Designer自动生成的,但还是可以通过其中的一些关键的文件来定制你的网站。
每个Java网站会生成default.htm文件。这是用户进入你的网站时打开的第一个HTML文件。其作用是用来检查网站的一些初始条件。在系统默认条件下,它将检查客户端机器上是否安装了Java Runtime Environment。如果检查到没有安装的话,另外一个用来安装该软件的页面将会打开。JRE是Java客户使用要素数据流的必要组件。
Frame.htm文件是用来定义网站框架的数量、内容、大小和位置的。这个文件是允许自定义的,通过修改其中的一些参数可以改变网站的框架布局。
Map.htm文件的主要功能是向客户端浏览器发送并运行Java驶applet。该文件同时指向default.axl文件,并获取地图中的图层信息以及图层的显示方式。
Toolbar.htm定义了各种工具及其在工具栏中的位置。通过编辑这个文件,可以设置工具栏中工具的数量及顺序。Toolbar.htm引用junction.js文件,获取每个工具的功能。
Java Custom浏览器文件
在Designer过程中产生的文件除了HTML文件以外,还有其它一些参数文件及文件夹,以供程序员定制和修改默认的设置。
Default.axl文件与Authoring 中创建的Mapservice地图服务AXL文件有相似。它是用来定义地图显示的参考文件。该参考文件包含站点所用的图层以及各图层的显示方式。Default.js文件是一个JavaScript文件,用来定义designer中创建的功能。这些功能包括地图提示、活动图层、地图显示范围、比例尺单位和查询结果等。这些功能都是通过frame.htm文件合成到网站上去的。
Function.js文件是一个Javascript文件,用来定义工具条上各个工具的功能,例如,可以将某个Java applet赋给某个工具,当用户点击工具时,将执行预设立的请求,这些功能是通过toolbar.html文件加入到网站中去的。
此外,还将在网站中创建另外两个文件夹。其中Images文件夹存储的是工具和背景中使用到的GIF和JPEG文件,如各种工具图标、鼠标形状、背景等。Meta-inf文件夹预留用来让为程序员增加元数据文件供以后使用。
Mapservice AXL文件与default.axl文件对比
default.axl文件的允许网站程序员不经过修改Mapservice AXL文件,就能改变可见图层及其专题显示。此外,网站程序员还可以使用default.axl,维护网站的标准外观,即使在Mapservice AXL文件已被修改了的情况下。
在Authoring过程中对Mapservice AXL文件的任何修改都不会影响default.axl文件。例如,即使你在Mapservice AXL文件中删除了一个图层,default.axl文件也没有丝毫改变(这个图层在default.axl文件中照样被引用)。
当你在要素地图服务中增加或删除任何图层时,你在网站上都看不出这种改变。也就是说,default.axl文件中有关图层及其显示的信息能够覆盖掉Mapservice AXL文件中的相关信息。所以,网站程序员可以在default.axl 文件中编辑图层及专题符号显示标签,以使这些信息总是出现在网站上,而不管地图服务AXL文件中的内容是什么。
那么怎样才能看到在Mapservice且AXL文件中所做的修改呢?你可以人工地编辑default.axl文件作相应的改变,或者也可以重新运行一遍Designer程序,生成一个具备相同的图层数据及显示信息的新的Mapservice AXL文件和新的default.axl文件。
Default.axl文件
Default.axl文件是Designer在创建Java浏览器网站时产生的另一个AXL文件,它提供了另一种改变网站所使用的数据及其专题显示的方法。
Default.axl文件的内容看起来与地图服务AXL文件既有相似之处又又不同之处。对于影像地图服务来说,default.axl文件仅包含了影像地图服务的引用。在Default.axl中只能见到一个图层,用Mapservice名引用的影像图层,对于要素地图服务,在Mapservice职AXL文件中定义的图层在default.axl中也同样地定义。例如,如果在C:\arcIMS\AXL目录中的Mapservice确良AXL文件中有五个多边形图层,在default.axl中也有同样五个多边形图层。
Java Custom浏览器文件结构
打开一个由Designer生成的Java Custom浏览器网站时,文件将依次被打开或访问。打开的顺序是在Designer中建立的,但是你可以根据需要改变这个顺序。
在缺省的情况下,一个典型的Java网站打开的第一个文件是default.axl文件,该文件为站点的入口,常用来检查网站的设置。对于Java网站来说,default.axl文件将检查客户端是否安装了Java Runtime Environment。如果安装了的话,接下来的文件就被打开,否则,一个提示用户安装JRE的网页被打开。
接下来要打开的是Frame.htm文件。这个HTML文件定义了该网站的框架的大小和位置。它同时还引用default.js参数文件,实现网站的功能,包括活动图层、地图提示等。
框架定义好了以后,每个框架所指向的HTML文件将被执行。其中两个主要的框架是地图框架和工具栏框架,分别执行的是map.htm和toolbar.htm文件。Map.htm文件将applets下载到网页浏览器当中,并且到default.axl文件中去查找有关图层及其专题显示信息;toolbar.htm文件则定义了工具栏的外观,并且通过访问function.js参数文件获取每个工具的功能信息。
Java Custom浏览器的框架布局
上图显示了Java Custom浏览器模板的基本框架布局(与真实大小不成比例),图中的数字为框架的大小(单位是pixel),其中MapFrame是主要的地图显示窗口,其大小就是剩余空间的大小。这些框架的大小都可以通过编辑frame.htm来改变,也可以在frame.htm中删除某个框架。
每个框架都与一个相关联的HTML文件,该文件可以调用所需的applets创建框架,或者定义框架所包含的内容。有些框架,如ModeFrame(描述了工具的帮助信息)所需的信息保存在不止一个HTML文件中;而有些框架,如MapFrame,则是从另外一个文件(default.axl)中接收参数信息。这些文件都写在上面的括号中。
对于textFrame框架,主要的HTML框架是bottom.htm,其它一些HTML文件也能够用来填充这个框架,这要视你在网站中加入的功能而定。这些HTML功能包括:AddPoint.htm、EditNotes.htm、MapNotes.htm、OpenProject.htm、SavaMapImage.htm、SavaProject.htm、SetMeasureUnits.htm、Clickxy.htm*、LoadingMapNotes.htm*、SubmitMapNotes*。
注:带*的表示Beta 3以后发布的。
Java Applets
Applet是一种能够作为附件嵌入在网站文件中,并能在支持Java的网页浏览器中执行的Java程序。当首次访问一个使用Java浏览器模板的网站时,Java 浏览器会向客户端浏览器发送许多applets。这样,用户向网站中请求一个功能时,applet就会在客户端机器处理并执行这些请求。
这些applets中,IMSMap是Java模板网站中的一个重要的组件。如果没有IMSMap applet,Java 浏览器网站就不起作用。由于applet是在客户端处理数据的,所以能够节约服务器端资源,提高运行速度,这样就可以支持更快更强大的应用程序,可以添加一些功能如要素流。
要使用IMSMap applet,用户必须能够与它进行交互。客户可以通过工具条或HTML输入窗体与applet进行通讯。例如,如果你要在世界地图上放大到某个国家,可以点击Zoom In 工具。由于在function.js文件中,你已经通过为这个按纽分配了一个IMSMap请求。所以每当客户端用户点击这个按纽时,相应的请求就会被执行。
对于Java Custom浏览器来说,还有其它三个applets也被发送到浏览器当中,即内容表applet(IMStoc),概略地图applet(IMSoverview)和比例尺栏applet(IMSscalebar)。它们都依赖于IMSMap applet。例如,概略图就依赖于地图框架中打开的是什么图层。所以实际上,这三个applets都是IMSMap apple的“附件”。
理解Java浏览器的对象模型
IMSMap apple中使用的元素,例如 applet对象本身(parent.mapFrame.IMSMap)、图层、颜色、专题符号等等。
对象能够实现一定的功能,请求就是用来告诉对象去执行相应的功能的,许多请求包含了提供更加具体信息的参数。例如,漫游请求就需要一个字符串参数,用来描述向那个方向漫游(如“panEast”,“panWest”,“pan south”)。注意即使请求没有参数,也必须用一个空的括号“()”。
对象和请求都有一定的等级体系,越概括的对象越放在上面(如IMSMap apple对象),而越具体的对象越放在下面(如线图层的ValueMapRenderer)。
许多Java Applet API方法都返回一个对象。例如parent.mapFrame.IMSMap.getExtent()就返回一个范围对象。你可以将返回的对象赋给一个变量,然后在后面的语句中调用这个变量。
连锁请求允许将基本的Object.Method语句扩充成包含了许多请求的语句(Object.出息Method.Method.Method etc.)。系统在解析这种语句时每次都执行一个object.method对,返回的对象又被下一个method引用,以此类推。在编写连锁请求语句时,要注意确保每个object.method对返回的对象要正好是下一个method的object,否则程序容易出现错误。
Java Custom浏览器对象模型举例
上面的对象模型图显示了IMSMap applet对象之间的关系。这种图对于了解对象之间的关系,哪些方法可以调用来获取信息以及改变一个对象等来说,是个重要的资源。
上面的例子是一个获取某个特定图层的地图范围(本例中是要获得该图层的最大和最小的x,y坐标)的过程示意。
IMSMap applet对象的等级最高是applet本身,可以通过下列JavaScript代码来访问——parent.mapFrame.IMSMap。从这点出发,你可以调用一些次一级的对象。
该例中,可以用applet对象请求获取某一特定图层。语句parent.mapFrame.IMSMap.getLayer(“CANADA”)调用了地图 applet对象,并且通过它得到一个名叫“canada”的图层。该语句将返回一个图层对象。可以将这个图层对象保存在某个变量中供后面调用。
有了这个图层对象以后,你就可以得到它的范围了。使用getExtent()方法,就可以得到Canada这个图层的范围,并作为一个范围对象返回。最后,你可以从图层对象中获取一些特定信息,本例中可以获得地图范围的最大和最小的x,y坐标(使用getXmin,getYmin,getXmax,getYmax请求)。这些方法返回双精度对象(实数)。这些值也可以保存在变量中供今后使用。
Java浏览器对象模型
ArcIMS的联机帮助对于理解Java浏览器对象模型,对象及对象模型等级,每个对象可以使用的方法等是一个很有用的资源。但是,Beta 3版本的对象模型并没有包含在ArcIMS的联机帮助中。
在线帮助是以功能的分类来组织的。对于每一类功能,帮助窗口的右侧都有详细的描述,并且列出了这一功能可以使用的对象和方法。
练习9:定制Jaca浏览器