ArcIMS 入门讲座

                                                              arc ims 第一讲


当规划一个
ArcIMS的站点时,第一个面临的问题就是“我要选择什么样的客户端?”这是一个很难回答的问题。ESRI提供了三种viewer以供选择。然而,通过选择不同的连接器——ServletActivXColdFusionAppServerLink连接器——可以获得一个不同寻常的客户端。所以,当我们考虑使用什么Viewer时,选择什么样的连接器同样是一个需要仔细考虑的问题。下面的讨论可以帮助ArcIMS的用户,开发商和管理员决定最合适的连接器和Viewer的组合。

 

ArcIMS客户端组件

Viewers决定了ArcIMS站点的功能和外观,决定了提供哪些空间、属性查询工具和显示工具。ArcIMS提供了三种Viewer选择。

 

HTML Viewer

HTML Viewer由一组HTMLJavaScript程序组成。它比任何一种Java Viewer都更轻巧,但不是最瘦的viewerViewer的胖或瘦代表了需要下载到浏览器的数据量。选择HTML Viewer的一个主要原因是它的功能的可扩展性。通过DHTMLJavaScriptXML和其他技术,我们可以对已有的功能进行扩展。不需使用任何ArcIMS连接器,我们仍然可以在HTML Viewer中使用Active Server Pages(ASP)ColdFusionJava技术。但是,HTML Viewer同时只能显示一个Image MapServiceImage MapService将结果以JPGGIFPNG格式发到客户端——与Feature MapService数据流的发送方式不同。

 

Java Viewer

ArcIMS提供两种Java Viewers——Java Standard ViewerJava Custom ViewerJava Viewer通过Java applets提供地图服务和信息查询。Java applet不同于servlet,它运行在客户端,不是服务器端,并且必须下载到客户端。因此,Java客户端比其他的客户端更胖。通过Java viewer浏览网站,用户必须首先下载两个plug-ins

Java Standard Viewer无法定制工具或布局。而Java Custom Viewer可以通过HTMLJavaScript调用applets进行定制。因为Netscape不支持applet编程,因此Java Custom Viewer不能在Netscape浏览器中使用。

所有的Java Viewers都可以支持Image Feature MapServices,并且支持同时使用多个MapServicesFeature MapService使用数据流,因此可以支持客户端的用户交互和分析功能。

 

应用服务器连接器

 

ArcIMS应用服务器连接器连接了Web服务器和ArcIMS应用服务器。其中Servlet连接器——ArcIMS的默认连接器——可以用在ArcIMS的所有三个Viewers中。ColdFusionActiveX连接器通过定制的客户端将各自的语言翻译为ArcXML,用来和ArcIMS的应用服务器进行通讯。AppServerLinkJava应用向ArcIMS应用服务器发送ArcXML请求的通道。它可以用于独立的Java应用,或网站调用的Java applet,或构建网站的JavaServer Pagers(JSP)中。

 

Servlet Connector

Servlet是运行在服务器端的Java应用。如果使用servlet,需要Servlet Engine软件的支持。如果Web Server本身不包含Servlet Engine,则需要第三方的Servlet Engine软件。通过Servlet Connector建立的站点几乎可以支持任何Web ServerViewer的组合。通过ArcIMS Designer可以创建Servlet Connector连接的站点,而且只需要很少的编程工作就可以建立一个基本的,但稳固的站点。

 

ActiveX Connector

通过ActiveX Connector,可以使用ASP进行网站的开发。VBScript HTMLJavaScriptXML可以用来定制网站。ASP在服务器端解释并被以只读的格式传送到浏览器。客户端不需要下载任何东西。ActiveX Connector定制的客户端与HTMLJava Viewer相比是更瘦的客户端。ActiveX Connector需要基于Microsoft Windows的服务器,Web Server必须是Microsoft Internet Information Server(IIS)。客户端可以是任何浏览器,不需要插件支持。ActivX Connector还可以被用在独立的VB应用中,使用方式类似于MapObjects的应用。在开发文档中,ESRI提供示例程序和对象模型图。但是,它的功能没有HTMLJava Viewer那么强大。

 

ColdFusion Connector

