搜索
您的当前位置:首页正文

webgis开发实践手册

来源:好走旅游网
CHAPTER

第 1 章 剖析WebGIS 对于WebGIS这个“热门”名词,如果你是初次接触,可以先到Google、Cuil1或其他搜索引擎中去了解一下;如果你已初窥门径,我们将先给您介绍一些与WebGIS相关的术语:GML、ArcIMS、Ajax、ASP、ASP.NET、JSP、JSF、OGC、Java Applet、JavaScript,此外还有:Flex、SOA、SOAP、GIS服务、RESTful服务和Mashup等,术语还可以列举许多,不过在此只点到为止。

当然,罗列这一堆术语的本意并不是“恐吓”读者,以此来夸耀作者的博学,恰恰相反,我们希望能通过本书,为读者从这堆术语的“泥淖”中寻找一条坚实可靠的“出路”,故弄玄虚和名词考证都是作者最不喜欢的。

地理信息系统(Geographic Information System,GIS)是在20世纪60年代2出现的,经过近40年的发展,已经产生了重要并且意义深远的成果和进步3。从早期昂贵、基于主机(Host-based)的专业系统到今天进入平常百姓家的那些价格低廉、基于无线网络的移动与嵌入式GIS和GPS设备(手机和导航仪等),GIS的发展方向一直趋向于让普通用户都能从无处不在的地理信息中受益。当然,这既符合IT技术的发展潮流,更暗合GIS的使命——更好地改变了我们的生产、生活和工作方式,而WebGIS则是这一发展潮流的最好注脚之一。

Internet网络是人类历史上最重要和最伟大的发明之一,它是人类通信与交流方式的一次重大革命。Internet网络的出现和发展,使得全球范围内的信息共享和快速传播成为可能,从而极大地增强了信息的时效性,并提高了其可靠性4。也正是有了Internet,我们生活的

1 2

Cuil,一个诞生不久的分类式搜索引擎,其网址是http://www.cuil.com。

第一个公认的GIS是1963年R.F.Tomlison领导的加拿大地理信息系统CGIS。 3

关于GIS的发展历史,推荐读者查阅《地理信息系统与科学》一书第12页的“大事记”。 4

当然,谣言也能很快传播,不过也会更快地消失。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2第1章 剖析WebGIS

星球才能被称为“地球村”,网络已经对技术、科学和整个社会产生了深刻的影响,这个重要性无论怎样强调都不为过。

而作为一种与位置相关的信息管理系统5,GIS也借助了日益发展的网络技术,诞生出了所谓的“网络GIS”和WebGIS等概念,“互联网逐渐将GIS的各种应用整合在一起,独立的GIS将逐渐消失”6,如今的GIS已经更加离不开网络这一传播媒介。但请读者注意:网络GIS与WebGIS并不能简单地画上等号,后者只是前者的一个子集。

抛开WebGIS这一概念名词不谈,对于GIS开发人员而言,WebGIS开发在本质上无非是编写一种交互方式较为特殊的Web应用程序,但随着Web 2.0概念的兴起,Ajax、RIA框架、SOA、SOAP、GIS服务、RESTful服务和Mashup等名词已经让许多GIS学习者眼花缭乱。现在,WebGIS学习的复杂性不在于其内容的深浅,而是出现了太多的“枝蔓”,挡住了我们前进的道路。

在第1章中,我们将为读者梳理一番WebGIS软硬件基础的历史,介绍互联网的历史和分布式计算、通信协议、网络GIS概念、WebGIS的定义与实质、主要的WebGIS服务器和开发路线。只有了解它们,我们才能从日益严密的Web应用程序封装中窥见其本来面目。我们将让读者意识到,在这些名词背后,都隐藏着一个越来越被读者忽视的本质——HTTP请求/响应模型。在阅读完这一章之后,你将了解到所谓的WebGIS,无非就是Web+GIS而已,如图1-1所示,但这两者结合产生的力量,远远超过了单体的能量。

图1-1 WebGIS= Web + GIS

严格地讲,将GIS归入一种信息管理系统是不完全的,虽然空间数据管理是其主要的特征之一。

Paul Longley, Michael Goodchild, David Maguire, David Rhind. 张晶,刘瑜,张洁,田原等. 地理信息系统与科学. 北京:机械工业出版社,2007

6 5

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

3

1.1 互联网与网络协议

1.1.1 互联网历史

本书的读者中可能有人在20世纪90年代早期7就已经接触了网络,但互联网的诞生时间更早,和许多我们熟悉的技术一样,它也是军事技术民用化的结果。

1969年,世界正处于美苏“冷战”时期,当时的计算机系统都是基于主机的客户终端形式,这种集中式的网络结构很容易遭到破坏。为了适应冷战时期潜在的核战争威胁,美国ARPA(Advanced Research Projects Agency,美国国防部高级研究计划署)提出研究一种非中心式网络的计划,基于这种结构的网络即使某一个节点遭到破坏也不至于毁掉整个网络,其鲁棒性大大高于集中式网络。

在第一期研究项目中,ARPA将4家大学的计算机主机进行互联互通,诞生了所谓的ARPANET(阿帕网)。随后,美国本土的多家大学、研究所和军方机构都接入了这个网络。到1973年,远在海外的夏威夷、英国伦敦和北欧的挪威也通过卫星接入了ARPANET。

ARPANET虽是先驱,但并不是当时唯一存在的计算机网络。20世纪70年代末到80年代初,计算机网络蓬勃发展,各种网络应运而生,如MILNET、USENET、BITNET、CSNET等,其规模和数量都得到了很大提高。一系列网络的建设,产生了不同网络之间互联的需求,并最终导致了TCP/IP的诞生。

1980年,TCP/IP制定;1982年,ARPANET开始采用IP;1983年,ARPANET被划分为ARPANET和MILNET两部分,同时ARPANET全面采用TCP/IP,以取代之前的NCP。

到了1986年,在美国国家科学基金会(NSF)的资助下,基于TCP/IP技术的主干网NSFNET建成,它连接了美国若干超级计算中心、主要大学和研究机构,世界上第一个互联网由此诞生,并迅速连接到世界各地,这是互联网历史上一个划时代的大事件。

尽管这些网络的建设已经获得了巨大的发展,但其用户基本上仍局限于大型公司、科研院所和军事机构的科研工作者,普通人很难理解和使用网络,直到1989年CERN8(European Organization for Nuclear Research,欧洲粒子物理实验室)的Tim Berners-Lee开发出一种通过超链接文本共享信息的技术。Tim Berners-Lee将他的发明称为HTML (HyperText Markup Language,超文本标记语言),他还编写了构成超文本信息系统框架

7 8

中国1994年才接入国际互联网,但在此之前国内科研和教育机构已经存在实验性互联网络。

CERN网址http://public.web.cern.ch/public/,该中心最近的一次大新闻是试图通过对撞机制造人工黑洞。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 4第1章 剖析WebGIS

的通信协议,并将这种新的系统称之为WWW(World Wide Web,万维网)。

1992年,CERN 开始在其成员机构之外推广WWW,但这个推广过程并不顺利,因为普通用户看到的只是文本界面或图片的链接,而不是今天习以为常的图文并茂的网页内容。

20世纪90年代互联网命运出现了转折。1993年,在美国全国超级计算机应用中心的资助下,伊利诺伊大学的天才学生Marc Andreessen和Eric Bina等人成功开发了世界上第一,它在世界范围内个被广泛用于阅读 HTML语言的WWW浏览器Mosaic9(见图1-2所示)

引起了轰动,点燃了互联网发展的燎原烈火,互联网从此开始走入普通人的生活。

图1-2 世界上第一个WWW浏览器Mosaic

1994年,中国开始启动中国教育和科研计算机(CERNET)示范网建设工程,这是我国第一个全国性TCP/IP互联网10,除了CERNET外,中国互联网的骨干网络还有ChinaNET、CSTNET等。到了1996年,中国掀起了网络热潮,普通民众也开始上网“冲浪”,中国从此步入网络世界11。

小知识:互联网、因特网和万维网

互联网、因特网和万维网其实并不是一回事,它们三者的关系是:互联网包含因特网,而因

Mocaic后来因为版权原因被迫更名为Netscape,关于Mosaic的巨大影响,读者可以打开IE浏览器的“关于”对话框,去看

看第一行的内容。 10

以上资料来自中国教育与科研计算机网http://www.edu.cn/20041225/3125246.shtml。 11

关于中国互联网的发展历史,可以浏览CNNIC网站http://www.cnnic.net.cn/index/0E/21/index.htm。

9

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

5

特网则包含万维网。

互联网是由若干台电子计算机相互连接而成的网络,即使只有两台机器,不论用何种技术使其彼此通信,也可以称为互联网。互联网标准写法是internet。跨国性的超大互联网不仅有因特网,还有惠多网(CFido,一种全球性的BBS网络),这些网络共同构成了互联网,因此,我们可以将互联网看作是各种网络的大杂烩。

因特网是互联网的一种,它是目前全球最大的一个电子计算机互联网,由美国的ARPANET网发展演变而来。因特网是由上千万台设备组成的国际互联网,使用TCP/IP让不同的设备彼此通信。但使用TCP/IP的网络并不一定是因特网,局域网(LAN)和企业内部网(Intranet)也可以使用TCP/IP。因特网标准写法是Internet。

因特网是基于TCP/IP实现的,TCP/IP由很多类型协议组成,不同类型的协议又被放在不同的层,其中位于应用层的协议有很多种,如FTP、SMTP和HTTP等。只要应用层使用的是HTTP,这部分因特网就被称为万维网,是我们常用的Web浏览器应用的基础。

1.1.2 计算机是如何互联的

计算机诞生的早期,每家电脑公司开发的产品都具有其特殊性,不光是机器硬件,连操作系统都自己编写,各自为政,要将一个程序在不同公司生产的计算机上运行都是天大的难题,更遑论在不同计算机之间实现互联互通了。

在ARPANET计划中,要将不同大学的不同独立计算机通过通信线路连接起来,构成计算机网络,就必须克服这个硬件沟壑。显然,计算机之间的通信和信息交换应该遵守一些共同的“游戏规则”,且这些规则必须独立于具体的硬件环境,这就是所谓的协议(Protocol)。

