arcims 第2讲

这篇文章假设读者熟悉使用ArcIMS Manager工具(包括三个部分:Author、Administrator和 Designer)创建一个简单站点的过程,现在希望使用ArcXML实现更多的功能或改变地图的显示——ArcXML是ArcIMS用来在各组件之间进行通信的文件格式。这篇文章除了详细介绍如何通过在地图配置文件中添加ArcXML元素扩展ArcIMS功能外,还概括介绍了ArcXML的结构和语法。在ArcUser Online站点上提供了三个循序渐进的教学例子。请登录站点http://www.esri.com/arcuser下载教学例子和数据。


当用ArcIMS程序创建基本的ArcIMS 站点时,Author把用户选择的数据(例如:Shapefile、coverage、ArcSDE层、图象等)整理成地图的图层;设置显示比例尺,要素表现特性,和地理编码;并输出一个用ArcXML写的地图配置文件。Administrator用这个地图配置文件生成一个Mapservice。ArcIMS 空间服务器解析用户请求并进行相应的处理,根据地图配置文件中的定义把这些数据组织在一起发送给客户端。


ArcXML源于XML和HTML有相似的地方,是SGML的子集;它是一种发展了的标记语言;描述结构数据的内容而不是数据的表现。 ArcXML文件是文本文件,以.axl结尾,可以编辑。ArcXML定义了MapService的内容以及从客户端发出的请求,ArcIMS响应,各业务逻辑层和服务器之间的通信的内容。通过在地图配置文件里手工添加元素和元素的属性,可以实现一些不能通过Author实现的功能,例如更多的表现方法和标注选项,数据源,表联接以及其他的功能。


ArcXML结构和语法
所有的ArcXML语句由元素和属性组成,这些元素和属性以等级结构组织在一起。在这种等级结构下,元素被分为父元素和子元素,子元素嵌在父元素的里面。多数的元素都有一个或多个由名称/值对组成的属性。一些ArcXML元素要求必须指定一些属性。如果在地图配置文件里没有指定元素的属性,系统会使用缺省属性。


当写元素和属性时,必须严格遵守ArcXML语法,否则不能创建Mapservice。元素必须被大写,并象HTML一样用小于(<)大于(>)号封闭。属性必须小写,属性值必须用双引号括起来。一次只能定义一个属性值。


ArcXML 程序员参考指南
元素和属性的用法可以参考 “ArcIMS程序员参考手册”。这本手册以PDF格式随ArcIMS发送,是用户了解和学习ArcXML元素和属性的非常有帮助的资料。它列出了所有的ArcXML元素以及与之相关的属性的详细描述。每一个元素的必要属性用粗体表示。所有的属性都列出了定义的值或值的类型。


例如,对元素HASHLINESYMBOL的描述包括有效定义的值(如,type属性的foreground 和 background值)和允许的值的类型(如,color 属性值从0,0,0 到 255,255,255)。属性默认值用方括号括起来。元素介绍开头的地方都有指向父元素和子元素的超联接。必要的子元素用粗体表示。另外,该手册还包含了一些如何使用ArcXML元素和属性的例子。在ArcOnline站点上也可以得到“ArcIMS程序员参考手册”。


给地图配置文件中添加要素
可以使用简单的文本编辑器或XML编辑器编辑地图配置文件,例如微软的Wordpad、notepad或Altova公司的XMLSpy或IBM的Xeena(如在中文环境下,则需要支持unicode的文本编辑器,如emeditor)。除非在Administrator里刷新了Mapservice,对地图配置文件的修改不能立即显示在客户端。刷新MapService会使地图配置文件被重新读入,并把所做的改变反映在MapService里面。


编辑地图配置文件时,必须严格遵守ArcXML语法,地图配置中的任何错误都会导致Mapservice不能被刷新,并且会导致Mapservice从Administrator中被删除。消息控制台可以从Author或者Administrator中的Help -> Message Console菜单进入。消息控制台是用来显示ArcIMS产生的错误和警告。下面的部分用来描述怎样通过使用符号化、标注和图形元素来改变地图的显示或者查询数据和连接表。


改变要素符号化
有三个ArcXML元素用来表示如何符号化点线面数据。要素数据用下列的元素表示:


SIMPLERENDERER使用同样的符号画所有的要素,
VALUEMAPRENDERE使用表里的一个字段画要素,
SCALEDEPENDENTRENDERER仅仅画一个特定比例尺范围里的要素。
一层里的多个表现方法元素必须包含在一个GROUPRENDERER里。每一个表现方法元素都包含了一个子元素,用来定义要素如何显示。


有多种符号元素,符号元素对要被表现的要素类型来说是特定的,例如; SIMPLEMARKERSYMBOL只能用于点要素,虽然HASHLINESYMBOL元素在Author里可以用来表示铁路,但是一些属性例如宽度和间隔可以在地图配置文件中修改,这些改变可以覆盖它的默认属性,从而重新定义如何画HASHLINESYMBOL元素。


要素的符号化也能基于一个字段。VALUEMAPRENDERER元素能够根据一个字段的值为一层要素分类,根据这个分类,它可以使用连续的或者唯一的符号表现数据。


