ArcIMS体系结构

         ArcIMS可以运行在一个分布式环境中,包含客户端和服务器组件。一个完整服务的运行过程可以简单的描述为:一个客户端向服务器发送请求信息,服务器处理请求并返回信息到客户端,客户端将所获取的信息展现给终端用户。

 

ArcIMS空间服务器(ArcIMS Spatial Server

ArcIMS空间服务器是ArcIMS的中心枢纽,承载着高负荷的计算任务,对地图数据的请求和相关信息进行处理。当接收到一个服务请求,ArcIMS空间服务器主要可以完成以下功能:

Image—从在ArcIMS AuthorArcMap中创建的地图数据中创建影像文件

Feature—缓冲地图特征数据

Query—查找和搜索条件相匹配的特征数据

Geocode—执行地址匹配操作

Extract—从选择的地图特征数据中创建shapefile

Metadata—打印出metadata数据

Route—在一系列的点之间计算路径距离

 

两个后台的进程支持着ArcIMS空间服务器的运行:ArcIMS MonitorArcIMS Tasker,在Windows中它们作为Windows服务运行,在UnixLinux中作为daemon进程。

ArcIMS Monitor跟踪ArcIMS空间服务器的状态。当系统重启时,ArcIMS Monitor将自动恢复ArcIMS服务。

ArcIMS Tasker清除output目录中的文件。这些由空间服务器创建,以支持ArcIMS服务的文件,将在用户定义的时间间隔后被清除。当前服务为地图服务时,用户发送请求得到的数据均是由ArcIMS空间服务器对请求产生响应,返回的数据是图片,保存在output目录中,ArcIMS Tasker会在一定时间后清除这些图片数据。

ArcIMS应用服务器(ArcIMS Application Server

ArcIMS应用服务器控制着传入请求,跟踪当前哪些服务运行在哪些ArcIMS空间服务器中。ArcIMS应用服务器将请求传输到适合的空间服务器。应用服务器是一个Java应用程序,在Windows操作系统中作为一个Windows服务,在UnixLinux中作为一个daemon进程。

ArcIMS应用服务连接器(ArcIMS application server connectors

ArcIMS应用服务连接器将Web服务器和ArcIMS应用服务器连接在一起。ArcIMS Servlet ConnectorArcIMS的默认连接器。它使用ArcXML Web服务器和ArcIMS应用服务器之间传递信息。

相对于ArcIMS Servlet Connector,还有几种其他的连接器可供选择:

ColdFusion Connector

ActiveX Connector

ArcIMS Java Connector

ArcIMS .NET Link

ColdFusionActiveX连接器配合自定义的客户端工作,并且将自己的语言转换成ArcXMLArcIMS Java Connector通过JSP客户端或独立的Java应用程序和ArcIMS应用服务器保持通信。.NET Link提供TCP/IPHTTP连接到应用服务器。

关于连接器的相关资料,在ArcIMS Help中搜索主题:

More about the ArcIMS Servlet Connector

Connectors and ArcMap Server

The ArcIMS documentation set

ArcIMS Viewers

当使用ArcIMS Designer创建了一个为用户提供地图内容的网站时,可以选择三种ArcIMS ViewersHTMLJava Standard、或Java Custom。通过定制这些Viewers或定制客户端可以达到基本相同的效果。另外,还可以使用比较成熟的客户端,如ArcMapArcExplorerMetadata Explorer

从本质上说,viewer或客户端就是Internet GIS应用或网络应用的网站,提供用户需要的地图服务。

当用户访问这些网站的时候,他们可以在viewer中看到嵌入在网站中的定制地图。整个viewer决定了网站的外观和功能。

相关viewer的相关资料,在ArcIMS Help中搜索主题:

Choosing a viewer for your Web site

Designing a Web site

Overview of using the ArcIMS Viewers

arcIMS 客户端 连接器的选择
客户端选择。
   就IMS来说提供了 HTML Viewer ,Java Standard Viewer Java Custom Viewer
 
   Java Standard Viewer,Java Custom Viewer功能差不多。 对于程序员、中国客户来说。Java   
Standard Viewer基本不用。典型的胖客户端,Image 和Feature MapServices 都要下载APPLET,客户端还要装jre。随着微软IE对applet的抵制 和 Arcgis Server(远程数据分析,Feature MapServices的替代)成熟,估计这种胖客户端没什么大用了,至少我觉得在中国是这样的。就我接触的webgis项目中,applet的应用不是很多,政府部门更是因为安全性,很少用。(http://www.668map.com/)用applet,但是假如我们对于大数据量的gis应用,有还多业务查询、分析。估计把数据放到缓冲中的做法就悬了。还有假如我要加遥感应用,数据量大的更是可怕。 我个人对Java Viewer前景不是看好。另外AJAX技术的成熟,applet基本没什么地位了。

   HTML Viewer:AJAX的成熟。随着web程序的流行,xhtml,javascript,css的成熟(对不同浏览器有统一标准就完美了,不过客户端 IE就现在还是老大)。arcgis server的客户端也是html view(没办法.net,j2ee还是以浏览器为主要客户端的)。另外html,xhtml是如此的轻便,页面是可以如此的漂亮,扩展,维护也不用编译什么的。虽然不支持Feature MapService,但Feature MapService的应用可以由arcgis server实现。http://maps.google.com

连接器选择。
.NET Link 、ActiveX 、AppServerLink 、ColdFusion 、General、Java 、Servlet 、WMS
思想就是把ArcXML封装了,再向ArcIMS发送请求,客户端展示。
下面以arcIMS提供了例子探讨一下Servlet Connector ,javaconnector。请自行配置htmlview和javasconnector的例子。

Servlet Connector:修改viewer.htm,使jsForm.htm 可以在页面中看到。(<FRAMESET ROWS="30,*,30,50"—)

jsForm.htm加载地图前代码
......
function passXML() {
}
......  
加载地图后代码
......
function passXML() {
var XMLResponse='<?xml version="1.0" encoding="UTF-8"?><ARCXML
version="1.1"><RESPONSE><IMAGE><ENVELOPE minx="116.325273231549" miny="39.9126536248245"
maxx="116.741417757427" maxy="40.08" /><OUTPUT url="http://zhangkj:8080/Output/txzy_ZHANGKJ188425841.jpg" /></IMAGE></RESPONSE></ARCXML>';
parent.MapFrame.processXML(XMLResponse);
}
........
在aimsXML.js中看函数function htmlSendToServer(URLString,XMLRequest,theType)和function
processXML(theReplyIn) 一目了然了,htmlSendToServer把我们组合的arcXML发送到com.esri.esrimap.Esrimap?ServiceName,返回的XMLResponse由processXML显示出来。
核心代码就这些,你在javascript文件夹中的大部分js文件是 组合请求的arcXML字符串 和解析从arcIMS返回的arcXML字符串。其他js文件是DHTML,参数,公有函数等。看上去挺吓人的。我个人觉得htmlview例子里的js代码可重用性很高。但必须很熟悉这些代码,函数。和其他连接器比较,htmlview可以说是最简单的了。熟悉html,熟悉javascript,有arcXML文档,这就够了。

剩下的是用 javascript构造不同的arcXML,请求arcIms, 用dhtml,javascript显示返回arcXML.
(大家可以看一下jspForm.jsp,用com.esri.aims.mtier.io.ConnectionProxy类来请求IMS服务。和上面的流程差不多。http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.gateway&p=16&pf=217上面讲的都不错,从更深的角度讲了各个连接)

javaconnector:把arcXML文档用java对象封装起来。组合arcXML的工作由纯面向对象的java语言来做,
com.esri.aims.mtier.io.ConnectionProxy 对象请求ims服务器,返回java对象的响应。servlet connector 是字符串,而java connector是java对象。这样java语言的优势,java对象的可操作性,易用性,方便性就显露出来拉。javaconnector对 arcIMS服务动态增加等。

Map map=new Map();
map.initMap(mapCon,750,false,false,false,false);
map.setHeight(500);
map.setWidth(400);
map.refresh();  
String url=map.getMapOutput().getURL();
Map对象封装ArcXML,map.refresh() 请求IMS服务。 请求完了Map对象包括响应的内容。(其实map.initMap也触发了一次请求 GET_SERVERINFO。javaconnector的类库设计的有问题。)

servlet connector 和 javaconnector比较

一、性能
   servlet connector: 用户下载javascript文件。组合arcXML在客户端执行。如果用户机器不是太慢的话,性能应该是最好的,服务器压力也小。据说ims 群集安装,系统配置的好的话,可以支持几百万用户。
   javaconnector:比不上servlet connector。1、java对象的封装,在服务器端运行。(不过可忽略)2、Map对象建立的性能损耗。map.initMap(), map.refresh()都要触发请求ims。操作一次地图 新建一个map对象的做法是不可能的。有两个解决 把map对象放到Session中和 map对象池。 把map对象放到Session,用户多的时候,web服务器压力很大,多用户时不可行。 map对象池 ,map对象的钝化,激活(EJB的提法)操作复杂。因为不同用户当前操作状态不一样(在arcgis9 server中,状态保存是个值得研究的地方)。运用javaconnector 性能问题得考虑。(个人觉得javaconnector类库建立的有问题,用反编译工具看,代码设计有改进的地方,可以解决map对象初始化问题)。

二、功能:
   servlet connector: arcXML的所有功能。 问题在 组合arcXML和显示响应的arcXML的环节上。因为这些用javascript实现。有一定局限性。 比如,我要把 响应arcXML 的查询结果排序。实现起来费事。(arcXML查询不支持order by ).不可以对ims服务操作。
   javaconnector:arcXML的所有功能。可以用java语言的优势处理很多问题。比如前面排序。动态图层、与遥感影象图的叠加实现起来都比较方便。还可以结合arcSDE的java接口处理元数据。

待续.....


posted @ 2007-06-17 20:19  忧郁的风  阅读(321)  评论(0)    收藏  举报