ARPANET最初使用的是NCP(Network Core Protocol)而不是TCP/IP,但NCP随着连接用户的增加暴露出了许多缺陷,如缺乏多台计算机的定位区分功能(没有IP)和传输的纠错能力差等。

1983年,ARPANET全面采用TCP/IP,它是由Robert E. Kahn和Vinton Cerf在1973年提出的,后者还是NCP的开发者,他们两位被共称为“互联网之父”,一起确定了互联网的基础。

1984年,国际标准化组织ISO也颁布了“开放系统互联基本参考模型”(OSIRM,Open System Interconnection Reference Model),但OSIRM标准过于复杂,从未真正被实现过。相反,随着万维网的出现,TCP/IP慢慢战胜了其他网络协议方案,成为今天互联网的事实标准。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 6第1章 剖析WebGIS

TCP/IP之所以成功,是因为它具有以下特点:

󰂄 󰂄 󰂄

开放性,抽象自计算机硬件和操作系统;

统一分配网络地址,网络中每台计算机都具有唯一的IP地址与其他设备相区别; 标准化的应用协议,能提供多种可靠的应用服务。

TCP/IP的参考模型是一个抽象分层模型,在这一模型中,所有的TCP/IP都被划归到

4个层中。每一层都建立在低一层的服务之上,并为更高一层提供服务。

TCP/IP的结构从低到高分为如下四层,如图1-3所示。

图1-3 四层结构的TCP/IP

󰂄

网络连接层(Network Access Layer):它是TCP/IP协议的最底层,负责网络层与硬件设备之间的通信,即数据帧的发送和接收。这一层的协议非常之多,如Wi-Fi、MPLS、Ethernet等。

󰂄

网际层(Internet Layer):网际层负责解决网络之间计算机传输数据包的问题。这一层的协议有四个,即IP,负责在主机与网络之间寻址和路由数据包,正是因为拥有IP,网络中不同的计算机才能相互区别;ARP,即地址解析协议,负责获得同一物理网络的硬件主机地址;ICMP,即网际控制消息协议,负责发送消息并报告有关数据包的传输错误;IGMP,互联网管理协议。

目前使用的IP是IPv4版本,其IP地址长度为32位,尽管这一IP地址群多达40多亿个,但美国掌握了其绝对的控制权和大部分IP地址,由于IP地址的滥用和浪费,现在已经面临枯竭。目前全世界正在推广IPv6版本的协议,其地址长度为128位,号称“可以为地球上的每一粒沙子都分配一个IP地址”。中国在1998年由CERNET率先建立了IPv6试验网,并获国际组织认可,1999年开始正式分配IPv6地址。

󰂄

传输层(Transport Layer):这一层位于网际层之上,用于在计算机程序之间提供通信会话。它有两个主要的传输协议:传输控制协议TCP,它是一种“面向连接”

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

7

的协议,在通信之前双方必须建立联系,才能为应用程序提供可靠的通信连接,适合于一次传输大批数据,并适用于要求得到响应的应用程序;用户数据包协议UDP,它提供了一种无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,其可靠性则由应用层来负责。

󰂄

应用层(Application Layer):应用层是最顶上的一层,顾名思义,它包含了所有与应用程序协作的协议。应用层是大多数与网络相关的应用程序为了通过网络与其他程序通信所使用的协议层。这一层的协议运行于TCP和UDP之上,它们包括HTTP(用于网络浏览)、HTTPS(HTTP的安全版本,许多网上银行和WebMail采用这一协议)、FTP(用于文件传输)、POP3(用于接收电子邮件)、SMTP(用户发送电子邮件)和NEWS(新闻组协议)等。

当我们打开如Internet Explorer、Firefox等WWW浏览器时,键入的网址大部分都被解析为http://xxx,这就是采用了HTTP;而在Foxmail或Google等电子邮件软件中设置邮件地址时,使用的则是POP3和SMTP。对于大部分网络用户而言,HTTP和HTTPS是日常上网使用最频繁的应用层协议12,如图1-4所示。

图1-4 登录Google基于的HTTPS协议

网络应用程序一定要使用最上层的,即某种应用层协议才能实现互联网上的数据传输吗?答案是否定的,实际上,目前很多网络电视软件、视频通信软件和文件传输软件就是直接使用TCP或UDP在传输数据包,不使用应用层协议也是完全可以的13,如图1-5所示。

图1-5 QQ可以使用多种协议登录到服务器

除了协议,端口号是必须熟悉的另一个主题。由于多个网络应用程序都可能运行在同

12 13

根据调查,目前互联网上的数据流量大部分源自电子邮件和BitTorrent下载而非HTTP流量。

TCP和UDP的区别可以浏览http://net.zdnet.com.cn/network_security_zone/2009/0106/1303620.shtml。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 8第1章 剖析WebGIS

一台计算机上,须使用某种机制来保证恰当的应用程序在目标计算机上获得和发送来自源机器的数据分组,并保证响应被发送到源计算机的恰当应用程序面前,这可以通过使用 TCP 或 UDP的端口号来设置。这就好像在一个办事大厅中,不同的应用程序应该在不同窗口排队,才能办理不同的事务。

默认的TCP端口号有许多种,如FTP数据通道端口号为20,FTP控制端口号为21,BBS协议Telnet端口号为23,SMTP端口号为25,而最常用的HTTP协议的端口号为80。当然,为某种服务任意指定某个端口号(但该端口号不能正在被使用)也是允许的,如在同一台计算机上同时安装IIS和Apache均提供HTTP服务时,一个的端口号为80,另一个就不能是80,一般都设置为8080。

小知识:新闻组、BBS和FTP

由于富客户端(RIA)技术的快速发展,许多几年前需要专门应用软件才能实现的应用和UI效果,目前都可以在WWW浏览器中实现,不管是过去的BBS、E-mail,还是FTP,在Internet Explorer或Firefox等浏览器环境中都能非常容易地“模拟”出来,以至于许多新网民都不知道网络上还有新闻组、BBS和FTP这些曾经风靡一时的“古老”东西。

新闻组(NewsGroup)是一种使用电子邮件交互的讨论组,其实现技术与目前WWW上的论坛完全不同,前者使用的是NNTP协议,须要使用特定的客户端,如通过Outlook Express或ThunderBird来访问,它通过邮件的方式进行话题的交流。在网络发展早期,新闻组一度异常活跃,但遗憾的是,这一应用已日渐式微,原来许多知名的新闻组现已不复存在。

BBS(Bulletin Board System,电子公告板)是一种使用TELNET协议交互的软件,它是今天WWW论坛的前身。早期的BBS是一种纯文字性的交流方式,需要专门的浏览软件才能访问,如CTerm、FTerm和NetTerm等,但在许多PC操作系统中都内置了telnet软件,使我们无须借助其他浏览软件就能访问各个BBS站点。

我们可以点击“开始”按钮,在“运行”菜单弹出的对话框“打开”中键入telnet://bbs.gznet.edu.cn,点击“回车”键,就会弹出一个“华南木棉”BBS站的欢迎页面,如图1-6所示。

虽然今天大部分的BBS都提供了基于WWW的浏览站点,但在很多高校和科研机构中,许多用户仍然喜欢使用CTerm等软件通过telnet协议登录BBS。

FTP也许是普通人次熟悉的协议,在许多高校和公司内部,为了给指定的用户共享数据文件,都会使用FTP Serv-U等软件搭建一个FTP站点,而不是通过Web页面下载。大部分Web浏览器,都直接支持FTP协议,我们可以在IE的地址栏中输入ftp://<提供FTP服务的服务器名>,通过输入用户名和密码,就能够像管理本地文件一样下载和上传数据了。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

9

图1-6 使用Telnet登录“华南木棉”BBS

小知识:TCP连接数

我们已经介绍过,TCP和UDP可以直接用于数据传输,如QQ的视频聊天、数据传输、PPS的网络电视等,都是基于TCP或UDP的。

当一个TCP连接建立时,操作系统中便会产生一个TCP连接线程,如果操作系统对此不进行限制,就可能会被“黑客”制造的无数多个连接线程拖慢运行速度,直到最后死机为止。还记得冲击波病毒吗?它就利用了这个原理!

为避免这个漏洞再被人利用,Windows XP系统对TCP连接数进行了限制,默认值是10个。但当带宽足够时,10个线程数反而限制了某些软件的应用,要适当放宽线程数的限制来提高数据传输速度,这也就是类似PPS等软件要求更改TCP连接数的原因。

1.1.3 WWW的工作协议

我们已经知道,WWW是建立在HTTP(Hyper Text Transfer Protocol,超文本传输协议)上的一种网络应用,而HTTP是一种客户端和服务器端(Client/Server)模式的请求/响应(Request/Response)标准。设计HTTP的初衷是为了提供一种发布和接收超文本的方法,所谓超文本,就是我们最熟悉不过的HTML标记文件。

在HTTP协议中,客户端与服务器端的通信过程(见图1-7)包含四个步骤:

󰂄 󰂄

先建立客户端与服务器端的TCP连接; 客户端向服务器端的指定端口发送请求消息;

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 10第1章 剖析WebGIS

󰂄 󰂄

服务器端向客户端返回相响应的消息; 关闭TCP连接。

图1-7 一个HTTP会话过程

下面是一个典型的HTTP 1.1请求消息:

GET / HTTP/1.1 Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727) Host: www.google.cn Connection: Keep-Alive

请求消息的第一行规定了HTTP服务器使用的方法,本请求采用GET方法,它告诉服务器我们要请求某个资源,这一行也规定了使用HTTP/1.1版协议。其他几个消息向Web服务器详细说明了浏览器的一些信息,如可能接收的信息类型和编码等,它们包括:

󰂄