ColdFusion Connector非常类似于ActiveX Connector,因为它的代码位于服务器,并被翻译为浏览器可以识别的格式。ColdFusion使用ColdFusion标记语言(CML),一种类似于HTML的可以被ColdFusion服务器解释的标记。该连接器可以用于WindowsUNIX服务器上的大部分Web ServerWeb Server上必须安装ColdFusion服务器。ColdFusion Connector定制的客户端与HTMLJava Viewer相比是更瘦的客户端,也不需要插件的支持。可以通过ColdFusion标签,HTMLJavaScriptXML搭建ColdFusion站点。ESRI提供入门示例帮助建立站点,但功能没有HTMLJava Viewer强大。可以通过安装ColdFusion Studio——ColdFusion的开发环境,使得开发过程变得更容易。

 

AppServerLink

AppServerLink为开发基于JavaArcIMS Viewers提供了更多的选择。通过AppServerLink,可以编写Java独立应用,appletsJSP。搭建Java独立应用的过程很类似于编写MapObjects的应用。象Java版本的ArcExplore一样,Java的独立应用可以使用ArcIMS的数据和信息;还可以应用applets建立类似于Java Viewers的站点,但这种方法提供了更灵活的定制手段。

最后,通过AppServerLink,还可以使用JSP——Java Servlet技术的扩展——建立类似于ASPColdFusion的站点。通过JSPJavaHTMLJavaScriptXML编写全部的代码。服务器将代码解释成浏览器可读的格式。JSP是另外一种不需要任何浏览器插件支持的瘦客户端,但它需要服务器端的Servlet 引擎的支持。但是,因为ArcIMS需要Servlet引擎,因此不需要额外的资源。ESRI提供java类的API,以及应用JavaBeans使用AppServerLink的一些JavaJSP Viewer的示例。

 

如何做出选择

当考虑如何选择连接器和Viewer时,面对的用户和所需的功能是需要重点考虑的两个问题。站点是建立在Intranet还是Internet?用户使用什么浏览器?用户的GIS背景?需要使用什么功能?定制的工作量有多大?

如果要建立一个Intranet站点,Java Viewer可能是个明智的选择。在一个机构内部,要求用户事先安装插件或在桌面端下载并安装插件相对容易。Java Viewer支持更丰富的功能,如MapNotesEditNotes,这是HTML Viewer所不支持的。一旦客户端加载了applets,地图的显示和查询速度将非常快,但相对于其他的ViewersJava Viewer的定制功能非常有限。

如果要建立一个Internet站点,可以考虑HTML ViewerActiveX ConnectorColdFusion ConnectorAppServerLink。使用HTML Viewer的主要原因是不需定制,就可以获得强大的功能。ArcIMS Designer输出了一组预先定义好的功能。HTML Viewer的文档详细描述了它的功能,变量和方法。并且HTML Viewer支持所有平台的客户端和服务器。开发者只需熟悉HTMLJavaScript就可以通过HTML Viewer建立站点。HTML Viewer的主要缺点是它比其他连接器的客户端胖,响应时间慢,特别是当访问大数据量时。

其他定制连接器建立的客户端更瘦,因为代码位于服务器端并且不需下载到客户端。我们可以根据两个主要因素——环境和资源——选择连接器。如果使用Windows服务器上的Microsoft IIS,可以选择ActiveX Connector;如果不是,选择任何连接器都是可行的。对于UNIX服务器,可以选择ColdFusionAppServerLink连接器,但ActiveX Connector不行。

选择 Connector 的另一个重要因素是你所掌握的开发手段。如果熟悉 VB ,可以使用 ActiveX Connector 。同样地,如果开发人员掌握 ColdFusion ,则 ColdFusion Connector 可能成为最佳选择。对于所有连接器, HTML JavaScript 简单易学,是必须掌握的开发手段。所以如果你不熟悉其他的开发方式, HTML Java Viewer 是最佳的选择。如果使用 AppServerLink ,则需要 Java 编程的经验。而对于初学者来说, Java 不是很容易入门。虽然所有的连接器都备有开发文档,但 Servlet Connector 的文档是最完整的。


                                                                        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 》。


                                                      arcims讲座三:怎样设置ArcIMS的权限验证

ArcIMS Servlet Connector 允许为MapService(地图服务)设定访问权限,这样只有被授权的用户才能访问他们。这个过程被称为权限验证。默认的,不进行权限验证,Servlet Connector将所有请求发给ArcIMS Application Server(应用服务器)。但是,你可以通过配置Servlet Connector来验证客户端:

* 是否有有效的用户名和密码
* 是否可以从特定的机器(通过IP地址判断)访问MapService
* 是否有未过期的访问权限(如未服务设定了有效期)
* 是否有特定请求的访问权限(如是否能执行地址匹配功能)