EXACT、RANGE、和OTHER这三个和VALUEMAPRENDERER一起使用的子元素指定了要被符号化的值。使用EXACT元素用一个特定的值表现要素,然而使用RANGE时使用一个范围来表现要素。OTHER元素用来表现不包含一个特定值的要素,例如一个特定的TRUE TYPE符号用来表示首府城市,其他的城市都用一个简单的点符号表示。


有些符号元素,例如GRADIENTFILLSYMBOL 和 TRUETYPEMARKERSYMBOL元素在Author界面上无法定义,只能使用ArcXML定义。通过ArcXML可以使用ESRI定义的许多点符号。


标注要素
标注属性用两个标注元素来定义(SIMPLELABELRENDERER和VALUEMAPLABELRENDERER)前者为所有的要素设置了同样的标注属性,后者根据一个数据库里的值定义标注属性。Author能够设置层的标注属性,例如标注子段,标注位置和字体特征。在层属性对话框中只能指定一个字段。Author也能够为标注元素添加子元素,例如为文本标注添加TEXTSYMBOL和为高速公路标注添加SHIELDSYMBOL。


手工编辑地图配置文件为标注提供了很大的灵活性。例如:使用外边框和箭头标注要素的CALLOUTMARKERSYMBOL元素有一些包括箭头的长度在内的定义字体和外边框的符号的属性。


表现方法元素属性能改变标注出现的位置和频率。 当使用SIMPLELABELRENDERER元素时允许使用多个字段做标注。以同样的过程,使用VALUEMAPLABELRENDERER元素的labelfield属性连接标注。


点要素的labelpriorities属性用于点要素的标注定位,labelbufferratio属性在每一个标注周围建一个缓冲区,这样其他标注就不能放置在离它一定距离之内的范围。Howmanylabels属性控制了要画的标注的方法——是一个要素图形一个还是要素每个部分都标,或一个要素名称标一个。


使用图形元素
把LAYER的type属性设置为acetate可以在地图上面加一个图形层。Acetate层在数据层上又添加了一个图形层,它只能用于HTML Viewer。缺省情况下,Acetate层里的OBJECT子元素有:指北针,比例尺和版权文字。通过往地图配置文件里添加新的LAYER元素可以往acetate层添加新的OBJECT对象。


每一个新的LAYER元素的type属性必须设置为acetate。在LAYER元素里有一个或多个OBJECT子元素,每个OBJECT元素都有一个units属性,其值可以是pixel或database。如果units属性被设置成pixel,对象将使用以地图左下角坐标为原点的像素坐标。如果units属性设置为database,对象将使用地图服务的地图坐标。


除了指北针和比例尺,一些点线面图形或文本都可以添加到acetate层,并允许把一些由文字和徽标组成的标题添加到新的LAYER元素里。通过往POINT元素里添加RASTERMARKERSYMBOL元素可以添加图像。POLYGON元素可以包含SIMPLEPOLYGONSYMBOL元素,通过把它的overlap属性设置为false可以防止标注压盖acetate层的边框。还有一些对象,如复制地图坐标网格线的LINE对象元素,也可以添加到地图显示中来。


查询数据和联接表
基于空间条件或关系数据库查询数据是GIS的基本功能。空间查询和数据库表查询能够通过使用SPATIALQUERY元素实现。这个元素根据空间查询或表查询或两者结合查询的结果在地图上画要素。SPATIALQUERY还能实现一些简单的表联接。


表查询的语句放在SPATIALQUERY元素的where属性里,格式和SQL语句里的WHERE子句一样,所有满足where属性条件的要素将被画在地图上。在要用到符号的查询语句里,如大于小于号,必须在where属性里使用这些符号的代替值。


空间过滤器定义了空间查询的范围。范围可以是一个矩形,点,多边形或缓冲区。所有的在空间过滤器里的要素都将被画在地图上。SPATIALFILTER元素用在SPATIALQUERY里面,一般定义为使用矩形空间过滤的ENVELOPE元素或定义为使用顶点定义的多边形。无论哪一种都指定了空间过滤器的范围。SPATIALFILTER元素的relation属性指定了空间过滤器是个围绕在图形周围的矩形(envelope intersection)还是就是图形本身的区域(area intersection)。


SPATIALQUERY元素还能够用来联接dBASE (DBF)文件和shapefiles或用来联接ArcSDE的表。Shapefile的层只能和同一目录下的DBF文件相连,ArcSDE的表只能和同一DBMS下的表相连。在SPATIALQUERY元素里要指定主表(TO 表),字段名,连接表(join 表),字段名以及联接类型。Exact联接适合于一对一或多对一关系。Scan联接对一对多或多对多最有效。



结论
通过了解ArcXML的结构,元素和属性,我们知道ArcIMS的功能可以通过修改地图配置文件里的元素来进行扩展。ArcUser站点提供了三个用来展示如何手工修改地图配置文件的教学例子。请登录www.esri.com/arcuser下载教学例子以及实验数据。要了解更多的有关ArcXML和地图配置文件的内容请参考《ArcXML Programmer&acute;s Reference Guide》。