ArcIMS--基于WEB的GIS开发

来源:百度文库 编辑:神马文学网 时间:2024/10/01 10:09:27
进行ARCIMS的二次开发,必须首先理解ArcIMS的原理:
ArcIMS是一个基于B/S结构的服务,它与我们常常谈论的ArcMap等程序完全不同。在安装完IMS后,我们必须先使用Author设计一个要发布的地图,在这个工具里面可以引入数据,进行着色,标注,显示提示文本等信息,它建构的地图将会在将来的地图发布中出现。当我们完成一幅地图的设计后,将把它保存为一个AXL文件,这是一个ArcXML文件,它里面保存在许多地图的原始信息,比如数据的来源,范围,如何着色等等。
生成了AXL文件以后,我们就需要建立数据服务,即想办法让这个数据可以在网络上发布。建立服务的工作是在管理器中完成的,服务有多种形式,如矢量、栅格和ArcMap服务等。服务是运行在内存中的一段进程,我们可以将它理解为一个运行在后台而没有界面管理的程序——这种程序很多,MYSQL、ORACLE都是服务,我们不打开他们的管理界面程序照样可以使用这些服务。对这些服务,我们需要做的是监听它们的默认端口,看看它接收和返回什么信息。
ArcMap服务是一个使用MXD文件的地图服务,这是因为Author的设计能力有限,如果需要进行复杂的着色,可以使用ArcMap来设计,然后我们直接使用MXD文件来完成这项工作。这个服务不是默认安装的。
建立了一个数据服务后,在服务器上要干的事情都完成了一大半。接下来的工作就是产生一个WEB站点,用于监听端口以实现电子地图的效果。这个工作我们即可以自己从头编写代码(这就是二次开发),也可以使用IMS自己带的设计器来设计一个站点。设计器可以使用HTML/javaSCRIPT和java两种方法来建构一个站点,但无论如何,这个站点都是用于监听相应的服务的。
以HTML/javaSCRIPT站点为例,它是如何工作的呢。我们知道,HTML中无论如何也出现不了什么“动态”的效果,只有使用javaSCRIPT配合,才能有点DHTML的效果出现,勉强出现一点“动”。当我们在一个WEB站点上看地图的时候,比如放大地图,绝对不是说有一个特殊的控件使得地图在缩放,而是前后出现了两张不同的图片,由于间隔时间短,使得我们有了这个“动态”的感觉。
当我们使用放大工具在图片上拖曳的时候,页面会调用一个javaSCRIPT函数,产生一个ArcXML请求,这个请求包含了相关的信息,如希望出现的新图片的范围,数据等等。这个请求被一个表单发送到相应的服务,服务接收到请求后,会进行处理,它除了产生一张图片,还会沿反向路径传递出ArcXML响应,而我们的页面程序,在接收到响应后,需要对这个响应进行解析,如果是查看地图,就是解析出新图片的地址,然后将它传给一个图片对象,这样,图片就改变了,我们看起来地图就被放大了。
上面简要介绍的这些,就是XML的基本原理。实际上,XML的请求有多种,而解析方法也有很多形式,特别是所谓的“连接器”也有不同的类型,使得进行二次开发拥有多种方式,但总体而言,使用HTML/javaSCRIPT是最简单的,也是最麻烦的。
ArcGIS Server的编程模型
使用ArcGIS Server编程,实际上就是利用运行在服务器上的ArcObjects编程。原来在桌面系统上开发ArcObjects应用的开发人员能够在学习远程ArcObjects编程的规则和编程模式之后进行ArcGIS Server的应用开发。熟悉ArcObjects编程模型的开发人员只需要使用框架(ASP.NET 和JAVA)进行Internet 编程的知识。
ArcGIS Server有三种API:Server API,.NET Web Controls以及Java Web Controls。
Server API就是ArcObjects的对象库。远程ArcObjects编程与在桌面应用中ArcObjects编程基本是一致的,需要的更多编程细节和规则是:
(1) 如何连接到服务器;
(2) 得到运行在服务器上的服务器对象;
(3) 在服务器上创建新的对象;
(4) 使用远程ArcObjects编程的最佳方式。
剩下的工作就是如何使用ArcObjects的对象完成自己的工作了。ArcGIS Server对象库包括细粒的ArcObjects对象和粗粒的ArcObjects对象,它们按功能逻辑划分成不同的组件。具体的划分和功能请参考软件的联机帮助。
其中服务器对象是粗粒的ArcObjects对象,其运行在SOM上,在9.0版本中,提供MapServer和GeocodeServer对象。服务器对象使用细粒的ArcObjects对象,应用开发可以使用这些粗粒的服务器对象,也可以通过粗粒的服务器对象来访问ArcObjects中细粒的对象。服务器对象可以用GIS服务器管理员提前配置生成。
使用ArcGIS Server编程时将会涉及到Server Context、Pooling、Stateful以及Stateless等概念。Server Context是服务器上下文,是运行一组服务器对象的服务器上的保留空间,由运行服务器对象的服务器管理。我们可以通过持有上下文来保持一个服务器对象活动,服务器对象就生存在服务器上下文中,通常,我们可以通过以下方式获取一个服务器对象:
som = serverConnection.ServerObjectManager
sc = som.CreateServerContext(“usa”, “mapserver”)
so = sc.ServerObject
释放一个服务器对象可以通过sc.ReleaseContext来实现。
池式(Pooling)的服务器对象提前被构造和初始化,它能限制实例的个数,实例能被多个会话共享,用来支持更多用户的请求。非池式的对象每次需要重新构造和初始化,并在返回服务器时析构,它能限制最大实例数,每一个会话使用一个实例 。
服务器对象可以有状态和无状态使用。无状态(即只读)使用时,可以和其他用户、并发会话共享服务器对象。有状态(即读写)使用时,不可以和其他用户、会话共享服务器对象。因此,池式的服务器对象只能在无状态行为中使用,非池式的服务器对象能在有状态的行为中使用。大多数GIS Web应用都是有状态的,通常可以通过写一个有状态的Web应用来调用无状态的Web服务器对象。
使用ArcGIS Server开发Web应用之外,开发人员也可以用它来创建GIS Web Services。和Web应用不一样的地方是,Web Services是提供给其它应用程序使用,而不是最终用户使用。ArcGIS Server支持两种类型的Web Services:Application Web Services和ArcGIS Server Web Services。Application Web Services能够用本地的Web Server上的Web Services框架来实现,例如ASP.NET Web Service[WebMethod]或者Java Web Service[Axis]等,此时,我们需要使用本地或应用程序自身的数据类型作为参数或返回值来传递。ArcGIS Server Web Services是处理和执行运行在GIS Server上的MapServer和GeocodeServer对象,这两个对象具有SOAP接口,能够处理SOAP请求。ArcGIS Server Web Services能够使用所有的ArcObjects对象类型,例如ArcObjects Geometry类型。
型。