当接到从客户端发来的请求,Servlet Conncctor首先检查是否为MapService设定了权限验证。如果设定了,Servlet Conncector从客户端获取必要的信息--如用户名,密码--然后确定是否满足条件。如果条件满足,请求将被发给Application Server。否则,将会提示用户无权访问该MapService。

Servlet Conncctor通过访问控制列表(ACL)来管理限定的和非限定的MapServices以及权限验证信息。ACL有两种格式:基于文件的ACL和基于JDBC的ACL。

基于文件的ACL的主要优点是容易建立,不需要其他的部件支持。基于文件的ACL将权限信息保存在XML文件中,该文件可以通过任何文本编辑器建立。在这个文件中,你可以定义哪个MapServices被限定以及如何访问他们--如包含所需的用户名和密码。当Servlet初始化时,这个文件的内容被加载进内存。因此,如果你编辑了ACL文件,需要重新启动servlet engine (如果servlet engine 嵌入web服务器,则需要重启web服务器)使你的更改生效。而且,在ACL文件中定义的用户数量的增加会导致web服务器的内存使用量的增加。

基于JDBC 的ACL将权限信息保存在通过JDBC驱动程序访问的关系型数据库中。JDBC的ACL可以比文件的ACL管理更大量的用户和MapService。而且,如果你需要频繁更改ACL,基于JDBC 的ACL可以不终止服务,即不需要重新启动servlet engine,而使更改立即生效。为了使用基于JDBC的ACL,你必须运行一个关系型数据库(如Oracle),并且有它的JDBC驱动。

注意:只有通过ArcIMS Servlet Connector处理的HTTP请求,才可以使用权限管理,其他连接器(如ActiveX Connector)不可用。

基于文件的ACL的权限验证
下面表明了通过XML文件设置MapServices的权限验证的步骤:

第一步:创建地图配置文件,设计web站点。
通过Author创建地图配置文件(AXL),然后通过Designer设计站点的外观。
注意:Designer不能访问到被限定的MapServices;所以,你必须在限定权限之前生成站点。

