GIS技术入门---WEB应用篇

发表于:2008-02-02来源:作者:点击数: 标签:GIS技术
在开发基于WEB的GIS应用时,我们往往要面对的不仅是软件开发的问题,还必须要面临的是涉及到服务器端GIS应用服务的设置问题。对于不同的GIS产品,应用服务的配置也存在着差异。本文以Geomedia5.0为例,讨论从零开始建立一个基于WEB的GIS应用过程中值得关注的
在开发基于WEB的GIS应用时,我们往往要面对的不仅是软件开发的问题,还必须要面临的是涉及到服务器端GIS应用服务的设置问题。对于不同的GIS产品,应用服务的配置也存在着差异。本文以Geomedia5.0为例,讨论从零开始建立一个基于WEB的GIS应用过程中值得关注的几个关键技术环节。
一、 安装GIS应用服务
开发基于WEB的GIS应用,首先要在服务器端安装GIS应用服务,安装不存在什么问题,按部就班进行即可,有两点值得注意:一是必须以Administrator用户身份登陆系统进行安装。二是安装完成以后,必须保证将licence文件GeoMedia_WebMap.lic复制到安装目录的Program子目录中,否则GIS的Geomedia WebMap服务不能正常启动。
为确保所开发的WEB应用程序能正确运行,除了必须正常启动上面所说的Geomedia WebMap服务以外,还需要正常启动以下两个服务,IIS Admin Service服务以及World Wide Web Publishing Service服务。
安装完应用服务以后,接下来要安装图形元件。在Geomedia中,该图形元件的安装程序位于安装完成后的GIS系统目录下的ACGM子目录中。
二、 服务端配置
下面我们以一个实例来解析配置中的关键技术环节。假定我们要将实际目录D:\tec_ready发布到WEB上,该目录中包含所有基于WEB的GIS应用设计。我们必须经历的配置环节如下:
发布实际工作目录
在服务器的管理工具中,使用Inte.net服务管理器创建虚拟目录,将实际目录D:\tec_ready发布为tec_ready。
缓存虚拟目录
运行一个含有GIS的WEB页面,对于服务器端而言必须提供一个缓存区域,针对本例,可在服务器上随便建立一个目录,例如创建目录D:\cache,然后将这个目录发布到WEB服务器上,虚拟目录名称必须为cache。
分布式COM配置
运行DCOMCNFG.EXE管理工具,这个程序位于服务器的WINNT\SYSTEM32目录下,可以查找到该程序运行,也可以在开始菜单中使用“运行”菜单程序,直接输入DCOMCNFG即可。
选择“默认安全机制”标签页,编辑“默认访问权限”功能项。必须保证如下五个用户具有允许访问的权限。才能使Geomedia的COM组件正常运行。这五个用户分别为:Administrator,INTERACTIVE,SYSTEM,Internet来宾帐号,启动IIS进程帐号。“默认启动权限”功能项也同时保证这五个帐号具有允许调用的权限。
最后拷贝GIS安装目录的CFG子目录下的OOPCOMP.ASP文件到自己的开发目录中,按照以上例子,则拷贝该文件到D:\tec_ready这个实际目录中。至此所有的安装配置工作全部准备就绪。
三、 开发思路
编写一个B/S结构下在浏览器上显示地理信息系统的应用程序,和编写一个C/S结构下在客户端显示地理信息的应用程序,其思路有很多不同,关于客户端的编程在我的另一篇文章《GIS技术入门---开发篇》已经介绍过,对基于WEB的GIS开发,朴素的开发过程包括六个步骤:获得地图服务对象、指定坐标系统、连接数据源、定义特征类结果集、设置显示规则、产生地图。
获得地图服务对象(MapServer)
获得MapServer对象通过两个步骤实现,首先使用IIS的SERVER对象创建MapServerManager对象,然后通过MapServerManager对象的MapServer方法获得MapServer对象,代码描述如下:(ASP程序,脚本语言VBScript)
<HTML><HEAD></HEAD><BODY>
<% Set objSesMgr = Server.CreateObject("GMWebMap.MapServerManager")
Set objMS = objSesMgr.MapServer("")
objMS.Clear %>
</BODY></HTML>
MapServerManager对象管理系统的MapServer进程,如果要成功的获得一个MapServer对象,系统当时必须有一个空闲的可用的MapServer进程,如果没有任何可用的进程,MapServerManager对象会等待一个指定的时间段(time out)同时轮询直到得到可用的MapServer进程。
MapServer对象会缓存通过服务器产生的最后一个地图的相关信息,这些信息包含连接信息、特征结果集信息等。所以有了上面例程中的objMS.Clear语句。MapServer对象的Clear方法用来清除缓存的特征类信息,如果要清除连接信息,则需要使用DataSource的Remove方法。
指定坐标系统
这一点类似于客户端的开发,在WEB的开发中一般通过坐标系统文件为MapServer对象指定坐标系统。Geomedia WebMap有专门的实用工具“Define Coordinate System File”来产生坐标系统文件,其后缀名为csf。实现该功能的代码很简单,调用SetCoordinateSystem方法即可。
<% objMS.SetCoordinateSystem "D:\tec_ready\myMap.csf" %>
连接数据源
GeoMedia WebMap允许连接多种数据源。通过MapServer的Connect方法进行连接,该方法的描述为:
MapServer.Connect GDOServer, DBName, Source, ConnectionName
其中GDOServer表示目标数据源的类型,DBName表示数据库名称,Source表示连接的属性信息,ConnectionName表示当前产生的连接的名称。我们通过介绍最常用的连接SqlServer数据库的方法进一步了解各个参数的具体含义。
〈% objMS.Connect "SQLServerRO.GDatabase", "myDB@myServer",_
"Server= myServer;Database= myDB;_
UID=sa;Password=abc123;", "myConnection" %〉
代码中GDOServer ="SQLServerRO.GDatabase",这个属性信息是Geomedia规定的类型信息,在相关帮助中可以查到所有类型。DBName="myDB@myServer"是特定的数据库描述格式,@符号前为数据库名称,@符号后为服务器名称。连接信息Source的描述形式很常见。最后一个参数为产生的连接的名称,这个名称在后续的代码中是有用处的。
定义特征类结果集
可以通过三种方式产生特征结果集:通过Query对象, QueryScript对象或者 Marker对象。每一种方法都是通过特征类信息表提取图形信息和属性信息。这里主要介绍通过通过Query对象获得特征结果集。MapServer对象提供了一个方法AddQuery(Name,Connection,Table)用来产生特征结果集的Query对象,代码描述为:
<% Set objQry = objMS.AddQuery("myQuery", _
"myConnection", "tbName") %>其中第一个参数表示当前产生的Query对象名称,第二个参数表示连接的名称,也就是上一个环节连接数据源中产生连接时命名的连接名称。最后一个参数表示存储特征类的地理信息数据表名。
设置显示规则
通过FeatureSymbology对象管理尺寸、颜色、字体、大小等属性信息,从而达到设置Query对象的显示规则的目的。FeatureSymbology对象是GMWebMap组件中描述的类,设置显示规则的代码如下:
' 产生objQry这个Query对象的新显示规则
Set objDisplayRule = objQry.NewDisplayRule
'产生FeatureSymbology对象,并设置属性,最后将其应用到显示规则中
Set objSym = objMS.CreateObject("GMWebMap.GWMFeatureSymbology")
objSym.Color = RGB(0, 0, 0)
objSym.FillColor = RGB(255,255,204)
objSym.Weight = 1
objSym.Style = 0
objDisplayRule.DisplaySymbology = objSym
'指定当鼠标选中特征类时将要显示的描述信息
objDisplayRule.ToolTip = "单位名称:<%.Unit_Name%" & ">"
'当鼠标选中特征类时,指定特征类的新显示规则
Set objSym = objMS.CreateObject("GMWebMap.GWMFeatureSymbology")
objSym.FillColor = RGB(255, 255, 0)
objSym.Weight = 2
objDisplayRule.HotspotSymbology = objSym
如果特征类信息描述的是城市中的所有单位,则上面代码执行效果为首先显示城市中所有单位点信息,当鼠标浮在地图的某个单位上时,系统显示该单位的名称信息,同时地图上代表这个单位的点会变大、变色显示。
产生地图
当产生了特征类集合并且设置完显示规则以后,就可以产生地图了。这一功能通过MapServer对象的CreateMapByRange方法来实现。
objMS.CreateMapByRange Rng(0),Rng(1),Rng(2),Rng(3),
Width,Height,AutoScale
其中Rng数组是当产生了Query对象以后,由Query对象的Range方法获得,然后在产生地图时直接引用,Rng数组代表特征类结果集的矩形显示范围。Width和Height这两个属性代表即将显示的地图大小。AutoScale代表地图覆盖范围的比例因子。
至此,所有工作完成,当然不能忘记程序的最后释放定义的各种资源。按照上面描述的思路,将例程代码合在一起,保存为D:\tec_ready目录下asp文件,就形成一个完整的在WEB上显示地图中所有单位信息的应用程序。
四、结束语
B/S和C/S结构下的GIS开发从编程思路上有着一定的差异,从应用开发的角度看,利用Geomedia开发基于WEB的GIS产品难度没有增大,相对于某些关键技术环节变的更加简洁实用,例如和用户的交互,响应鼠标事件等情况下,只需一句代码便可将动作和事件结合起来,这一点也在一定层面上充分体现了两种结构体系编程思路的区别。

原文转自:http://www.ltesting.net