ArcIMS初级教程(7)转载
时间:2006-01-11 来源:shadow-lx
第七章定制AXL文件
章节概述
AXL是客户端浏览器与ArcIMS空间服务器之间进行通讯的语言。AXL语言是一种XML语言,有关其细节可以查看本书的附录——AXL语言参考手册。通过Author创建的AXL文件只是一些简单的编码。而要想对地图内容进行定制,可以对AXL文件进行编辑,使之提供更多的内容。通过定制,AXL文件可以增加对地图投影、AciInfo Grids、SQL查询、ture type字体符号以及复杂专题图显示等的支持。
XML(eXtensible Markup Language)可扩展标识语
XML是一种语言,就象罗曼语是一种口语一样。人们一般不直接使用XML语言,而是使用XML语言的某种特殊类型的语支。在ArcIMS中,这一特殊的语支就是AXL语言——ArcIMS Extensible Language。
XML语言与HTML语言有很多相似之处。它们都使用<>号包围的标签来定义功能,有些标签需嵌套在别的标签里面,每个标签又有一些属性来定义其作用。XML语言并不是象HTML那样创建文件以显示文本和图象的。实际上,XML语言允许用户创建自己的一套标签来建立某些功能。XML解析器是一个用来阅读、解析XML请求,并实现本月应操作的软件。
XML语言近年来在网站开发界受到了极大的欢迎。这是由于XML提供了强大的自定义标签的功能,能够显示在许多HTML中太复杂甚至不可能实现的功能。它已越来越成为一种行业的标准。
HTML与XML对比
HTML与XML之间最大的不同在于使用标签的灵活性。HTML已经建立了上百个标签集允许用户用来显示图形和文本。通过JavaScript使用动态HTML语言还可以建立更加复杂的网页。尽管如此,HTML语言本身还是具有很大限制性,不能满足对一些新功能的需求。网站程序员不能自己定义标签,而只能使用由国际万维网协会承认的标准标签,或在某一浏览器软件中使用该软件自己定义的标签。当然,象Internet Explorer和Netscape Navigator这样的浏览器可以有它们自己定义的标签,但正是这一点直接威胁到了HTML语言的通用性——对其它各种类型浏览器识别标签并进行显示的能力。而XML语言正可以解决这些问题。
有了XML语言,程序员可以使用一种简单易懂的层次结构,定义一系列标签及其功能。由于XML语言并不是在浏览器中解释的,所以不受浏览器类型的限制。因此可以说,HTML语言定义的是如何显示内容而XML语言定义的是内容本身。尽管这种精确的定义不可避免地会出现一些重复,但仍可很好地用未定义以地图为中心的AXL。
现在,互联网有许多关于XML语言的资源及其作用的讨论。还有一本专门讨论XML语言开发的杂志。
ArcXML——AXL
就象意大利语是罗曼语中的一种一样,AXL是专门用在ArcIMS中的一种XML语言。我们前面所见的AXL文件,是Author的输出,并作为MapService的 AXL文件。MapService AXL文件描述了AXL文件和地图服务之间的关系——每个地图服务都指向了一个AXL文件。与其文件名相异的另一个AXL文件是default.axl。default.axl是在Designer中创建Java浏览器的网页时的最终输出,我们在第九章中还会详细讲到。
MapService AXL文件是服务器用来为客户请求定义图层和专题显示的。但是AXL文件本身要比MapService AXL和default.axl文件要深入得多。客户端请求本身也是一种交给服务器解析的AXL代码。此外,所有的服务器产生的响应也是AXL文件格式,并由客户端的脚本进行解析。
AXL手册
本书附录中提供了有关所有AXL标签的AXL手册。在查看这本手册时应注意理解,有些标签只能在MapService AXL或ArcIMS体系中其它组件中使用,而有些标签则是通用的。就象HTML一样,标签也包含了许多属性,正确地理解和使用这些属性将有助于产生预期的效果。
AXL文件示例
从上面这个例子中可以看出,AXL语言的层次结构以及它和HTML的一些相似和不同之处。与HTML不同的是,AXL要求每个标签都必须以</>结束。有些标签如<MAPUNITS……./>以缩略的形式直接包含了头标识和尾标识。此外,XML还要求标签中包含的属性值必须用双引号并且只能用小写,而在HTML中则是可选的并且通常加以忽略。与HTML一样的是,XML采用缩进式书写规范,是为了方便人工阅读。
节标签
MapService AXL文件的最前面的两个标签(<?xml>和<ARCXML>)定义了所使用的XML和AXL的版本。这些标签被称为头标签或节标签,与XML有密切的关系。所有的节标签都有子标签,是一组更具联系的信息的分界线。可以把它想象成三明治的面包片——它们为里面的夹心提供了“容器”。
CONFIG标签是类标签,里面包含了其它一些标签如MAP标签。MAP标签是任何MapService AXL文件中的事务部分。它里面所包含的一些次一级标签定义了地图的开始范围、地图单位、工作空间以及每个图层的专题显示信息等等。
PROPERTIES标签是用来确定地图服务的一些一般属性的,如投影等。WORKSPACE标签则指明了Shapefiles和影像文件所在文件夹的位置。如果数据被移动到新的位置,必须在AXL文件中人为地改动数据路径,以保证能够准确地找到所要的文件。
上面显示的最后一个标签——LAYER标签包含了在Author中定义的所有有关专题显示的信息,包括注记与组合专题图等。
Renderer标签
ArcIMS中定义了一系列renderer标签,用来确定在客户端如何显示地图,这些标签都包含在LAYER节标签里面。
SIMPLERENDERER标签是用来定义图层的单一符号分类显示的。在上例中,SIMPLERENDERER定义一个多边形图层以橘黄色实体填充显示。GROUPRENDERER标签用来定义以两种或两种以上专题图进行显示,它是在出现两种或多种符号时使用的。在前面的练习中,我们曾经用GROUPRENDERER标签定义了州际公路——第一个层用粗的黑线,而第二个层用SIMPLERENDERER定义一条细的红色的破则线,这两个层叠加在一起就可以用来代表高速公路了。
SCALEDEPENDENTRENDERER标签允许AXL程序员在不同的比例尺下来显示不同的专题图,VALUEMAPRENDERER标签根据属性值或范围显示专题图,SIMPLELABELRENDERER标签则可以用来在地图上对要素进行标注。
Symbol标签
前面讲到的每个renderer标签都包含了一个或多个Symbol标签,用来定义专题符号的图形显示。Symbol标签包括有SIMPLEMARKERSYMBOL、SIMPLELINESYMBOL和SIMPLEFILLSYMBOL。Symbol标签定义了如何根据标签中的属值显示符号。这些属性包括颜色、大小、透明度等等。其中,antialiasing是一个值,它可以用来定义如何在背景上显示符号的边缘。
Acetate Layer
Acetate Layer这种图层只能通过直接的定制增加到AXL文件中的图层。Acetate Layer可以使得那些自定义的文本、符号和指北针等元素总是出现在地图之上。用户在使用漫游,缩放等操作时,Acetate Layer并不跟着变化,而总是出现在视图窗口中同样的位置。Acetate Layer只支持HTML浏览器。
Author中不具备的功能
接下来我们将要讲述的是在Author中不能实现,只能通过人工修改AXL文件才能实现的一些功能。例如,有好几种专题图在Author中就不可用。在下面的练习中,将使用CALLOUT SYMBDL和SHIELDSYMBOL专题图及组合专题图,创建如上图效果的地图。
请注意:尽管在Author中可以使用组合专题图,但要指定不同要素以不同的符号显示,只能通过定制完成。
地图投影
地图投影是为了在平面上显示地球表面的所作的一种平面转换。换句话说,它们用二维的形式表达了地表的三维形态。只要经过了投影,空间的某些属性如形状、面积、距离或方向就会发生一定的变形。没有变形的投影是找不到的。但是,可以选择一种能够使某个空间属性的变形最小的投影(通常是以别的属性的更大的变形为代价的)。常用的投影类型有:兰伯特正切圆锥投影、墨卡托投影和艾伯特投影等。
投影系统定义了坐标系统。同一个地方的不同投影类型的数据是不能对准的,有时候偏移会很大。因此,为了使地图显示更富有意义,一般要求所有的地图服务和所有的图层都采用相同的投影。
ArcIMS支持多种投影——与ArcView 3.2支持的投影类型相同,包括自定义投影——应该足以满足GIS的要求。.prj文件是具有一定结构的文本文件,描述了使用的投影类型。ArcView 3.2是ArcView中首次采用了在对Shapefiles进行投影转换时创建.prj文件的版本。ArcIMS使用.prj文件来为地图服务创建一个通用的投影。如果.prj文件不存在,数据仍然能够进行投影,但是,必须人为地指定输入的投影类型。
投影
在ArcIMS中,投影是在服务器端通过MapService AXL中的三个标签来实现的,这三个标签是:FEATURECOORDSYS,FILTERCOORDSYS和COORDSYS。
FEATURECOORDSYS定义整个地图服务显示的投影类型。
FILTERCOORDSYS定义了客户端请求的投影类型。目前,ArcIMS中还不支持客户对投影的请求。所以,FILTERCOORDSYS与MapService AXL中的FEATURECOORDSYS定义了相同的投影类型。
COORDSYS定义了地图服务中输入的投影类型。只有当.prj 文件不存在时才需要用到它。
课程材料中包含了一个特殊的文本文件pedef.h,提供了各种投影的ID号,ID号用于上述三个标签中,用以定义使用的投影类型。尽管pedef.h文件很大,但它列出了常用地图投影且经过了精心组织。
查询和建立表关联
通过属性表或关联表查询属性数据是GIS的一个基本功能。结构化查询语言(Structured Query Language,简称SQL)语句可以在QUERY标签中定义。其中对关联表的查询是可选的。任何两个数据库表都可以通过一个公共字段建立关联。在对关联表进行查询时,只能对相似的表进行查询。例如,当对某个Shapefile的dbf进行查询时,可关联的表只能是另一个dbf。
影像
尽管通过Author的目录表界面中可以直接访问包括TIFF文件在内的几类影像图形类型,其它许多影像只能通过人工的方法添加进去。IMAGEWORKSPACE标签(隶属于WORKSPACE标签)就是用来指向影像文件存在的文件夹的,与SHAPEWORKSPACE相似。每个影像工作空间都有一个唯一的名字。每个影像都是以一个图层的形式存在于MapService AXL中的。LAYER标签中的DATASET标签引用影像图层的名字及其工作空间。
一些遥感图像处理软件中的图像都支持多波段。每个波段都是具有某一特殊的波长的光谱,可以单独引用或作为一个ArcView影像目录被调用。
注意,影像数据如果没有合适的地理参考和投影是不能很好地与经过投影的矢量数据匹配的。
编辑AXL时的出错处理
在定制AXL文件的过程中,不可避免会出现输入错误。为了快速地找出错误,可以使用ArcIMS Administrator的调试窗口。要打开调试窗口,请参照练习中的第四步。
练习7 自定义AXL文件