第二步:编辑Esrimap_prop文件。
定位Esrimap_prop文件所在目录,因为servlet engine不同,安装的目录有所不同,并用文本编辑器进行编辑。注意ArcIMS在Windows 的<installation directory>ConnectorsServlet或UNIX的< installation directory>/Middleware/Servlet_Connector目录下安装了Servlet Connector的一套备份文件。不要编辑该目录下的文件,它不会影响Servlet Connector的操作。
按照下面的提示设置属性。你可以简单地通过移走Esrimap_prop文件中的注释字符(#)设置许多属性。这些属性名称大小写敏感,但属性值不敏感。在ArcIMS Servlet Connector 属性文件中详细地描述了这些属性。
注意:如果你同时为基于XML文件和基于JDBC的ACL设置了属性,那结果将使用JDBC的设置。
enable=True
使用ArcIMS Servlet Connector.

authenticate=True
使用Servlet Connector的权限验证

authMethods=Basic
两种权限验证的方法: Basic和Digest.。Digest 更安全,但不是所有的浏览器都支持。

authenticateWithSessions=True
允许Servlet Connector更高效地处理客户端的请求。

sessionTimeout=120
大多数情况下,120秒应该足够了。

aclFileName=< ACL 文件的全目录>/aimsacl.xml
一般地,你可以将ACL文件放在与Esrimap_prop文件相同的目录下。表示目录的斜杠必须是"/"。

realm=ArcIMS Network
当提示用户输入用户名和密码时,realm名显示在对话框上。

第三步:创建保存访问控制列表的XML文件。
用文本编辑器创建XML文件。该文件表明哪个用户有权访问哪个MapServices。
需要牢记的是:

* 确认按照在Esrimap_prop文件的aclFileName属性中定义的文件和目录名命名并保存该文件。
* 用户名和密码是大小写敏感的。
* 在ACL文件中定义的MapService的名字必须与在Administrator中的完全一致。
* 只有在ACL文件中列出的MapServices才可用,即使你还有其他的MapServices在Administrator中运行。

下面的ACL文件包含一个限定的MapService和两个非限定的MapServices。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair" services="SecretData" />
</AIMSACL>

下面的ACL文件表明了怎样限定特定的机器访问限定的MapService,还增加了一个可以访问所有MapServices的用户。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair"
services="SecretData" trustedclients="198.102.62.1,198.102.62.22"/>
<USER name="superuser" password="all.access" services="*" />
</AIMSACL>

关于所有属性的描述,请参见ArcIMS Servlet Connector属性文件。

第四步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。
在任务栏,点击 开始 | 设置 | 控制面板 | 管理工具 | Internet服务管理器。在左面板,双击机器名,展开树状目录,双击默认的Web站点。如果你运行的servlet engine软件是ServletExec或Jrun,双击Scripts;如果是Tomcat,双击jakarta。在右边面板,右键点击ServletExec_ISAPI.dll,jrun.dll或isapi_redirect.dll,打开属性窗口。
点击"文件安全性"。
在"匿名访问和验证控制"栏点击"编辑"按钮。
取消"集成Windows验证"。

第五步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。
重启servlet engine(或web服务器)使得你在Esrimap_prop文件中的设置生效--通过ACL文件进行权限验证的工作完成了。

基于JDBC的ACL的权限验证
下面表明了通过基于JDBC的ACL设置MapServices的权限验证的步骤。前提条件假定你已经运行了一个关系型数据库,并且你已经安装并配置了JDBC驱动:

第一步:创建地图配置文件,设计web站点。(同基于文件的ACL第一步)

第二步:编辑Esrimap_prop文件。
前部分同基于文件的ACL的第二步,接下来要做的是:
useJdbc=True
使用可通过JDBC访问的数据库存储权限

jdbcDriver=< JDBC驱动的名称>
例如:jdbcDriver=database.sql.jdbc.JDBCDriver。驱动器所在目录必须是servlet engine的classpath设置的一部分。

jdbcUrl=<到数据库的URL >
到数据库的URL存储了访问控制信息。格式为:jdbc:<数据库类型>:@<机器名>.<域>.<组织代码>
如:jdbcUrl=jdbc:oracle:oci8:@arcims_maps.esri.com

jdbcUser=<数据库用户名>
访问数据库的用户名

jdbcPassword=<数据库用户的密码>
特定数据库用户的密码

jdbcUserTable=<数据表名>
数据库中存储有效用户和密码的表名

jdbcPermTable=<数据表名>
数据库中包含MapService名和特定用户访问权限列表的数据表名。

jdbcUidColumn=<数据库表字段名>
在数据库用户表和权限表中都存在的用户代码字段名

第三步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。(同基于文件的ACL第五步)

第四步:在关系型数据库中创建用户表
用户表包含了你希望访问你的MapServices的用户的名称和密码。它还包含了一个唯一的用户代码,ArcIMS通过它将此表和权限表连接。该表名必须与Esrimap_prop文件中jdbcUserTable设置的名称相同。该表必须包含下列字段:

字段名 类型(宽度)
Userid Number(32)
Username Varchar(64)
Password Varchar(64)

为了增加灵活性,你可以将userid字段命名为任何你希望的名称,只要它与Esrimap_prop文件中jdbcUidColumn 设定的名称一致即可。其他两个字段必须为username 和 password。
所有字段的描述信息,可以在ACL属性参考中找到。

第五步:在关系型数据库中为用户表添加记录
为用户表添加用户名和密码。确保userid是唯一的。你可以用*表明该MapServices不需要用户输入用户名和密码就可以访问。

Userid Username Password
1 *
2 USER1 PASSWORD1
3 USER2 PASSWORD2
4 USER3 PASSWORD3

第六步:在关系型数据库中创建权限表。
权限表将每个MapService与一组或多组用户名和密码关联。该表名必须与Esrimap_prop文件中jdbcPermTable定义的名称一致。该表必须包含下列字段:
UserID字段名必须与用户表中定义的名字和Esrimap_prop文件中jdbcUidColumn设定的名称一致。其他五个字段必须命名为以上字段名称。
所有字段的描述信息,可以在ACL属性参考中找到。

第七步:在关系型数据库中为权限表添加记录
为权限表添加用户代码,MapServices名和激活状态。每个记录只包含一个MapServices名。用户代码将MapService与用户名和密码关联起来。你可以增加其他的具有相同用户代码的记录与多个MapServices关联。下表显示了一个基本的权限表的配置。

字段名 类型(宽度)
Userid Number(32)
Service Varchar (64)
Active Number (32)
Expiration Data (格式MM/DD/YYYY HH:MM:SS)
Tclients Varchar (1024)
Ftags Varchar (1024)

你可以有选择地填写其他字段为MapService增加额外的限定条件。如,你可以增加过期时间 (10/16/2001 11:24:30),一组用逗号分开的通过IP地址识别的信任用户列表 (198.102.62.1,198.102.62.22) 和一组用逗号分开的限定功能的标签列表 (GET_GEOCODE,GET_EXTRACT).

第八步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。(同基于文件的ACL第四步)



(以水情监测信息系统原型开发为例)

一、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函数库中的函数要做相应的修改,修改可以手工操作,也可以程序方式批量操作。
//======================================================================
//用于调试的开关变量设计
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提供了更简单,更方便的数据库访问方法,所以,本系统选择了它。
系统配置如下:


ArcIMS 3是ESRI推出的基于网上制图和分布式GIS的新一代产品。ArcIMS允许用户在Internet和Intranet环境下为浏览器端的客户提供GIS应用和地图数据。
ArcIMS的一个显著特点是可以在服务器和浏览器或其他客户间建立"数据流"。这一功能使得用户可以将本地数据与Internet上的数据结合起来,从而为用户和数据发布者提供了一个更广阔的空间。
新的体系结构包括许多应用服务如制图、查询、地理编码等,但同时允许用户嵌入自己定制的GIS服务,而使用的数据既可以是本地的也可以是分布的数据集。
"ArcIMS将会在人们共享、访问、使用GIS数据的方式上引起一场大变革。"ESRI总裁Jack Dangermond说,"它代表着传统GIS向分布式GIS迈出了重要的一步。遍布全球的代理商可以直接为用户发布数据并提供服务。用户可以将广泛分布的数据和本地数据结合在一起,这开启了协同工作的新篇章。这种技术将使得全球的存储在GIS数据库中的现有的空间信息发挥出巨大的效力。"
ESRI的用户将可以在任何时间、任何地点共享和使用彼此的数据。任何人通过一个简单的浏览器界面就可以访问经过复杂的专业的GIS分析产生的数据。通过不断提高的访问GIS信息的能力,各种组织和全社会作为一个整体将更有效地利用现有的空间数据资源。

简单的基于向导的界面

ArcIMS在创建、设计、管理GIS站点上提出了一套简便易行的解决方案。它的便捷而强大的管理构架可以帮助你完成建立Web服务以及优化站点的工作。从客户端到服务器再到快速地建立、组织、维护制图网站,ArcIMS GIS提供了我们所需要的一切。
"你需要做的仅仅是简单地通过向导引导你完成创建地图服务、设置网页、发布和管理站点的工作,"ArcIMS的产品经理Bernie Szukalski如是说。

强大的智能化的客户端.

ArcIMS同时推出HTML和Java两种版本的强大的客户端。ArcIMS Java客户端支持真正的客户/服务器方式,它允许客户直接使用本地缓冲中的数据。客户端的操作不再必须由服务器来完成,许多操作可以直接在客户端快速高效地执行(如map tips和map classification)。

地图编辑和地图注释功能

ArcIMS客户端还支持动态地编辑和标注地图信息。它允许用户将编辑结果返回给服务器,并帮助记录下对服务器端数据库所做的改变。地图注释功能还允许在地图上标注符号用来提示其他人的注意或以备今后查看,这大大提高了网上GIS数据的交互能力。
"我们将会看到大量的空间信息通讯的出现",Dangermond说,"它的出现将使人们通过紧密相连的互联网和GIS信息发现一种崭新的相互影响和相互参与的途径。我愿意将它叫做G-mail或地理公告栏--我这里特别要强调的是地理的。"

方便的定制功能

ArcIMS的客户端可以通过工业标准的语言,如VBScript和JaveScript,方便地定制以适用于不同的功能需求。它可以为最终用户和希望自己定制界面和应用的开发商提供广阔的空间。

高质量的制图显示功能

由于ArcIMS支持矢量数据流,因此获得了更清晰的屏幕显示效果。此外,新的技术如anti-aliasing(一种边界平滑的影像处理技术)也提高了栅格数据的显示质量。

开放的、可伸缩的结构

ArcIMS独特的结构提供了一个开放的、灵活的平台。无论是功能简单的Intranet还是要求很复杂的Internet应用,无论是一个服务器的GIS发布应用还是跨多个服务器的分布式GIS应用,ArcIMS都可以支持。而且你就可以很容易地扩展原有的网上GIS应用,无须重新构建。此外,ArcIMS与很多其他流行的Internet技术兼容,如ColdFusion, Microsoft Transaction Server, Active Server Pages等。

ArcIMS是一个基于网络或服务器的GIS系统,是ArcInfo 8桌面GIS的很好补充。在不久的将来,ESRI的用户将会同时使用ArcInfo 8 和ArcIMS创建/维护地图数据库并在互联网上发布地图信息。




你可能感兴趣的:(arc)