使用ArcXML扩展ArcIMS MapServices

使用ArcXML扩展ArcIMS MapServices

熟悉使用 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's Reference Guide 》。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值