您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > ArcGIS Server 开发系列--编程框架
开发系列(一)--编程框架总览作者:FlyingisArcGISServer是一个发布企业级GIS应用程序的综合平台,如果想对ArcGISServer基础有更多的了解,可以先看看《ArcGISServer体系结构》、ESRI(中国)BBS论坛和ESRI网站。这里及接下来的一系列文章将主要介绍ArcGISServer开发相关的内容(如不加说明,后文中Server专指ArcGISServer),由浅入深,充分利用Server的资源来构建我们的企业级应用,同时也可以了解Server的优势及不足,在实际应用中扬长避短。进行Server开发之前,我们首先需要了解Server开发的整体架构。下图(截取自官方文档)可以看到,Server提供了一系列的应用开发途径,从1到4难度逐步增加,当然功能和可定制性也越来越强,我们可以充分利用Server提供的这些资源来构建我们的应用。Web应用开发Server为Web应用开发提供了一系列的开发方式,在visualstudio2005中可以直接使用WebMappingApplicationtemplate建立应用,它包含了WebADF框架,是学习Server开发的入口。对照上面的示意图,可以这样来理解,如果想使用各种Web控件加上少量代码来构建Web应用,可以直接使用第一种途径,这样的应用比较死板,让人感觉有点想搭积木,程序员可能没有任何成就感,好处是开发迅速,适合入门学习或做个简单的Server演示。如果想在CommonAPI基础上,使用各种通用的functionality,通过各种datasource类型来定制WebADF,可以使用第二种开发途径。如果想使用CommonAPI,并且需要通过CommonAPI调用specificAPI来定制WebADF,可以通过第三种途径来开发。WebService开发WebService是什么不用再介绍,ArcGIS提供了两种类型的WebService创建方法:GISWebService和ApplicationWebService。GISWebService提供了一种将ArcGISServerObject(Localdatasource)发布为ArcGISServerWebService(Internetdatasource)的ESRI标准,GISWebService不用于开发,通常它们是用来发布信息和提供资源,ArcMap就可以直接使用GISWebService的资源而不用进行任何开发,另外WebADF控件和CommonAPI也可以使用GISWebService资源。因为GISWebService基于标准webservice,它可以作为传统webservice来使用,ArcGISServer提供了SOAPAPI进行相关的开发,以后的学习中会使用到。ApplicationWebService是基于标准webservice建立的应用,使用一种ESRI的datasource进行开发。因为webservice没有用户接口,上图中途径一不适合这样的应用,途径四是最适合的,因为webservice可充分利用ESRI提供的各种datasourcespecificAPI的所有functionality。桌面客户端应用开发ESRI在桌面客户端应用中提供了两种实现GIS功能和服务的方法:ArcGISEngine和datasourcespecificdeveloperAPIs,上图中只有第四种途径可用于桌面客户端应用。ArcEngine不论是和本地GIS资源交互,还是使用远程数据资源,都拥有丰富的控件和众多API,但它在使用和分发之前必须进行授权注册,而任何datasourcespecificdeveloperAPIs都可以在桌面客户端应用中编程使用。移动应用开发移动应用和Web应用、webservices比较类似,但它们是为某一个特定的客户端环境而设计,如PocketPC。MobileADF是为移动应用定制的开发框架,通常使用途径四来进行开发,这样可以充分利用ArcGISServerWebservices和SOAPAPI提供的功能。在以后的实际开发过程中,我们会逐步了解上述各种开发方式,并不断深入。参考资料(部分翻译):ArcGISServer9.2.Net开发文档:04Flyingis阅读(3986)评论(10)编辑收藏所属分类:ArcGISServer发表评论回复引用2007-08-1211:44|pp315[未注册用户]版主总结的不错。以下是英文原文参考回复引用2007-08-2315:07|victor[未注册用户]楼主文中有出错误:“Web应用不能使用第四种途径。”ESRI文档上说的是WEB应用可以使用所有的4种途径,而只有第四种途径可以用来开发桌面客户端应用程序。原文如下:“Forexample,allpathscanbeutilizedinaWebapplication,butonlypathIVisavailableforDesktopclientapplications.”回复引用查看2007-08-2315:41|Flyingis@victor感谢指正!当时看得快就写下来了,这句话的确是错了,web应用可以通过第四种途径来开发,后续文章中会涉及到。回复引用2008-03-2016:27|anticopy[未注册用户]抄亦有道既然是翻译的,为什么不注明呢?回复引用查看2008-03-2021:59|Flyingis@anticopy做server开发的都知道这篇大部分来自于文档,如果多些人参与翻译server开发文档,受益的人只会更多。这是疏忽了,如果是引用他人的原文,我会给出链接,一些翻译的文章,也给出了出处,可以看我其他的文章,我绝大部分文章都是学习之后的总结,和实际开发的经验,不少也被直接转载甚至没有标明出处,这些更让人深恶痛绝,没有明确用于商业目的也没有再追究,因为没有这些精力,有时间能写点东西和大家分享,大家受益了,一起学习了,就够了。楼上有朋友已经说明了文章来自于文档,如果觉得不妥,大可帮我把原文地址写在下面,然后提醒我加上,没必要带有愤的味道,还匿名留言,没什么意义。原文出处已经加上,闲暇之余才能写点东西,时间有限,如果有疏漏的地方请大家帮忙修正。回复引用2008-03-2513:34|hsg77[未注册用户]写得好!正在学习ArcServer9.2.ing回复引用2008-04-0117:16|bingle[未注册用户]想请教一下楼主:我用arcgisservermanager生成的应用能显示地图。而在visualstudio里面用webmapapplication生成的应用不能显示地图。我在visualstdio里面把identity已经加进去了。不知楼主有没有遇到类似的情况,多谢了。回复引用查看2008-04-0209:00|Flyingis你用的是visualstudio哪个版本?vs2005中有mapresourcemanager控件需要修改一下属性,你看看《ags开发系列》后面的文章。ArcGISServer开发系列(二)--WebADF编程作者:Flyingis本文严禁擅自转载或用于商业目的,如有需要请事先联系作者:dev.vip#gmail.comWebADF全名是WebApplicationDevelopeFramework,是ArcGISServer专用的开发框架,9.2版本的ArcIMS也开始提供ADF的封装。完全使用Web控件编程几乎不能解决我们实际项目中的问题,因此我们从《ArcGISServer开发系列(一)--编程框架总览》中提到的途径二开始,即webcontrols+commondatasourceapis。目标:根据查询语句实现图层信息查询准备工作:1.WindowsXPsp2中/英文版2.VisualStudio2005中/英文版3.ArcGISServer9.2(我打上了sp2补丁),创建一个ArcGISServer服务,MapServer属性中更改Pooling,使用池化连接方式,Progresses选择“Inaseperateprocessforeachinstance(highisolation)”,我的服务为“World”4.利用vs2005创建一个模板server应用--WebMappingApplication,并更改MapResourceManager属性这样我们可以测试程序看是否能够正常运行,启动调试看到如下结果:代码实现:我们要完成的工作是对图层属性信息的查询,首先在页面左侧添加一个新的panel,左侧的Tasks、Results等都是放置在panel之中,在这个新的panel中分别添加TreeViewPlus、TextBox、Button三个控件,TextBox输入查询条件,Button确定查询,TreeViewPlus显示结果,在设计试图中浏览效果如下:双击“Query”Button,编写点击事件。protectedvoidcmdQuery_Click(objectsender,EventArgse){Query(Map1.Extent);}Query方法实现了对图层属性信息的查询。protectedvoidQuery(ESRI.ArcGIS.ADF.Web.Geometry.Geometrygeometry){IEnumerablefunc_enum=null;//获取当前map1控件中所有的functionalityfunc_enum=Map1.GetFunctionalities();System.Data.DataTabledatatable;//对所有的functionality进行遍历foreach(ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionalitygisfunctionalityinfunc_enum){ESRI.ArcGIS.ADF.Web.DataSources.IGISResourcegisresource=null;//得到该functionality的resourcegisresource=gisfunctionality.Resource;//判断该resource是否支持IQueryFunctionalityboolsupported=false;supported=gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));if(supported){ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionalityqfunc;qfunc=(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality),null);string[]lids;string[]lnames;//获得图层的layerId和layerName,GetQueryableLayers的重载方法可以指定图层类型qfunc.GetQuerya
本文标题:ArcGIS Server 开发系列--编程框架
链接地址:https://www.777doc.com/doc-5587416 .html