摘 要:将ArcGIS Server地图服务、WebServer服务集成于Adobe Flash Builder 4下,研究开发了基于ArcGIS Flex API的校园电子地图展示软件。该软件提供了山西某大学详细的地图信息,不仅拥有常规地图导航、支持属性模糊查询空间要素等功能,而且还对任意两个热点间最短路径分析功能进行合理定制,对校园风光和人文历史的展示产生了很好的效果。
关键词:WebGIS;ArcGIS Flex API;RIA;地图控件;最短路径分析
随着计算机技术的飞速发展,地理信息系统逐渐融入了人们生活的各个方面,作为其发展的必然趋势之一的WebGIS也成为了诸多专家们所热衷的研究领域。国内外的GIS厂家都推出各自的WebGIS产品,ArcGIS Flex API就是一种基于ArcGIS Server的一种客户端应用开发框架。ArcGIS Flex API与Flash Builder 4结合可以构建出表现出色、交互体验良好的富互联网程序(RIA)。传统的WebGIS电子地图采用HTML页面形式,在传输数据量大、实时性要求比较高时会存在一定延时,严重影响界面操作效率;富互联网程序(RIA)可将桌面程序的表现力与浏览器的程序方便、快捷结合在一起,具有丰富的数据模型可将原来在后台程序处理的问题现在转移到客户端,使数据能够被缓存在客户端,从而实现一个比基于HTML的响应速度更快、数据往返于服务器的次数更少的应用程序[1]。基于ArcGIS Flex API的校园电子地图软件针对地图展示提供了山西某高校详尽的地图信息,不仅可以属性模糊查询定位目标,准确地对校园进行长度和面积的量算,为校园规划管理提供参考;而且还可以准确地查找两个关键点之间的最短路径,为用户进行简洁的路线指引。
1 环境的搭建
首先,安装ArcMap 10软件,用于原始数据源处理;其次,完成ArcGIS Server 10软件的安装,作为整个应用程序的GIS服务器,提供必要的地图服务。ArcGIS相关软件安装完成后,进行Microsoft Visual studio 2010和Microsoft SQL Server 2008的安装;在VS2010环境下可以发布WebServer服务供前台调用,Microsoft SQL Server 2008存储数据库。最后安装Adobe Flash Builder4.0用于开发RIA。
2 服务为主体的开发流程
整个软件基于B/S架构开发,因此如何合理发布、配置和调用服务自然而然成为整个开发过程的核心工作。在整个开发过程中主要涉及到地图服务和WebServer服务两大类,基于ArcGIS Server发布的不同种类的地图服务是电子地图展示功能实现的基础,基于VS2010发布的WebServer服务是对客户端管理员信息处理的后台服务。服务为主体的开发流程如图1所示。
3 基于ArcGIS Flex API地图功能的实现
作为一套基于Flex开发运行在浏览器端的地图API,ArcGIS Flex API可以满足一些GIS开发需求,如地图浏览、多个专题图层叠加、地图符号的客户端绘制、动态对象跟踪显示(车辆、飞机等)、运行GIS相关的空间分析模型、属性条件查询、空间条件查询和编辑适量数据[2]。把ArcGIS Flex API类库文件添加到新工程中的library path选项卡里,就可以开始开发工作。基于ArcGIS Flex API的校园电子地图主要功能包括地图导航功能、地图面积和距离量算、空间要素查询定位、最短路径分析等;按功能发布了相应的地图服务和管理用户信息的WebServer服务。
3.1 Map控件的使用
Map控件可以说是整个WebGIS程序开发的核心,它是一个粗粒度的类,其中封装了大量的细粒度接口,如地图空间范围、空间参考、图层集合和比例级别等[2]。Map控件相当于一个容器,可以包含多个地图服务图层,用来交互式浏览地图。软件设计中Map控件实现主要代码如下。
doubleClick="mainMap_doubleClickHandler(event)"
mouseOver="mainMap_mouseOverHandler(event)"
extentChange="mainMap_extentChangeHandler(event)"
left="0" right="1" top="78" bottom="0"
>
MapServer/0"
mode="selection"
id="myFeatureLayer"visible="false"
outFields="[imageSource,url,infor]"/>
……
id为mainMap的Map控件,其不仅包含了用于地图直观显示的动态地图服务图层、用于气泡显示的矢量服务图层,还包含了一系列作为客户端渲染几何矢量图形(如查询结果高亮显示、路径渲染等)载体的GraphicsLayer类型图层。这些图层为应用程序地图功能实现提供了有利的保障。
3.2 地图导航功能
NavigationTool是一个非可视化控件,常常要与界面控件结合,用于地图的导航操作。由于Map控件内部本身就集成了鼠标滚轮放大、缩小及左键平移的功能;因此,在工具栏地图导航功能添加了上一视图、下一视图(需对上下视图不可用情况进行处理)、全图显示作为补充。应用程序工具栏如图2所示。
首先定义NavigationTool控件实例,指定相关Map控件实例:
工具栏上3个导航功能实现方法类似,以全图显示(工具栏第3个)为例进行说明,在其对应的Image控件 实例单击事件里添加如下代码。
if(navigationTool.isFirstExtent==false&&this.initMapExtent!=this.mainMap.extent.extent)
{
//调用NavigationTool全图显示方法
navigationTool.zoomToFullExtent();
this.initMapExtent=this.mainMap.extent.extent;
}
else
{
Alert.show("当前视图已为全图显示!","提示");
}
单击事件处理函数里对当前地图显示状态进行了判断,若不为全图显示状态则设定为全图显示状态,为全图显示则弹框提示。
3.3 建筑物信息气泡提示
气泡是一种把业务数据和地图结合在一起的有效方式[2]。地图控件(Map)提供了一个infoWindow属性用来在地图上显示气泡信息,气泡内容通过其infoWindowContent属性控制,标题则是由其infoWindow属性下label次级属性控制。软件中的气泡提示格式是对气泡内容进行了定制(自定义LabelDataRenderer组件,包含建筑物名称、建筑物图片和相关网址链接3部分内容,数据源则是通过对FeatureLayer服务图层查询得到,并在LabelDataRenderer实例加载时对实例属性初始化),每次触发气泡提示实际上是目标建筑物对infoWindow的infoWindowContent属性重新赋值;建筑物气泡提示包含了两种类型:展示状态下气泡提示和管理员编辑状态下气泡提示。管理员登录后可以对建筑物气泡属性进行编辑并直接保存到后台GIS服务器,如图3所示。
3.4 模糊查询建筑物中心定位
实现建筑物名称模糊查询(全部建筑物名称绑定到ComboBox可初步实现)和建筑物查询结果中心定位,如图4所示。建筑物查询采用QueryTask(可以执行空间查询,又可以执行属性查询),会涉及到QueryTask、Query和FeatureSet 3个类。
第一步,实例化QueryTask,url属性指向将要查询的地图服务图层。
第二步,在查询按钮单击事件里设置搜索参数Query实例。
//属性查询条件
query.where="NAME="+"′"+this.qText.textInput.text+"′";
myQueryOutFieldArr=new Array();
myQueryOutFieldArr.push("NAME");
//指定返回的字段
query.outFields=myQueryOutFieldArr;
query.returnGeometry=true;
第三步,提交请求注册处理函数,渲染查询结果到目标图层上。
/*提交注册处理函数,onNameQueryResult为结果回调函数,onNameQueryFault是错误处理函数*/
myQueryTask.execute(query,newAsyncResponder(onNameQueryResult
,onNameQueryFault));
最后,onNameQueryResult函数中派发事件向主程序传递Graphic类型的数组,在主程序中将查询结果添加到相应的GraphicLayer图层上,中心地位的功能则是参照查询结果Graphic的extent属性加入一定偏移量赋值给地图控件的extent属性,从而间接地达到查询结果中心定位显示。
3.5 距离测量和面积测量
将距离测量和面积测量设计到了管理员权限范围,它们属于地图空间分析的范畴,在客户端完全实现不太现实,ArcGIS Flex API中GeometryService类提供了各种空间分析功能,客户端请求服务器端,等待服务器端返回结果,最后计算完成事件,整个过程异步执行。首先发布一个几何服务(Geometry)供GeometryService类实例引用,设定距离所需参数、面积所需参数传入GeometryService类实例的用于测距离(lengths)、用于测面积(areasAndLengths)方法,最后在GeometryService类实例中lengthsComplete、areasAndLengthsComplete属性处理函数里面获取相对应的测量结果。
3.6 关于起点终点的最短路径分析
最短路径的求取问题是可以拓展为许多方面的最高效率问题,最短路径不仅是指一般意义上的距离最短,还可以是时间最短、费用最少、线路利用率最高等标准[3]。针对展示功能设计了两点间最短路径分析,网络数据集中边权重属性默认长度字段即可。实现大致分为数据源处理,地图服务发布和RouteTask类、RouteParameters类的实例相结合从而得到路径。
第一步,数据源处理(构建网络数据集以及建立地图文档)和地图服务发布。
网络数据集的优劣性直接影响了后续路径分析的正确与否,为了提高路径分析正确率,采用一套科学的数据源规范化处理流程至关重要。数据源处理流程如图5所示。
在ArcMap10中新建地图文档,将网络数据集加入该文档中,并在文档中新建路径(Network Analyst模块内),把图层精简后,用作路径分析地图服务的数据源,效果如图6所示。
将处理后的数据源发布成用于路径分析的地图服务。
第二步,RouteTask类和RouteParameters类的实例相结合得到路径。
RouteTask是一个非可视化的控件,可针对相应地图服务进行最短路径分析,可以根据提供的参数(RouteParameters类实例)求解得到相应最短路径。关于起点终点的最短路径分析:将起点终点名称作为查询条件对网络数据集端点图层(一系列带属性端点)进行查询,把查询结果赋值给stops属性(RouteParameters子组件对应路径中停靠点属性)即可,调用RouteTask实例中solve方法(需传入RouteParameters实例)并在其solveComplete属性的事件处理函数里渲染起点终点提示以及两点间最短路径。
3.7 管理员信息管理
采用客户端调用ASP.NET Web服务的方式对服务器端的关系数据库(存有管理员信息)进行增、删、改操作。整个软件界面状态分为展示状态和管理员登录状态,管理员登录状态相比前者增加了测量和管理员信息编辑等模块。
综上所述,地图服务和WebServer服务合理的发布和调用是基于ArcGIS Flex API电子地图开发的基础,也是地图功能实现的有力保障。这类便捷的开发方式必将长时间流行于WebGIS领域。
参考文献
[1] 贾静,耿衬.基于ArcGIS API for Flex的Web应用初探[J].地理空间信息,2012(6):114-118.
[2] 贾庆雷,万庆.ArcGIS Server开发指南——基于Flex和 .NET[M].北京:科学出版社,2011.
[3] 高晟.基于ArcGIS对矢量数据模型的最短路径分析[J].微型机与应用,2011,36(15):84-87.