Accept告诉服务器要求接收什么类型的MIME(Multipurpose Internet Mail Extensions,多功能因特网邮件扩充服务),在该例子里,*/*表示可以接收任何类型的MIME;

󰂄

Accept-Language告诉服务器本浏览器使用的语言。此后服务器可能利用这些信息对返回的内容进行个性化处理。在本例里,浏览器说明了采用中文(zh-cn)。

󰂄

Accept-Encoding告诉服务器,返回给浏览器的内容是否编码。在本例里,它可以接受采用gzip或deflate方法压缩的文档。它们是一些数据压缩方法,须要在客户端进行解压。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

11

HTTP服务器在该端口接到请求后,给予相应的响应(Response)信息,并关闭TCP连接。下面是一个典型的HTTP 1.1响应消息:

HTTP/1.1 200 OK

Cache-Control: private, max-age=0 Date: Thu, 11 Dec 2008 13:50:45 GMT Expires: -1

Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Server: gws

Transfer-Encoding: chunked //资源内容省略

响应的第一句“200 OK”表示响应正常,通常情况下,我们经常会遇到诸如“403 禁止”或“404 未找到”之类的响应,那是Response在报告自己的状态。这样,一个会话(Session)过程就完成了。HTTP会话过程非常简单,请求需要什么,服务器就提供什么。

HTTP协议有多个版本。在HTTP 1.0版中,完成一个请求/响应过程后,TCP连接就被释放,一个TCP连接只支持一个请求/响应过程,它在通信交互中须要频繁地建立TCP连接。但HTTP 1.1就开始支持持久性连接,这使得一个TCP连接能够支持多个请求/响应过程,这个技术被称为“流水线”,目前普遍使用的HTTP版本为HTTP 1.114。

在上面HTTP协议的请求中使用了GET类型的请求方法,HTTP协议中定义了7种请求方法,即HEAD、GET、POST、PUT、DELETE、TRACE和OPTIONS,常用的有下面三种:

󰂄 󰂄

HEAD要求响应与GET请求的响应一样,但是没有响应体。

GET用于信息获取,它将数据通过URL进行提交,并使用一个“?”字符表示URL地址与数据之间的分隔符;GET提交的数据以“名称/值”形式出现,并以“&”字符来区分不同的名称/值,其传递的值以明文形式出现,但它提交的数据最多只有1024字节(1KB)。

GET请求在地址栏中类似http://a.com/news.aspx?id=01&category=02,其含义是:使用http协议,访问a.com站点Web服务器中的news.aspx页面,向该页面传输两个参数,即id为01和category为02。

󰂄

POST向指定的资源提交要处理的数据,数据不会出现在地址栏中,而是包含在HTTP主体中被提交,更重要的是POST方式没有GET的1024字节大小限制,对于SOAP这样包含了大量XML数据的规范,就必须使用POST方式提交。

HTTP虽然位于TCP/IP之上,不过,这也并非必须的,因为TCP/IP只是给HTTP提供一个成熟稳定的传输通道而已。

14

HTTP 1.1可参考http://www.cnpaf.net/Class/HTTP/200707/20984.html。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 12第1章 剖析WebGIS

HTTP简单灵活,可靠性高,而且能传输任意类型的数据;同时,HTTP传输的数据与平台无关,只要操作系统支持HTTP协议,Windows平台上的Internet Explorer浏览器访问其他操作系统上Web服务器中的HTML页面就没有任何问题。我们开发的各种WebGIS系统,就是建立在HTTP上的一种特殊Web应用程序。 小知识:无状态的HTTP协议

我们常说,HTTP是一种无状态的协议(stateless protocol),即在HTTP的请求/响应过程中,无论是客户端还是服务器,都不会记录这个过程的任何信息,每次请求/响应都是相对独立的,即使是某个客户端在几秒钟内再次请求同一个请求,服务器也不会记得哪个客户端曾经连接过它。

对于静态的HTML交互,状态是没有意义的,我们访问一个WWW页面,服务器便将静态的文本返回给我们。但在须要交互的WWW应用中,状态就成为一个很重要的问题,比如登录电子邮箱,是基于用户名和密码的,这要求服务器记住是谁在登录,登录是否过期等;在WebGIS中,如果要返回上一次地图页面,服务器必须记住上一次的视图范围数据。

从本质上讲,这种无状态是因为整个操作过程是在不同计算机的不同进程之中,造成变量无法被记录。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,另一个则是Session。Cookie和Session通过不同的方式保持了客户端与服务器之间交互的连续性,从而保证了一些长事务交互活动实现的可能。

15

1.1.4 分布式计算的对象互调技术

互联网上的应用程序是基于TCP/IP来进行通信的,但这只是为不同计算机上的软件对象建立了互联的“通道”,它们之间还需要统一的“交流语言”才能实现彼此的沟通。

跨计算机的分布式应用在软件组件层次上遵守的某种特定软件标准16,是实现异构平台和程序之间互操作性的保证。这种允许运行于一台计算机上的程序调用另一台计算机上的子程序的协议被称为RPC(Remote Procedure Call,远程过程调用)。

分布式应用的出发点是实现不同计算机上相同或不同操作系统的软件对象能够互相调用,而编写这样的软件组件。目前已经有三个主要的标准,它们是:

󰂄 󰂄

微软的DCOM(Distributed COM,分布式组件对象模型);

OMG17(Object Management Group,对象管理组织)的CORBA(Common Object

15 16

关于Cookie可以参见http://zh.wikipedia.org/w/index.php?title=Cookie&variant=zh-cn。 它们都是基于HTTP、ORPC等协议之上的。 17

http://www.omg.org/。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.1 互联网与网络协议

13

Request Broker Architecture,公共对象请求代理架构);

󰂄

SOAP18(Simple Object Access Protocol,简单对象访问协议)。

微软的DCOM规范了COM对象与远程计算机上另一个COM对象的交互过程,它规定了COM对象的创建和通信机制,虽然这一规范本身不依赖任何特定语言和平台,但和大部分微软的产品一样,目前只在Windows平台中得到了实现,是微软的私家标准。

CORBA由对象请求代理(ORB)、对象服务、公共设施、域接口和应用接口等几个部分组成。其核心部分是ORB,ORB提供了一种机制让对象可以透明地发出请求和接收响应。

尽管CORBA可以在不同的平台上执行19,DCOM可以在微软的平台上运行,但是基于CORBA和DCOM的解决方案必须依赖于同构的应用程序,双方无法互相通信。更糟糕的是,这两种标准都是基于RPC协议的一种二进制标准(其中CORBA基于IIOP,DCOM基于ORPC协议)。在Internet编程环境中,它们无法通过防火墙和代理服务器的“绞杀”,只能适用于局域网环境中。

由于DCOM和CORBA无法在Internet环境中稳定实现,促使了SOAP协议的出现,SOAP采用了HTTP和XML这两个已经得到了广泛使用的协议:HTTP用于实现SOAP的RPC风格的传输,XML则是它的编码格式。

尽管SOAP的HTTP并不是最有效的传输方式,而且还要在客户端和服务器端进行XML解析,使用的时间较其他协议更多,但HTTP的稳定性和XML的纯文本特性使得它不再受防火墙的阻挡,能够在Internet环境中得到广泛的应用,如图1-8所示。

现在一提到SOAP这个名词,就似乎与Web服务紧密相连,但SOAP出现时间早于Web服务。由于SOAP只是现存技术的组合,并无任何新的技术,而HTTP和基于文本的XML数据更是能被所有平台接收,因此SOAP具有天生的互操作性和跨平台性。

SOAP目前已经得到了广泛的应用,在ArcGIS Server 9.2中,ESRI就为操作GIS服务器端的对象提供了一套SOAP API,以方便用户与服务器端的对象进行交互。由于所有的ArcGIS Server对象都实现了IRequestHandler接口,而这一接口能够响应SOAP请求,因此与SOAP交互的能力是与生俱来的,开发人员可以通过SOAP直接与服务器对象交互而无须通过Web服务20。

18 19

http://www.w3.org/TR/soap/。

但事实证明,CORBA协议的实现也依赖不同厂商的具体产品。 20

ArcGIS Server的SOAP协议可见:http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ArcGIS/SOAP/overview.htm。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 14第1章 剖析WebGIS

图1-8 两种不同架构的PRC遇到防火墙

小知识:XML-RPC

如果将Web看作是一个巨大的分布式编程环境,显然,在分布式环境中的远程调用RPC一般都应该基于HTTP进行传输。除了曾经介绍的SOAP以外,另一种常见的基于HTTP的RPC方式,即XML-RPC。

XML-RPC是使用 HTTP 作为传输协议和使用 XML 作为编码方式的远程过程调用的。其设计力求简单,并同时允许传输、处理和返回复杂数据结构。虽然与SOAP一样,也是一种基于HTTP的POST式请求,但不同的是它没有复杂的XML结构,下面是一个XML-RPC的典型请求:

POST /RPC2 HTTP/1.0

User-Agent: Frontier/5.1.2 (WinNT) Host: betty.userland.com Content-Type: text/xml Content-length: 181

examples.getStateName

41

21

目前,许多blog程序的本地写作软件,如Windows Live Writer都可以使用blog提供的XML-RPC API与blog进行数据交换。

21

XML-RPC的标准可见:http://www.xmlrpc.com/spec。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.2 网络GIS

15

1.2 网络GIS

“网络GIS是GIS发展过程中某一时段的GIS产品与应用形式,也可以是所有GIS体系下的统称。”22根据这一定义,我们可以将所有基于互联网的分布式空间信息管理系统都归纳到网络GIS的概念之中,网络GIS能够实现空间数据管理、分布式协同作业、网络发布和地理信息应用服务等多种功能。

传统的GIS系统都是单机版的,无论是软件还是数据均部署在一台计算机上,要求较高的软硬件环境,其处理能力完全依赖客户端的配置,无法实现数据的多人操作和编辑,且部署成本非常高;而网络GIS则充分利用了互联网上的计算机,增强了地理数据的共享和协同处理能力。网络GIS是GIS应用的一次飞跃,较单机版的GIS系统,它具有以下优势

23

󰂄

拓展了GIS的应用领域和服务范围,让更多的人可以使用GIS,从而获得更优质的空间信息服务;

󰂄 󰂄 󰂄

为更多的用户提供了透明的操作方式; 降低了用户购买GIS软件系统的成本; 增强了空间信息服务的时效性。

虽然网络GIS的最典型代表是WebGIS(B/S模式的GIS),但除此以外,C/S模式的GIS系统、Web服务GIS和移动与嵌入式GIS都为网络GIS增添了丰富的内容和形式。

1.2.1 C/S模式的GIS

基于C/S模式的网络GIS是最常见的一种分布式架构,在这种客户端/服务器的架构中,地理数据被存储在地理数据服务器(如ArcSDE等大型关系数据库)上,而数据的查看和编辑则在客户机上实现。这种架构一般都涉及海量数据、地理计算、空间分析、专题制图和数据转换等因素,因此只适合在环境稳定的局域网中部署。目前,我们能见到的绝大部分地理信息管理系统几乎都采用这种模式。

C/S模式的GIS客户端通常是使用某些软件开发组件集构筑的桌面端应用程序,如ArcGIS Engine等,当然,类似ArcGIS Desktop软件和ArcExplorer也都是典型的C/S模式的客户端程序。这些客户端程序功能丰富、界面良好,但很难实现快速部署和跨平台部署,

22 23

张书亮, 闾国年, 李秀梅, 姜永发. 网络地理信息系统.北京:科学出版社. 2005 孟令奎, 史文中, 张鹏林. 网络地理信息系统原理与技术. 北京:科学出版社. 2005

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 16第1章 剖析WebGIS

同时,客户端程序要求的计算机硬件性能也较高。

最近几年,C/S模式的GIS系统有所弱化,一方面是其开发和部署的难度所致,另一方面,这种只能在局域网中运行的GIS系统在连接和处理SDE地理数据时,速度实在不能让人满意,因此,让我们对其看法日渐悲观24。

1.2.2 B/S模式的GIS

B/S模式的GIS是基于Web浏览器实现的一种分布式网络GIS,它以WWW作为编程环境,拥有与生俱来的跨平台部署特性,能够访问Internet异构环境下的多种GIS数据和服务。

B/S模式的用户界面在浏览器中显示,少量的事务逻辑也可以在页面端通过脚本语言实现,但其主要的事务逻辑均在服务器端完成。这样极大地降低了客户端对硬件的要求,减轻了系统维护和升级的成本,但同时对服务器的性能提出了很高的要求。在B/S模式的GIS中,实现基于Web浏览器页面的数据编辑是很困难的,这也是我们无法实现类似C/S那样丰富功能的一个主要原因。但通常情况下,我们可以通过VML、SVG等技术在客户端上绘制简单的图形。

B/S模式GIS大多以栅格形式的输出为主,即客户端上显示的是一张没有任何附加地理信息的栅格图片文件(.jpg、.png或.gif);在某些特殊的应用中,也可以实现矢量形式的WebGIS。这种方式很多,如使用Web浏览器中的SVG插件解析从服务器端传来的GML数据,或通过TCP协议直接将数据传给一个自己开发的GIS浏览器插件中进行解析显示。

1.2.3 移动与嵌入式GIS

移动与嵌入式GIS是GIS技术与嵌入式设备结合的产物,是拥有GIS功能的嵌入式系统产品。它是一种软硬件混合的系统,主要用于运动过程中的地理数据采集、查询定位和数据管理等。

移动与嵌入式GIS的运行载体与日常使用的PC机完全不同,它的硬件一般为PDA、智能手机或专业导航设备,而采用的操作系统也各不相同,如Windows Mobile、Symbian、Palm OS等。由于移动与嵌入式GIS的设备与PC机在性能、存储容量等指标上存在明显差别。因此,这种形式的GIS系统一般不包含高级数据分析和处理能力,同时,它对于GIS软件的可靠性也提出了更高的要求。

24

ESRI似乎早已有所察觉,从ArcGIS9.2开始,其产品重心已经逐步转移到ArcGIS Server上去了。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.3 WebGIS详解

17

1.2.4 基于Web 服务的GIS

基于Web服务的GIS也是通过HTTP传输数据的,它是一种利用HTTP来访问的可编程逻辑程序,与B/S模式GIS差别在于使用者不同,前者的用户是软件程序,而后者则是人。

Web服务是Internet分布式计算环境中提供的一种基本编程组件,具备分布式互操作和跨平台特性,使用XML传输数据,则能够绕过防火墙的阻拦。更重要的是,它具有开放的通信标准,如数据传输标准SOAP,服务描述语言WSDL等。

基于Web服务的GIS使用了Web服务的这些优点来发布地理数据,同时它还具有关于地理数据发现、访问、表示、查询、分析和整合的标准框架,如OGC提出的OWS(OGC Web Services)框架。

ESRI公司的ArcIMS、ArcGIS Server产品和开源的GeoServer等WebGIS服务器都支持OGC标准的地理服务,且这些服务的功能也越来越强大,如在ArcGIS Server中,不仅是栅格数据,连地理处理(GeoProcess)脚本都能够通过Web服务进行发布。

除此以外,基于网络的GIS还有网格GIS(Grid GIS)等技术,但到目前为止都只停留在理论和实验室阶段,真正使用尚待时日。

1.3 WebGIS详解

随着Internet技术的发展和普及,GIS与WWW进行了结合,形成了所谓的WebGIS(又称万维网GIS),它已经成为GIS发展中最重要的方向之一,也是本书的重点与核心内容。

1.3.1 WebGIS──特殊的Web应用程序

“WebGIS是指基于Internet平台进行信息发布、数据共享、交流协作的,客户端应用软件采用WWW协议,实现GIS信息的在线查询和业务处理等功能,是运行于互联网上的地理信息系统。”25

在这一定义中,可以看到WebGIS的两个基本特点:

󰂄

它是一种基于网络的地理信息系统程序,即它是一种GIS系统;

25

马林兵, 张新长, 伍少坤. WebGIS原理与方法教程. 北京:科学出版社. 2006

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 18第1章 剖析WebGIS

󰂄

基于HTTP协议实现的Web应用,即它是一种Web应用程序。

因此,WebGIS=Web+GIS,说它是一种GIS系统,从GIS服务器角度看,WebGIS并没有脱离GIS的范畴,它仍然是用于地理数据的发布管理;而理解它是一种Web应用程序,则是从开发者的角度,程序员要编写的无非是某种Web页面应用程序。WebGIS的整个大架构包含了GIS管理者、GIS服务器和GIS的用户,只不过这一切都是基于Web来实现的,如图1-9所示。

图1-9 WebGIS架构

WebGIS就是一种特殊的Web应用程序,Web 应用程序是多个Web 页的集合,这些 Web页不但可以在访问者、页面之间进行交互,还能与 Web 服务器上的多种资源(包括数据库)进行交互。通俗地讲,它就是各种类型的文件,如HTML、ASP、JSP、CFM和PHP等。当我们打开浏览器,输入一个URL并从服务器获得响应内容时,实际上就是在使用一个Web应用程序。

Web应用程序技术存在两个发展阶段,俗称Web 1.0和Web 2.0。第一阶段多是一些静态应用,例如获取HTML页面或与服务进行简单的交互,如用户登录、查询数据库、提交数据等(这些应用也被称为 Web 1.5);第二阶段更强调用户与网络服务器之间的互动。事实上,Web 2.0并不是一个技术标准,它既使用已有的成熟技术,也使用最新的技术,但都必须彰显互动概念。

在网络环境中,WebGIS功能通常以Web服务的形式提供,这使得用户在新建一个包

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.3 WebGIS详解

19

含有制图功能的页面程序时非常方便,如Google Maps、Yahoo! Maps等服务,都提供了专门的API给开发人员,让用户在自己的业务流程中嵌入地图内容,这种过程被称为“Mashup”。这是一种借助分布式环境实现“我为人人、人人为我”的“大同”思想的体现,其环境构成如图1-10所示。

图1-10 使用GIS服务和其他服务构成Mashups

WebGIS应用程序的页面能够通过HTML、JSP、ASP或任何类型的Web页文件构成,其特殊之处在于,它的请求提交方法并不是通过常用的“超链接”形式,而是使用鼠标与Web浏览器上的地图进行链接的。因此,我们开发WebGIS应用程序的过程,就是考虑如何向一台Web服务器发送地图请求或其他类型请求,并将响应进行解释显示的过程26。

但是Web服务器只能接收HTTP请求,根据请求的信息解析相应的脚本语言或程序语言并生成HTML标记,将其作为响应返回,它本身没有任何GIS功能。事实上,在WebGIS的交互架构中,Web服务器只起“二传手”的作用,它接收HTTP请求,并将请求中包含的信息提交给GIS应用服务器,后者对提交的信息进行处理,返回相应的结果,并传至Web服务器,然后再由Web服务器传至客户端,至于GIS应用服务器返回的是指向某张地图图片的链接还是查询的文本数据,Web服务器是毫不关心的。

整个WebGIS的会话过程如图1-11所示。

26

从这个过程来看,目前大部分WebGIS仍然处于Web 1.0阶段。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 20第1章 剖析WebGIS

图1-11 一个WebGIS会话过程

GIS应用服务器与Web服务器之间一般都有一个数据连接的通道,如ArcIMS的Connector(连接器)等,但这并不是开发人员要关心的问题。开发人员要了解的只是如何提交请求给驻留在Web服务器上的连接通道,并从该通道获得响应以解析即可。

小知识:Web服务器

本文所指的Web服务器有两种含义,一是能够接收HTTP协议请求,并返回HTML格式响应的一种应用程序软件;二是运行该软件的计算机系统。

通常使用的Web服务器软件有以下几种。

z Microsoft IIS

Internet Information Server (IIS)是Windows平台上最常用的Web服务器,很多著名网站都建立在IIS 平台上。IIS提供了一个图形界面的管理工具,即Internet服务管理器,用于监视配置和控制Internet服务。

IIS是一种Web服务组件,其中包含了Web服务器、FTP服务器、NNTP服务器和SMTP 服务器,分别具有网页浏览、文件传输、新闻服务和邮件发送等功能,它使得在网络上发布信息成了一件很容易的事。同时,它提供了 ISAPI(Intranet Server API)作为扩展Web服务器功能的编程接口,这让IIS能够以插件方式引入其他类型文件的访问支持,如访问Python文件、JSP文件等。

默认的IIS支持HTML、HTM和ASP文件,通过安装ASP.NET插件,IIS也能支持ASPX等

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.3 WebGIS详解

21

类型的文件访问和交互。

󰂄

Apache

27

Apache是世界上使用数量最多的Web服务器,它是一款开源产品,由Apache软件基金会管理。世界上很多著名的网站都是Apache支持的,它的成功之处主要在于源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的系统平台上),以及它的可移植性等。

z Tomcat

Tomcat是一个基于Java开源的、运行servlet和JSP Web应用软件的Web应用软件容器。它是执行servlet和JSP规范的,如果须要运行Servlet和JSP文件,可以考虑使用Tomcat,如在ArcIMS的安装中,也可以使用Tomcat作为其Servlet引擎。

z IBM WebSphere

WebSphere Application Server 是一种功能完善、开放的Web应用程序服务器,它是IBM电子商务计划的核心部分。它基于 Java 的应用环境,用于建立、部署和管理 Internet 和 Intranet Web 应用程序。

z ServletExec

ServletExec是一个快速的Servlet和JSP引擎插件,它可以集成到大多数流行的Web服务器之中,如IIS或Apache。同时支持多种平台,包括Windows、Solaris、MacOS、HP-UX和Linux等。

ServletExec能够用Java小程序(servlet)快速地处理来自Web浏览器的请求并能动态地生成自定义的html文件,它也是ArcIMS在Windows平台上部署时的首选Servlet容器。

1.3.2 GIS应用服务器

GIS应用服务器是WebGIS架构的核心组件,负责接收地图请求并动态地生成地图图片或地理信息并返回给客户端,当然,它是怎么开发和如何工作的原理并不是本书关心的内容。用户只须知道:根据GIS服务器的访问规则,编写普通的Web应用程序页面,就是WebGIS开发的全过程了。

常见的GIS服务器有多种,下面是其中比较著名的几种。 z ArcIMS

ArcIMS是一个通过Web发布动态地图、GIS数据和服务的解决方案,它为GIS的

27

Apache软件基金会与Mosaic也有莫大的关系。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 22第1章 剖析WebGIS

Web发布提供了一个高伸缩性的框架,以此满足从Intranet到Internet级的访问要求。除了Web页面以外,ArcGIS Desktop、移动和无线设备都可以访问ArcIMS的服务。通过ArcIMS,用户能够产生易用的、面向任务的GIS程序,能够使用工业标准的Web开发环境发布自定义的应用程序。

但由于ArcIMS的核心组件并非ArcObjects,它与ESRI的产品策略和技术路线并不一致。因此,ESRI将逐渐降低对ArcIMS的支持力度28,可以预见,ArcIMS将逐渐被ArcGIS Server取代,就如同MapObjects被ArcGIS Engine取代一样。

尽管如此,作为一种结构清晰,交互简单的GIS服务器,我们对它是非常推崇的。ArcIMS能够满足目前大部分应用的需求,即使要产生瓦片式GIS,也有办法通过TileCache等工具实现,并且,目前大部分电子地图网站仍然是使用ArcIMS作为其GIS服务器的。对于WebGIS的学习者而言,ArcIMS的开发过程也是最简洁和最清晰的。

z ArcGIS Server

作为ArcIMS的未来替代者,ArcGIS Server已经出过多个版本了,它是一个完整的服务器端GIS产品,用于构建集中管理、支持多用户的企业级GIS应用的平台。ArcGIS Server提供了丰富的GIS功能和服务。它不仅包括地图,还拥有大量的GeoProcessing服务。

开发人员使用ArcGIS Server可以构建Web应用、Web服务和其他运行在标准的.NET和J2EE Web服务器上的企业应用。ArcGIS Server也可以通过桌面应用以C/S(Client/Server)的方式访问。

此外,ArcGIS Server能够产生地图瓦片(Map Tile),提供瓦片式GIS服务;它也支持WMS和WFS标准,同时还提供Rest服务。

在其定制开发方面,除了传统的ASP.NET和JSP开发外,ArcGIS Server还提供了丰富的轻量级API,如JS和Flex客户端,能够实现非常绚丽的客户端应用效果。

z GeoServer

与ArcIMS和ArcGIS Server这两个商业软件不同,GeoServer29是一个由Java编写的开源GIS服务器,其底层基于开源GIS工具集Geotools30,允许用户显示、共享和编辑地理数据。由于一开始就考虑到互操作性,因此它支持任何使用了公开标准的空间数据。

28 29

尽管如此,ArcGIS9.3中仍然包含了ArcIMS9.3。

GeoServer项目URL:http://geoserver.org/display/GEOS/Welcome。 30

http://geotools.codehaus.org/。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 1.4 本书将带来什么

23

作为一个社区驱动的项目,GeoServer的开发、测试和技术支持全部由来自世界各地的个人和机构志愿者负责,它完全实现了OGC的WFS、WCS和WMS等标准。

z MapServer

MapServer31是一个使用C语言编写的开源地理数据渲染引擎,用于在Web上发布空间数据和与地图程序进行交互。MapServer目前是OSGeo32的一个项目,它由世界各地大约20多名开发人员在进行维护。它诞生于20世纪90年代中期的明尼苏达大学,使用MIT许可证33,该程序能够运行在各主要操作系统(Windows、Linux和Mac OS X)之上。

MapServer拥有强大的制图功能,支持包括PHP、Python、Perl、Ruby、Java和.NET在内的开发环境。当然,它也完全支持WMS、WFS、WMC、WCS等OGC标准。

MapServer支持的数据类型也相当广泛,如ESRI Shapefiles、PostGIS、ArcSDE、Oracle Spatial和MySQL等。同时,它通过Proj.4这一组件提供超过1 000种以上的动态地图投影来满足用户的需求。

1.4 本书将带来什么

WebGIS是什么?目前从理论上对它进行长篇累牍解释的书籍不下数十种,但对于GIS开发人员而言,最需要的解释并不是“是什么?”,而是“怎么对其进行开发”,而这本书就是为了实现这个目标而写的。

Web 2.0带来了大量的名词和术语,由于各种Web开发环境、Web框架和新组件的出现,现在的Web应用程序开发过程已经被包装得非常严密。对于新手而言,这种严密的包装使得他们可以很快入手,但遗憾的是,这也让许多开发人员似乎认为在IDE上的拖曳就是在开发Web应用程序,这种对Web应用程序许多基本概念和原理的理解缺失和忽略,造成了许多开发人员在脱离IDE开发时感到的无奈与无助。

在本书中,我们将沿着HTTP请求/响应模型这一主轴出发,为WebGIS学习者一路介绍必须了解和可以了解的内容,扫除看似巨大无朋的障碍。本书将以两个程序实例来展示WebGIS开发之道,第一个是基于浏览器的WebGIS客户端,第二个则是目前流行的瓦片GIS原型程序,以此帮助读者掌握WebGIS开发实践之道。

31 32

MapServer项目URL:http://mapserver.org/。

开源地理空间基金会http://www.osgeo.org/。 33

MIT许可证:http://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS CHAPTER

第 2 章 GIS服务器ArcIMS ArcIMS是ArcGIS中的一种服务器端产品,在ArcGIS Server出现之前,它是ESRI唯一的GIS服务器,其架构是非常优秀的。ArcIMS提供了一个用于在Web上发布GIS数据和服务的分层框架,通过ArcIMS提供的地理服务(Service)可以在网络上发布GIS地图、数据和元数据等信息。

ArcIMS不仅是一个网络地图发布解决方案,作为一种发布技术,它拥有支持多种ESRI客户端环境的能力;而作为一种服务器产品,ArcIMS包括了多种ESRI的服务端组件,为数据之间潜在的互操作性提供了机遇。无论是在局域网内浏览地理数据,还是在Internet上供成千上万人进行地理信息查询和访问,ArcIMS都可以通过构造不同的软硬件配置来满足这些要求。

ArcIMS满足了目前WebGIS面临的一系列需求,它们包括:

󰂄 󰂄 󰂄 󰂄 󰂄

开放、可伸缩的架构; 不同层次的良好操作性; 高度的可定制性;

完备的管理工具集,既有本地服务管理器,也可以基于网络进行的地图服务管理; 高安全性,不会将矢量数据泄漏给非授权用户。

对于WebGIS学习者而言,了解ArcIMS的体系架构和基于ArcXML的交互通信方式,足以领略WebGIS的基本原理和开发之道,能为我们学习诸如ArcGIS Server这类复杂的GIS服务器软件打下良好的理论和实践基础1。

1

要强调的是,ArcIMS与ArcGIS Server的整个架构没有相通的地方,这种基础只是WebGIS的一种理论和实践过程。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 26第2章 GIS服务器ArcIMS

本章将介绍ArcIMS2的产品架构、组件、管理和开发方式等内容,以方便读者深入了解这一典型的GIS服务器。但本书不会在ArcIMS提供的Web应用开发框架(Application Developer Framework,ADF)上花费过多的篇幅,我们的目标不是讨论一个已知的开发框架,ESRI已经提供了足够详细的开发帮助。我们想做的是开发一个完全属于自己的ArcIMS客户端原型,而本章则是在开发之前必须了解的GIS服务器知识。

2.1 ArcIMS体系架构

ArcIMS整个体系由多个组件(Component)聚合而成,包括Web服务器、ArcIMS应用服务器、连接器、Web应用开发框架(ADF)和ArcIMS空间服务器等。这些组件的协作,使得它们能够管理ArcIMS服务和处理来自客户端的请求并返回响应数据;同时,由于考虑到负载平衡、冗余和满足不同尺度的访问要求,它们也能部署在一台或多台服务器上。

ArcIMS是标准的B/S三层架构,由客户端、中间层和服务器层组成,其结构如图2-1所示。

图2-1 ArcIMS的组成组件

2

ArcIMS安装访问http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.gateway&p=16&pf=215。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.2 ArcIMS服务器层组件

27

ArcIMS架构的第一层是客户端和浏览器层,又分为胖客户端和瘦客户端两种,通过HTTP协议与Web服务器建立通信联系。胖客户端包括ArcMap、Java版的ArcExplorer和ArcPad等移动设备,它们拥有较强的数据查看和编辑功能,但一般在开发和安装上都较为庞大和复杂;瘦客户端是指基于Web浏览器开发的地图浏览器,这些客户端可以通过JavaScript、ActiveX、Java Applet或JSF等技术进行开发。

架构第二层是中间层,包括Web服务器、ArcIMS连接器(Connector)和Web ADF三种组件。Web服务器用于处理来自客户端的HTTP请求,将请求转发到ArcIMS应用服务器,并负责将响应返回到发出请求的客户端;ArcIMS连接器和Web ADF提供了一个在Web服务器、第三方应用服务器和ArcIMS应用服务器之间的通信管道。

架构第三层是ArcIMS的服务器,这是整个架构中最关键的部分,它包含ArcIMS应用服务器和ArcIMS空间服务器两部分。ArcIMS应用服务器负责将来自Web服务器的请求分配到合适的ArcIMS空间服务器;而ArcIMS空间服务器则处理请求,将地图和地理数据绑定以适当格式(ArcXML或二进制流)返回给客户端供后者解析。

因此,当一个ArcIMS请求从客户端发出的时候,首先会被Web服务器收到,然后通过Web ADF或某种连接器发送给ArcIMS应用服务器,后者则将请求再发送给某个ArcIMS空间服务器进行处理,由ArcIMS空间服务器生成响应的信息,按照反方向原路传回给客户端。

对于须要发布地图数据的用户而言,只须使用ArcIMS提供的地图制作工具或其他工具设计一幅AXL或MXD格式的地图文件;对GIS服务器管理人员而言,最关心的是如何保持服务器的荷载平衡、建立服务和地图客户端应用程序的快速生成;对于本书的读者,即想要学习ArcIMS客户端自定义开发的群体而言,最重要的莫过于了解ArcIMS的通信交互方式和语言。

2.2 ArcIMS服务器层组件

ArcIMS服务器层组件是其架构最核心的部分,它包含了空间服务器、虚拟服务器和ArcIMS服务三种对象和概念。其中,空间服务器是ArcIMS产生地图数据的最关键对象,而虚拟服务器则是管理前者的一个虚拟概念,它们的最终目标就是为了新建某种类型的ArcIMS服务。

2.2.1 空间服务器Spatial Servers

ArcIMS的空间服务器是产生地图图像文件和与地图相关信息的核心对象,当它收到

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 28第2章 GIS服务器ArcIMS

一个ArcXML请求时,会调用一个或多个函数来进行相应的处理。每个这样的函数都可以被看作是空间服务器的一种组件,这样的组件种类很多,包括以下几种:

󰂄 󰂄 󰂄 󰂄 󰂄 󰂄 󰂄 󰂄

Image:根据ArcIMS Author产生的地图配置文件AXL生成地图影像文件; ArcMap Image:根据用ArcMap产生的地图配置文件MXD生成地图影像文件; Feature:产生地图要素流;

Query:根据搜索条件寻找匹配的要素; Geocode:执行地址匹配运算;

Extract:将选择的地图要素转换为Shapefile文件; Metadata:发布和搜索地图元数据;

Route:必须安装可选的RouteServer扩展才能使用,用于计算两点或多点之间的路径,但其数据是美国的,不适合中国使用;

󰂄

SDCGeocode:基于RouteServer数据进行地址匹配操作。

那么,一个空间服务器对象是由哪些组件组成的呢?其组成方式分为两种,一种是除了ArcMap Image组件之外的其他所有组件组成的空间服务器;另一种则是仅由ArcMap Image组件组成的空间服务器。其关系如图2-2所示。

图2-2 空间服务器的组件

ArcIMS空间服务器在本质上是一个运行于计算机上的程序进程Aimsserver.exe。在

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.2 ArcIMS服务器层组件

29

Windows平台中,可以在任务管理器的进程列表中找到它。ArcIMS默认安装时,仅有一个非ArcMap Image式空间服务器进程存在。如果在Windows、Solaris和Linux平台上安装ArcIMS时选择了ArcMap Server扩展插件,则会有另外两个ArcMap Image式空间服务器进程存在,即计算机上将同时存在三个Aimsserver.exe进程。Aimsserver.exe进程也可以通过增加server来提高地图处理和显示能力。

尽管如此,空间服务器进程并不能被开发人员直接访问,对其管理开发者仅局限在添加和移除操作上,而空间服务器的大部分交互工作都是通过虚拟服务器进行的。

2.2.2 虚拟服务器Virtual Server

假设我们有两台电脑(即ArcIMS中的Server),每台机器上有五个空间服务器进程,由于不能与空间服务器进程直接进行交互,我们须要寻找一种更好的方式对这10个进程进行管理,这可以使用ArcIMS提出的虚拟服务器概念。

比起空间服务器这类实际存在的对象(进程),虚拟服务器是一个纯粹概念上的管理工具。由于虚拟服务器的类型划分是根据空间服务器组件的功能作为依据的,因此,每一个空间服务器都可以属于一个或多个虚拟服务器。其中唯一的例外是ArcMap Server上的空间服务器,它是在安装ArcIMS时就指定的。在图2-3中,两个ArcIMS空间服务器都由一个名为ImageServer1的虚拟服务器进行管理。

图2-3 一个虚拟服务器管理两个空间服务器

ArcIMS中有多少种类型的虚拟服务器呢?空间服务器有九类组件,因此也就有九种不同的虚拟服务器。其中公共的有ImageServer1、ImageServerArcMap1、FeatureServer1、MetadataServer1四种;而私有的则有QueryServer1、GeocodeServer1、ExtractServer1、RouteServer1和SDCGeocodeServer1五种。图2-4展示了nbjbt这台计算机上存在的七种虚拟服务器,缺失的两种是因为没有安装必要的ArcIMS扩展插件。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 30第2章 GIS服务器ArcIMS

图2-4 ArcIMS的虚拟服务器

虚拟服务器要么是公共的,要么是私有的。当我们使用管理工具时,只有公共虚拟服务器可以提供给用户。我们可以选择产生或改变服务。但私有虚拟服务器的工作隐藏于幕后,它们只是在影像或要素服务时才被调用。

新建一个虚拟服务器对话框如图2-5所示。

图2-5 新建一个虚拟服务器

在新建虚拟服务器的过程中,Server Type有四种选择,除了ImageServer-ArcMap外,其他三种虚拟服务器的Instances属性都是2,即默认有两个实例,而ImageServer-ArcMap属性只有1,即单个实例。同时,我们还可以在不同的服务器上部署虚拟服务器,这个过程只需点击“New Server…”按钮选择一台服务器即可,这样就可以根据载荷的情况在多台服务器硬件上部署虚拟服务器了。增加虚拟服务器,可以间接提升ArcIMS部分功能的处理能力。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.2 ArcIMS服务器层组件

31

2.2.3 ArcIMS服务

无论是空间服务器还是虚拟服务器,其最终目的就是为了生成和管理ArcIMS服务(Service),ArcIMS服务正是ArcIMS对外地图发布的关键所在,也是客户端与GIS服务器通信的接口。

一台服务器上可以同时存在一个或多个不同类型的ArcIMS服务,如图2-6所示,存在一个Image类型ArcIMS服务San。

图2-6 已经存在的ArcIMS服务San

通过ArcIMS Administrator工具,可以新建四种类型的ArcIMS服务,即Image Service、ArcMap Image Service、Feature Service和Metadata Service,由于不同的服务满足不同的访问需求,具有不同的设置。

󰂄

Image Service是最常用的ArcIMS服务,它将地图内容通过JPEG、PNG或GIF图像的形式返回给客户端,每次新的请求都会在服务器端产生一幅新的图像文件。

󰂄

ArcMap Image Service是一种特殊的Image Service服务,它的地图配置文件是由ArcMap或ArcReader产生的MXD或PMF数据。

󰂄

Feature Service是一种通过要素流方式发布地图内容的服务,要素流是一种只在客户端处于打开状态时才存在的临时压缩格式。如果用户希望使用ArcIMS的Java客户端、WFS连接器、ArcMap、ArcReader、EditNotes或使用本地数据时,就须要使用该类型服务。

󰂄

Metadata Service可以发布数据集的数据信息,即元数据。地理数据的元数据描述了数据本身的内容、质量、类型、数据组成和空间位置等信息。

2.2.4 空间服务器实例Instance

每个空间服务器都包含了一个或多个实例(实例本质上是一种线程),它是ArcIMS空间服务器最基本的处理单位。一般情况下,每个虚拟服务器都被指派两个实例(一个进

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 32第2章 GIS服务器ArcIMS

程包含两个线程),但唯一的例外仍是ArcMap Image服务器,每次只有一个实例存在。

我们可以想象得到,实例的数量等同于ArcIMS能够同时处理的请求数量。例如,如果某个空间服务器有两个Image实例,那么它每次就只能处理两个Image服务的地图请求。如果有更多的请求,只能在应用服务器中排队等候空间服务器实例的处理。

2.3 ArcIMS的进程

ArcIMS的空间服务器、虚拟服务器和ArcIMS服务都是一种在逻辑上划分的对象或概念,它们因计算机实际运行的ArcIMS进程的存在而存在,如图2-7所示。

图2-7 ArcIMS的进程

可以看到,ArcIMS的进程有六个,即Aims_AppServer.exe、Aims_Monitor.exe、Aims_Tasker.exe和三个aimsserver.exe,有三个aimsserver.exe的原因是我们安装了ArcMap Image扩展插件,它会产生另外两个空间服务器进程。

这六个进程被分为四种:Application Server、Monitor、Tasker和Spatial Server,下面将对这四种进程进行详细介绍:

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.3 ArcIMS的进程

33

2.3.1 Application Server应用服务器进程

Application Server进程负责的事务是分配来自外部的请求,以保持服务器系统的荷载平衡,它决定了哪一个服务运行于哪一个虚拟服务器之上。由于能监测虚拟服务器上的空间服务器对象的状态,使得它能将请求委托给合适的空间服务器对象去处理。如果ArcIMS同时收到的请求(Request)数量超过了可以使用的空间服务器数量,这些请求也不会被抛弃,而是被存储在应用服务器的序列中等待被提交发送。

应用服务器通过一个名为ArcIMSSite.sez的配置文件保存整个站点的配置信息,该文件在重启ArcIMS服务器时使用。我们可以在Windows平台的ArcIMS安装目录的AppServer文件夹中或Unix、Linux平台的$AIMSHOME/Middleware/Application_Server中寻找到它。如果服务器出现错误,可以删掉这个文件重新启动服务,启动后会重新产生一个ArcIMSSite.sez文件。

另外,Application Server进程占用的默认端口是5353。

2.3.2 Monitor监听进程

监听进程的作用是管理空间服务器进程,包括启动空间服务器进程、保持其运行和停止该进程三件事情。

在ArcIMS启动过程中,Monitor进程会启动空间服务器进程,然后在后台监听着对方,以保持正常状态。与此同时,应用服务器进程会开始与空间服务器进行通信交互。一旦该交互过程中断,应用服务器进程会立刻给监听进程发出指令,重启该空间服务器进程。

2.3.3 Spatial Server空间服务器进程

我们已经在2.2节中详细介绍了空间服务器进程,该进程是一个Aimsserver.exe程序。一台计算机能同时存在多个空间服务器进程,以同时处理多种类型的地图请求业务。

2.3.4 Tasker任务进程

我们知道,在对ArcIMS的地图访问过程中,ArcIMS服务器会在服务器硬件上产生地图图像文件,这些文件都被保存在ArcIMS管理的output文件夹中,如果这些文件不被定期清除的话,长期的访问势必会挤占有限的硬盘空间。

Tasker进程能够监测这些临时文件的状态,如果它们的产生时间与当前之间的间隔大

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 34第2章 GIS服务器ArcIMS

于指定的时间间隔,则临时文件会被删除。

对于ArcIMS服务器而言,它的完整启动过程是如何进行的呢?首先启动的当然是Application Server进程,其后的顺序是:

󰂄 󰂄

Monitor进程登记到Application Server进程;

Application Server进程对Monitor进程进行初始化并对其发出指令,以启动一个或多个Spatial Server进程;

󰂄 󰂄

每个Spatial Server进程都在Application Server进程登记;

Application Server会对每个Spatial Server进程进行初始化,并让每个Spatial Server进程启动一个或多个实例(instance);

󰂄 󰂄

每个实例都会被注册到Application Server;

Application Server在每一个实例上添加ArcIMS服务。

小知识:进程与线程

使用不同语言编写的程序在计算机中只是一堆指令的集合,而真正在计算机中运行的是进程(Process),因此,通常将进程定义为一个正在运行的程序实例。

进程本身并不会运行,它只是线程(Thrend)的容器,真正运行的是包含在其中的线程。单个进程可能包含多个线程,每个线程都有自己的一组CPU寄存器和堆栈空间。每个进程至少拥有一个线程来执行进程的地址空间的代码。如果没有,那么进程就没有存在的理由了,系统就将自动撤消该进程和它的地址空间。

4

3

2.4 ArcIMS连接器和Web ADF

ArcIMS支持多种开发环境,如ASP、ASPX、ColdFusion和JSP等,这让具有不同开发背景的程序员都能开发ArcIMS的客户端程序。

ArcIMS应用服务器与空间服务器的交互语言是ArcXML,因此,ArcIMS需要一种机制将来自这些客户端的请求转换为ArcXML,这个转换是通过ArcIMS连接器(Connector)和Web ADF实现的,它们居于Web服务器和ArcIMS应用服务器之间,起“二传手”的作用。连接器占用的端口一般是5300。

3 4

http://zh.wikipedia.org/wiki/进程。

http://zh.wikipedia.org/w/index.php?title=%E5%9F%B7%E8%A1%8C%E7%B7%92&variant=zh-cn。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.4 ArcIMS连接器和Web ADF

35

2.4.1 ArcIMS应用服务器连接器

可以想到,ArcIMS支持多少种开发环境,就应该存在多少种类型的连接器,因为类似COM的应用程序是无法访问Java类型连接器的。普通的连接器包括Servlet Connector、Java Connector、ColdFusion Connector和ActiveX Connector。

ArcIMS的Servlet Connector是默认安装的连接器,它使用一个Servlet引擎提供Web服务器与ArcIMS应用服务器之间的通信管道。该连接器可以被HTML浏览器、Java标准浏览器和自定义的浏览器使用,同时,它也支持Java版本的ArcExplorer、ArcMap和ArcPad的访问。

Java Connector是一个纯Java的可重用软件组件,它包括一个JavaBean对象模型库和一套自定义JSP标签库。Java Connector驻留于Web服务器中,为JSP和独立的Java应用程序客户端与ArcIMS应用服务器进程搭建起桥梁。而Java Connector中的JavaBeans和JSP标签则能够让你通过HTTP、HTTPS或TCP/IP,在服务器与客户端之间发送请求和接收响应。

ArcIMS的ColdFusion Connector是为ColdFusion服务器程序准备的,它只能用于Windows和Solaris两种平台。ColdFusion是一种比ASP更为简单的语言和开发环境,其文件后缀名为cfm。这些文件运行于ColdFusion服务器上。ColdFusion在国外使用得非常普遍,我们可以浏览ESRI官方网站,会发现大部分页面其实都是cfm文件。但在国内,由于ColdFusion服务器价格高昂等原因,使用较少。

如果使用的开发环境是ASP,那么ArcIMS就必须安装ActiveX Connector,它是一个COM格式的DLL文件。该连接器用于处理典型的地图和查询操作,但它只能在Windows平台上使用。

2.4.2 OGC和基于标准的连接器

OGC标准5是一种公开的地理数据标准集,其中很多标准已经成为事实上的标准。ArcIMS也有可以处理OGC请求和响应的连接器存在,如Web Map Server(WMS)连接器、Web Feature Server(WFS)连接器和CS-W连接器等。

WMS连接器是一种Java类型的Web应用程序,它能为由ArcIMS Image和ArcMap Image发布的数据(地图图片文件)提供一个基于OGC标准的WMS接口,这个接口的交

5

本书将在第7章详细介绍OGC标准。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 36第2章 GIS服务器ArcIMS

互语言不是ArcXML,而是一种纯XML格式。

WFS连接器允许用户发布基于GML格式的要素级地理数据,它可以满足一些矢量型WebGIS的需要,GML的解析文件保存在wfsconnector\\schema\\gml中。

除了提供地图图片文件、矢量数据流,当然还要有元数据的内容,ArcIMS的CS-W连接器提供了一个OGC标准目录服务6(OGC Standard Catalog Service ,CAT2.0)的接口,用于发布ArcIMS的Metadata服务。

除了基于OGC的元数据服务外,ArcIMS还提供了另外两种连接器用于发布元数据,它们是Z3950连接器和OAI-PMH连接器。

2.4.3 Web应用程序开发框架(Web ADF)

用户可以从第一行代码开始开发完全属于自己的ArcIMS浏览器程序,这须要耗费许多精力,并熟悉相关知识。除此以外,ArcIMS也提供了一个开发框架让用户能够在极短的时间内搭建出一个客户端应用程序或Web服务,这就是Web ADF。

Web ADF开发的Web应用程序和Web服务能够访问多种类型的GIS服务器,包括ArcIMS、ArcGIS Server、ESRI提供的ArcWeb Services和符合OGC标准的WMS Map Service,而访问这些服务器使用的Web控件和模板都是一样的。这种多源架构的好处在于能够将不同来源的地图服务进行叠加,就好像对待图层一样能够添加到同一个地图内容中。

Web ADF为.NET和Java程序员分别准备了开发环境,即Web ADF for the Microsoft .NET Framework和Web ADF for the Java Platform:

󰂄

Web ADF for the Microsoft .NET Framework与Visual Studio环境紧密结合,它与ArcIMS的服务交互由ArcIMS对象模型负责,该环境只能在Windows平台上使用。

󰂄

Web ADF for the Java Platform包含了基于Web控件的Java Server Faces(JSF),而它与ArcIMS服务的交互由Java Connector负责。这一过程可用于所有的平台。

小知识:Servlet引擎

我们在介绍Servlet Connector时,曾经提过Servlet引擎的概念,到底什么是Servlet引擎呢?搞清楚这个问题,可以解释在安装ArcIMS时的一个步骤。

6

关于CAT2.0,可以访问http://www.opengeospatial.org/standards/cat。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.5 ArcIMS的管理组件

37

Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。它在Web浏览器或其他HTTP客户程序发出请求时,担当与HTTP服务器上的数据库或应用程序之间的中间层。由于Servlet是用Java编写的,并能够处理请求,这就需要某种Web容器来调用它们(就像ASP文件必须在IIS这个容器内才能运行一样),这种容器一般被称为Servlet引擎,常见的Servlet引擎有Tomcat和ServletExec等。

Tomcat或ServletExec这样一种容器负责监听任何对这些servlet的访问并给出响应,由于ArcIMS的Servlet连接器是默认安装的,这就解释了为什么一定要安装servlet Engine的原因。

如果ArcIMS不安装Web服务器IIS(或Apache),只是依靠Servlet Engine来支持Servlet Connector发布服务,这种做法是否可行呢?完全可以!由于Servlet Engine一般占用8080端口,可以通过http://127.0.0.1:8080/xxx(地图文件夹)来访问。但事实上,在访问一个服务器的时候,一般是不习惯带端口的,即通常使用默认的80端口来访问。这就需要一种协调机制,即使用IIS或Apache,让访问从占用80端口的服务“传递”到占用8080端口的Servlet Engine中。这样就符合访问习惯,即http://127.0.0.1/XXX就可以访问一个站点了。

2.5 ArcIMS的管理组件

在了解ArcIMS的服务器层、连接器和Web ADF等原理性内容之后,须要开始了解如何使用ArcIMS服务器。ArcIMS中拥有多种不同功能的管理程序,便于用户制作地图、产生服务、开发Web客户端应用程序和调整监测WebGIS站点的运行。

2.5.1 Author:配置地图

在ArcIMS中,有两种方法来制作地图,一是使用ArcMap生成MXD文件,但它必须安装ArcMap Image扩展组件;另一种是使用Author工具来生成一个ArcXML格式的AXL地图配置文件,如图2-8所示。

Author允许用户选择地理数据来生成自己想要发布的地图,这些数据可以是Shapefiles、影像数据或来自ArcSDE的图层。用户添加数据图层后,还可以调整图层显示顺序和渲染方法等。如用户可以改变一个面图层的名称,其符号样式为蓝色多边行填充,深蓝色的外框线,并且带有橘黄色、14点、Arial字体的标注等。

除此以外,使用Author还可以根据用户的要求任意改变多边形、点、线和文字标签的显示,设定其显示的比例尺范围,使得某些要素只在一定比例尺范围内才显示。此外,还可以设定表格数据查询的参数,或地理编码时基于街道地址的精确坐标点。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 38第2章 GIS服务器ArcIMS

图2-8 Author工具

在ArcIMS帮助的《ArcIMS Quick Start tutorial》第一个练习中,读者可以获得完整的Author使用方法。

2.5.2 ArcIMS Administrator:发布服务

生成地图文件,就可以通过GIS服务器ArcIMS将它作为一个服务进行发布了。 ArcIMS发布地图的工具是ArcIMS Administrator,其主要的作用是创建和启动地图服务。ArcIMS Administrator还有其他功能,如用户可用它来维护ArcIMS服务器的Web站点文件夹、文件输出路径、临时数据清除时间间隔等;也可以用它来增加或配置ArcIMS空间服务器、平衡请求和应答压力以提高其运行效率,以及查看网站的统计信息等。

当然,ArcIMS的最主要功能还是新建地图服务,如图2-9所示。

在新建地图服务时,用户必须设置服务名、服务使用的地图文件和选择必要的虚拟服务器。除此以外,用户也可以设置地图输出的一些参数,以实现自己需要的功能。

第一次登录ArcIMS Administrator程序时,用户必须设置用户名和密码。如果用户忘记了密码,可以按照如下步骤重新设置:

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.5 ArcIMS的管理组件

39

图2-9 在ArcIMS Administrator中新建地图服务

󰂄 󰂄 󰂄

依次停止Tasker、Monitor和Application Server服务;

打开ArcIMS安装目录中的AppServer文件夹,删除AimsAdmPw文件; 依次重启Application Server、Monitor和Tasker服务。

再次登录时,会重新出现对话框要求设置ArcIMS Administrator的用户名和密码。

小知识:Application Server无法启动的解决办法

如果启动Application Server时状态栏出现“The URL http:// is invalid or ArcIMS is not running”信息,就不会出现用户名和密码对话框供管理员登录。

导致这一错误的原因要么是Application Server无法连接到ArcIMS Servlet连接器,要么是Servlet连接器无法连接到ArcIMS Application服务器。我们可以按照以下步骤去查找问题所在:

󰂄 在“服务”列表中确认ArcIMS Application Server进程是否已经启动;

󰂄 确认Web服务器是否启动,这个过程只须输入http://即可检验,查看是否会

出现例子页面。在大部分情况下,这里往往就是症结所在,问题可能是无意中安装过其他带有Web服务器的程序,如Oracle数据库会自动带有Apache服务器。此时,可关闭Apache,重新启动IIS。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 40第2章 GIS服务器ArcIMS

󰂄 在ArcIMS Diagnostics页面中检查ArcIMS Servlet Connector的配置是否正确;

󰂄 如果ArcIMS Diagnostics页面中第一项测试成功,但第二项测试失败,可以检查Esrimap_Prop

文件中的appServerMachine变量是否为ArcIMS Application Server组件部署的服务器名或域名。

此外,读者还应该习惯用阅读ArcIMS的日志文件来了解ArcIMS的运行情况和故障原因,关于这一技巧,读者可以访问ESRI支持中心网站。

7

2.5.3 ArcIMS Web Manager:生成站点

在ArcIMS9.2版本之前,ArcIMS中带有一个名为Designer的程序用于快速生成HTML或Java类型的客户端程序。在这一版本中,还可以安装一个额外的组件Web Manager来实现站点的快速生成。如图2-10所示。

图2-10 Web Manager

Web Manager有.NET和Java版本,不同版本的Web Manager将生产不同的Web应用程序。在安装Web Manager之后,就可用它新建一个Web地图应用程序。

在ArcIMS菜单中点击“ArcIMS Web Manager for Micorsoft .NET Framework”,就可以启动一个名为ArcIMS Web Manager的Web应用程序(我们可以在Web服务器中看到它的文件夹,如IIS的wwwroot文件夹中的ArcIMS文件夹)。登录该程序,点击“Create Web Application”链接即可。

在点击该链接后,页面会逐步要求用户设置以下内容:

7

http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&d=20844。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.5 ArcIMS的管理组件

41

󰂄 󰂄

Web应用程序名称;

该Web应用程序访问的地图服务(能够访问的地图服务有ArcGIS Server服务、ArcIMS服务、ArcWeb服务和WMS服务);

󰂄 󰂄 󰂄

地图服务的显示坐标系; 地图影像图片的透明度;

须要在Web应用程序上出现的任务工具(Editing工具、Find Address工具、Find Place工具、Geoprocessing工具、Query Attributes工具和Search Attributes工具);

󰂄 󰂄 󰂄 󰂄

Web应用程序的标题文字; 网站主题类型; 页面上的链接;

Web页面上是否出现图层表(TOC)、鸟瞰地图、工具条、指南针和比例尺。

逐项点击设置后,很容易得到一个ASP.NET类型的Web应用程序,该程序的文件仍然保存在Web服务器的数据文件夹,如IIS的wwwroot中。最后定制的WebGIS应用程序如图2-11所示。

图2-11 快速产生的Web应用程序

2.5.4 Designer:快速生成的另一种选择

尽管ArcIMS Web Manager可以快速生成一个.NET或Java版本的Web应用程序,但

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 42第2章 GIS服务器ArcIMS

这并不是ArcIMS唯一的站点快速设计工具,ArcIMS仍然保留了Designer这个程序,用于快速建立HTML、Java Applet和标准Java类型的Web应用程序。

Designer工具在ArcIMS Administrator界面中不再出现,用户可以在ArcIMS菜单中寻找到它的启动图标。

与Web Manager类似,用户同样须要在Designer工具中设置一系列的属性和参数,这样就可以快速地生成不同类型的Web应用程序站点。

2.6 ArcIMS自定义开发方式

有了Web Manager和Designer就可以高枕无忧了吗?如果用户的需求只是简单地显示和查询地图信息,这两个快速生成工具当然完全能够满足需要,但如果用户的要求更多一点,更复杂一些,就必须想办法进行自定义开发了。

一般的自定义开发方式分有三种:

󰂄 󰂄 󰂄

使用Web ADF提供的Web控件和API进行自定义开发; 在HTML或Java浏览器的基础上进行自定义开发;

完全从头开始进行服务器端应用程序或浏览器端应用程序开发。

ArcIMS提供了一个统一且完整的开发框架,即Web ADF,旨在实现一个统一管理且支持多用户的企业级GIS解决方案,开发人员能在服务器端和客户端应用程序环境中使用这些解决方案。

使用Web ADF来开发自定义ArcIMS客户端的好处是显而易见的,首先,它提供了丰富的,并且已经包装好的WebGIS控件,如Map控件、TOC控件、MapTips控件、ZoomLevel控件等,极大地简化了开发过程,降低了开发的难度。更重要的是,在9.2版本以后,Web ADF已经能够支持多种数据源。但基于Web ADF开发的不足之处也存在,它将整个地图交互过程严密地进行了封装,使得我们试图一窥门径的可能性降低了许多。

在Designer工具生成的HTML/JavaScript类型浏览器客户端上定制又如何呢?我们知道,单凭HTML是不会出现地图效果的,只有使用JavaScript配合,才能出现“动态”地图。当我们在一个WebGIS站点上缩放地图的时候,绝不是有一个特殊的控件使得地图产生缩放,而是前后出现了两张不同的地图图片,由于间隔时间短,使我们产生了“动态”的感觉。

但使用HTML/JavaScript类型客户端定义开发的难度颇高,一方面,编写JavaScript

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 2.7 本书的第一个目标

43

代码并不是许多Web程序员的专长;另一方面,该客户端大量的JS文件和函数着实让人头痛不已,其学习曲线非常陡峭。

第三种方法是从头开始编写完全属于自己的WebGIS客户端程序,这种方法复杂的地方只在于如何与一个HTML的DIV进行交互,这种方法适合大部分程序员,具有不同背景的开发人员都可以根据需求进行完全开发。他们只需将这种交互产生的ArcXML请求使用自己最擅长的服务器端技术或客户端提交技术发送给GIS服务,并解析从GIS服务返回的ArcXML响应即可。

小知识:服务器端的Web程序和基于浏览器的Web程序

“城头变换大王旗”,曾几何时,Web开发人员的目光几乎全部集中在服务器端,在ASP、JSP、JSF和ASP.NET等技术的飞速替代和迅猛发展中,似乎很少有人愿意停下来瞥一眼浏览器端的Web程序。

产生这一现象的原因并非不能理解,首先,在浏览器端运行的脚本语言主要是JavaScript,虽然它也挂着一个“Java”的名头,但长期以来Web程序员只将它看作是一种玩具语言,除了在HTML页面上制造几个无伤大雅的动态效果外,很长一段时间内并未受到充分的重视;第二,JavaScript的开发工具始终不太完善,远不及一些商业IDE,而且许多开发人员长期认为它的调试过于困难;第三,由于目前流行的多款Web浏览器在JavaScript的标准支持上并未统一,使得开发人员可能须要针对不同浏览器编写不同的JavaScript,更加增加了Web开发人员的反感。

虽然Web程序员也知道,基于表单的“完全刷新”式数据提交方式并不理想,但也想到了一些规避的方法,如Frame或IFrame页面等。直到Jesse James Garrett在其博士论文中发明了Ajax这一词语,并由Google率先在Gmail等应用中首先加以应用后,Web程序员才恍然大悟,使用浏览器端的脚本语言JavaScript,DOM和XMLHttpRequest对象居然能创造出如此绚丽的UI和交互效果。

目前,纯浏览器端的框架和类库已经有多种,如ExtJS、YUI、Dojo、JQuery等,有些已经使用在大规模的商业程序之中,如ESRI ArcGIS Server的 JavaScript API,就是基于Dojo开发的。

8

2.7 本书的第一个目标

在全面了解和熟悉了ArcIMS这一GIS服务器的体系架构、组件、程序进程和开发方式等内容后,我们将开始迈向本书的第一个目标:使用Ajax等技术开发一个基于浏览器

8

Dojo的官方网站http://dojotoolkit.org/。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS 44第2章 GIS服务器ArcIMS

的WebGIS客户端程序。

为什么要选择基于浏览器的JavaScript,而不是ASP、JSP或开发环境更好的ASP.NET呢?第一个原因是为了适应具有不同开发经验的Web技术人员,毕竟与地图交互的那点代码无论如何都是要用JavaScript来写的,还不如让整个过程的语言统一;第二,Ajax、Dojo等浏览器端客户端技术如此火热,没有理由弃之不用。

在下一章中,我们将详细介绍与ArcIMS进行交流的语言ArcXML,并开发和介绍测试ArcXML的一些常用工具,这是开发一个ArcIMS浏览器应用程序的关键之一。

WebGIS开发实践手册——基于ArcIMS、OGC和瓦片式GIS

因篇幅问题不能全部显示,请点此查看更多更全内容

Top