ArcGISserver Flex编程的图解教程.docx
《ArcGISserver Flex编程的图解教程.docx》由会员分享,可在线阅读,更多相关《ArcGISserver Flex编程的图解教程.docx(18页珍藏版)》请在冰豆网上搜索。
ArcGISserverFlex编程的图解教程
基于Flex和RESTArcGISServer发布方法
1绪言
WebGIS即万维网地理信息系统,是利用交互网络技术扩展和完善地理信息系统的一项技术。
随着WebGIS的发展,用户对他的表现形式有了更多的期待。
同时开发人员也希望有更简洁和伸缩性高的构架的出现。
WebGIS实现技术总的归纳起来可以分为基于瘦客户端和胖客户端两种方案。
基于瘦客户端的方案中客户端只采用标准的WEB技术,如HTTP、HTML和Javascript。
胖客户端的发难则是通过下载安装插件来增强浏览器的能力。
代表技术有Plug-in、ActiveX控件技术以及JavaApplet技术和SVG技术。
瘦客户端的开发模式已经成为当前WebGIS的主流开发方式,基于B/S架构的WebGIS得到迅速发展,但是随着互联网影响的不断扩大,以及GIS技术广泛应用到各行各业中,人们已逐渐不满足于目前的WebGIS网页技术的表现效果和交互性,而希望WebGIS有类似C/S的表现效果和交互性。
RIA(RichInternetApplication,富互联网应用系统)是新一代网络应用程序,概念最早是由Macromedia公司在2002年提出的。
它把桌面应用程序的交互性和用户体验与传统的Web应用的部署灵活性和成本分析结合起来。
它具有无需刷新页面并提供快速界面响应等优点。
光就用户体验来讲,RIA前景一片看好。
基于RIA客户端开发的新框架也不断涌跃,有代表性的如微软的Silverlight、Sun公司的JavaFX以及Adobe公司的Flex。
Flex的优势是先入为主,据Adobe公司2007年底的调查显示,经过近十年的推广,互联网上95%以上的计算机都安装了FlashPlayer9,而且这个数字正以每天百万级的速度在增长。
Flex与REST进行结合是目前非常热门的分布式系统解决方案之一[1]。
将这个方案应用到WebGIS中,就能轻便地建立起表现力丰富、交互性极好的基于Web的地图应用程序。
REST式软件构架是RoyThomasFielding博士在2000年首次提出的一种面向资源的构架。
ESRI公司在2008年10月底发布了一套强大的基于Flex的ArcGISAPIforFlex类库。
本文基于这种Flex+REST构架,重点介绍如何发布REST服务,并且在FLEX中配置ArcGISAPIforFlex类库以及访问ArcGISServer发布的REST服务。
2基于Flex/REST的WebGIS系统发布方法
基于Flex+REST的WebGIS系统总体构架相对于与传统的REST风格构架组成要简单些,只包括两个部分:
ArcGISServer9.3服务端和装有FlashPlayer的浏览器端。
服务器端采用ArcGISServer9.3,通过ArcGISServerManager发布为REST服务,在FlexBuilder3.0中配置GIS服务的API环境,利用API进行实例开发,开发完成后进行最终测试、发布。
2.1地图发布
WebGIS系统展现和操作需要的资源,可以通过GIS服务器发布。
文本重点学习地图服务资源的发布方法和步骤。
第一步:
制作地图文档。
基于RESTAPI的WebGIS应用从ArcGISServer客户端得到的地图服务数据其实是由一些地图服务图层(包括ArcGISTiledMapServiceLayer或ArcGISDynamicMapServiceLayer或ArcGISImageServiceLayer或ArcIMSMapServiceLayer)组成的。
其中每一个地图服务层都通过URL对应ArcGISServer中发布的一个MapService,而每一个MapService都是源自于一个地图文档(MapDocument)。
地图文档的扩展名是*.mxd。
在ArcMap中设置好需要显示的地图图层,以及它们的显示次序、符号显示特征等属性后保存为mxd文件即可(如下图所示)。
第二步:
发布地图服务并设置服务的属性。
ArcGISServer提供了两种方法来发布空间服务。
一种是利用ArcCatalog中的ArcGISServer服务管理方式进行发布;另一种方式是通过网页形式的ArcGISServerManager方式进行服务的发布与管理。
文本学习第二种方式发布和管理服务,该方式可以摆脱ArcGIS的桌面环境,方便在远程发布服务。
利用ArcGISServerManager发布管理GIS资源的具体步骤如下:
1、输入用户名和密码登录ArcGISServerManager。
2、单击服务器管理器中的Services选项卡,点击“AddNewService”。
在“Name”中输入要发布的服务名,“Type”为MapService,并点击“下一步”。
3、在“MapDocument”中浏览需要发布的地图文档,并点击“下一步”。
4、点击“下一步”。
5、点击“下一步”。
6、点击“下一步”。
7、如果想改变任何属性,可以点击“Previous”返回上一步修改,点击“Finish”完成发布。
8、单击服务器管理器中的Services选项卡,点击“ManageServices”,可以对已经发布的服务项进行管理,如启动、停止、暂停、重启等。
2.2测试浏览REST服务
ArcGISServer9.3引入了服务浏览器。
可以通过浏览器查看ArcGISServer发布的服务,只要在浏览器中输入URL地址,就可以访问ArcGISServer的REST服务目录,方便查看可用的地理信息系统网络服务,也可以获取开发过程中的有用信息。
在浏览器中打开ArcGISServer上的目录,例如,打开http:
//chica/ArcGIS/rest/services,首先会看到主页(如下图),其中列出了所有服务目录以及含有更多服务的文件夹。
除了服务名称,还可以看到服务类型,如MapServer。
点击服务名称,可以获得更多的信息。
如果点击的是地图服务器,用户可以看到的信息包括图层名称、文档信息以及支持的程序接口等。
例如点击ccc之后,如下图所示。
注意其中两点,a)如果继续点击图层链接,可以了解服务中每个图层的信息。
通过这种方式,服务目录可以展示服务的大量元数据。
例如点击“ExportOutput”,可以查看该图层的详细信息。
b)该地图服务支持的程序接口有REST和SOAP。
继续点击“REST”,会出现REST风格的信息描述。
http:
//chica/ArcGIS/rest/services/ccc/MapServer?
f=json&pretty=true。
2.3在Flex中调用该服务
用ArcGISAPIforFlex开发的程序使用Flex作为前端展现,后台连接ArcGISServerRESTService,而且不需要在本机上安装ArcGISServer,只要通过网络连接到其他机器上的ArcGISServer即可访问资源了。
在Flex中可以将ArcGISServer的地图和任务应用到Web应用程序中。
2.3.1配置ArcGISAPIforFlex类库
在FlexBuilder3(如下图)的开发环境中,可以轻松集成配置所需的API。
ArcGISAPIforFlex是免费的。
在使用ArcGISAPIforFlex之前,我们首先需要在FlexBuilder3中,对它进行配置。
先从ArcGISResourceCenters网站[2](网址:
APIforFlex类库(*.SWC)到本地机上,下载之后部署到FlexBuilder3中。
具体步骤如下:
1、打开FlexBuilder3,对新建的工程,右击选择“Properties”。
2、左侧选择“FlexBuilderPath”,右侧选择“Library”,点“AddSWC”。
3、选择要添加的SWC,点击OK即可。
选择需要添加的SWC
添加的ArcGISAPIforFlex类库(SWC)
2.3.2在Flex中调用REST服务
配置好开发环境之后,就可以用MXML和ActionScript3.0调用FlexAPI中的类编写代码来调用ArcGISServer中的资源了。
以下还是以前面发布的地图服务资源为例,说明在REST风格构架下,如何方便地利用URL调用ArcGISServer服务器上的资源。
如下是摘录的获取本地ArcGISServer中地图资源的部分代码:
(地图服务名为”ccc”)。
Map>
extent>
Extentxmin="121.4"ymin="31.15"xmax="121.6"ymax="31.35"/>
extent>
ArcGISDynamicMapServiceLayerurl=http:
//chica/ArcGIS/rest/services/ccc/MapServer/>
GraphicsLayersymbol="{infoSymbol1}">
Graphic>
geometry>
MapPointx="121.545"y="31.205"/>
geometry>
attributes>
Object>
myImageURL>assets/hm.jpg
myImageURL>
myTitle>上海副中心:
花木
myTitle>
Object>
attributes>
Graphic>
GraphicsLayer>
Map>
程序中调用ArcGISServer地图资源只需要在地图标签中提供URL地址即可。
该URL地址可以利用ArcGISServer服务目录查看获得,详见前一节所述。
因为此资源是未缓存的动态图层,所以使用ArcGISDynamicMapServiceLayer/>图层标签,如果是缓存的Tiled图层,则应使用ArcGISTiledMapServiceLayer/>标签。
GraphicaLayer图层使得系统能够在地图之上叠加图形(graphics)。
它有符号属性(Symbol),对添加到该层中的点、线、面设置不同的样式。
InfoSymbolid="infoSymbol1">
infoRenderer>
Component>
VBox>
Imagewidth="100%"height="100%"source="{data.myImageURL}"/>
Labeltext="{data.myTitle}"/>
VBox>
Component>
infoRenderer>
InfoSymbol>
地图控件还可以添加范围属性extent,可以设置初始化时地图显示的范围,如设置为上海市区范围。
(如下图所示)
2.3.3编译调试、发布
可以使用Flex中的Flex编译器编译成SWF文件。
上述方法是在FlexBuilder3中编译程序后得到的调试版本的SWF文件,当系统已经完成时,可以在FlexBuilder3中使用导出发布编译(ExportReleaseBuild)创建最终的版本。
3结论和思考
基于Flex+REST构架的是一种很好的WebGIS应用程序开发模式。
在重点学习实践REST地图服务发布和Flex调用服务的过程后,有以下几点总结:
1、利用ArcGISServerManager发布REST地图服务,不需要在本地机上安装ArcGISServer,只要连接到其他机器上的ArcGISServer就可以访问资源了。
2、在Flex中调用服务时,只需要从ArcGISServer服务目录查看得到REST服务的URL地址,并提供给MXML中的相应标签属性,即可实现对该服务的访问。
3、ArcGISAPIforFlex提供了很多在WebGIS程序开发中常用到的功能组件,比如地图放大、查询、访问WebService等,可以方便WebGIS程序开发员的使用。
在本科阶段学习过WebGIS,当时学习的目的主要在于初识WebGIS,对其概念、开发构架以及实现技术的认识都比较浅显。
在研究生阶段,学习的目的转为更深入的认识WebGIS并且试图在了解的基础上,实践一些技术实例。
通过这个学期的学习和实践,在理论学习和实践上都受益颇多。
4实例扩展
将Flex应用到WebGIS领域中,可以给用户带来比较炫酷的界面和交互式体验。
目前,在国外已经有一些大公司打造了基于Flex客户端的地图API,让我们来浏览一下这些地图网站的风采。
4.1Yahoo!
MapsFlashAPI
雅虎在2005年11月推出地图服务的时候就直接采用了Flash,后来又率先试用Flex开发Map系统。
因为这可以提供其它服务商所不具备的交互体验。
这款Yahoomaps集合了搜索、地图浏览、卫星地图、鹰眼图等基础功能。
雅虎同时推出Yahoo!
MapsFlashAPI,使得开发人员开发自己的地图应用变得简单,能够很方便地将许多增强功能和精确的地图数据集成到自己的Flex应用程序中。
雅虎地图网址为[3]:
4.2GoogleMapsAPIforFlash
GoogleMapsAPIforFlash使得Flex开发人员能够把GoogleMap嵌入到Flex应用程序中。
该API提供了很多实用的工具用到操控GoogleMap。
利用该API,可以处理地图事件、添加地图控件、在地图上添加标记或者在地图上面画线,还可以利用Geocoding将地址转换成经纬度数据。
利用此API开发的著名网络系统有Up2Maps。
它可以以专题地图的方式查看和发布研究数据。
用户可以直接在行政边界上输入数据或者以电子数据表Excel的形式上传数据,生成自己的专题地图,导出插入到自己的文件中去。
此外,还有在数据地图中查找邮政编码、查看所在区域的人口数据(TreeMap)、在不同边界查看数据、从库(标签)中自定义地图等功能。
系统网址为[4]:
4.3ESRI的ArcGISAPIforFlex
ESRI公司在2008年10月底发布了一套强大的基于Flex的ArcGISAPIforFlex类库,可以在RIA(富互联网应用系统)中实现丰富的GIS功能,除此之外,还可以访问WebServices的方式调用ArcGISServer的服务资源,例如地图集、地址定位和地理处理模型等,能够在ArcGISServer之上开发丰富的互联网应用程序。
基于ArcGISServerFlexAPI开发的著名WebGIS系统有ViggiaTreno,这是一个意大利全国列车时刻查询系统,可以实时查看某路列车是否晚点以及晚点时间,实时跟踪列车行程。
系统网址为[5]:
http:
//www.viaggiatreno.it/viaggiatreno/vt.html。
系统界面如下图所示。
参考文献
[1]袁煜锋.基于Flex与REST的WEBGIS研究[D].上海:
华东师范大学,2009.
[2]ArcGISResourceCenters[Z].2010
[3]Yahoo!
Maps,DrivingDirections,andTraffic[Z].2010
[4]Up2Maps-Create&sharethematicdatamapsonGoogleMaps[Z].2010
[5]Trenitalia-ViaggiaTreno[Z].http:
//www.viaggiatreno.it/viaggiatreno/vt.html.2010