ArcGIS Server 开发系列(二)--Web ADF 编程

简介:

Web ADF全名是Web Application Develope Framework,是ArcGIS Server专用的开发框架,9.2版本的ArcIMS也开始提供ADF的封装。完全使用Web控件编程几乎不能解决我们实际项目中的问题,因此我们从《ArcGIS Server 开发系列(一)--编程框架总览》中提到的途径二开始,即web controls + common datasource apis。

    目标:

    根据查询语句实现图层信息查询

    准备工作:

    1.Windows XP sp2中/英文版
    2.Visual Studio 2005中/英文版
    3.ArcGIS Server 9.2(我打上了sp2补丁),创建一个ArcGIS Server服务,Map Server属性中更改Pooling,使用池化连接方式,Progresses选择“In a seperate process for each instance(high isolation)”,我的服务为“World”
    4.利用vs2005创建一个模板server应用--Web Mapping Application,并更改MapResourceManager属性



    这样我们可以测试程序看是否能够正常运行,启动调试看到如下结果:


    代码实现:

    我们要完成的工作是对图层属性信息的查询,首先在页面左侧添加一个新的panel,左侧的Tasks、Results等都是放置在panel之中,在这个新的panel中分别添加TreeViewPlus、TextBox、Button三个控件,TextBox输入查询条件,Button确定查询, TreeViewPlus显示结果,在设计试图中浏览效果如下:


    双击“Query”Button,编写点击事件。

     protected  void cmdQuery_Click( object sender, EventArgs e)
     {
        Query(Map1.Extent);
    }

    Query方法实现了对图层属性信息的查询。   

protected  void Query(ESRI.ArcGIS.ADF.Web.Geometry.Geometry geometry)
     {
        IEnumerable func_enum = null;
        //获取当前map1控件中所有的functionality
        func_enum = Map1.GetFunctionalities();

        System.Data.DataTable datatable;
        //对所有的functionality进行遍历
        foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality in func_enum)
        {
            ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = null;
            //得到该functionality的resource
            gisresource = gisfunctionality.Resource;

            //判断该resource是否支持IQueryFunctionality  
            bool supported = false;
            supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));

            if (supported)
            {
                ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc;
                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.GetQueryableLayers(nullout lids, out lnames);

                ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter();
                //设置过滤器的过滤条件,txtQuery就是panel中text box的ID
                spatialfilter.ReturnADFGeometries = false;
                spatialfilter.MaxRecords = 1000;
                spatialfilter.WhereClause = txtQuery.Text;
                spatialfilter.Geometry = geometry;

                //对指定的图层进行查询,查询的结果保存为DataTable
                datatable = qfunc.Query(null, lids[0], spatialfilter);

                TreeViewPlus1.Nodes.Clear();
                if (datatable != null)
                {
                    System.Data.DataSet ds = new System.Data.DataSet();
                    ds.Tables.Add(datatable);
                    TreeViewPlus1.ShowClearAllButton = false;
                    //将结果绑定到TreeViewPlus控件上
                    TreeViewPlus1.BindToDataSet(ds);

                    TreeViewPlus1.Nodes[0].Expanded = true;
                }

            }

        }

    }

    运行程序,text box中输入“CNTRY_NAME LIKE 'A%'”,查询结果:


    这样这个小程序就完成了,在server中实现了对图层属性信息的查询,现在我们需要进行更多的考虑:

    第一,考虑web控件、 functionality、datasource、resource、resourcemamager之间的关系,代码中多次对它们的关系进行了描述,用文档中的一幅图可以概括整个框架,这篇文章对此进行了阐述--《ArcGIS Server .Net Web ADF体系结构》。


    第二,程序中使用的mxd仅仅包含一个world图层,因此对图层进行遍历的过程中只需获得第一图层的ID,如果指定图层名,可以在lnames得到所需的图层进行查询。

    第三,程序实现的查询方式相当简单,在text box中输入原始的sql来完成where语句,只仅仅是一个测试,一般我们会屏蔽掉sql相关的关键字,提供多个text box或dropdownlist供用户选择进行字段查询。

    第四,如果查询信息量不大,返回结果数量不多,完全可以考虑ajax来完成页面请求,不论是速度还是用户体验都会得到提高。

    第五,通过程序可以看到,查询结果保存在一个datatable中,这极大的方便了server查询和.net的无缝连接,直接将结果和TreeViewPlus绑定,换成其他的visual studio控件也没问题。

    只要整个框架思路清晰了,查询功能的实现其实很简单,这也是途径2开发方式的一个例子,可以看出ArcGIS Server ADF给开发提供了很多便利,和ArcIMS相比开发难度相当,多看看文档和ADF OMD图可以让我们对ArcGIS Server ADF开发有更多的了解,记住,这只是server开发的起步。

 本文转自Flyingis博客园博客,原文链接:http://www.cnblogs.com/flyingis/archive/2007/08/14/854806.html,如需转载请自行联系原作者

相关文章
|
12天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
52 6
|
11天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
34 3
|
12天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
35 4
|
10天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
30 1
|
12天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
在这个Python Web开发的新纪元里,RESTful API的设计已经超越了简单的技术实现,成为了一种追求极致用户体验和开发者友好的艺术表达。通过优雅的URL设计、合理的HTTP状态码使用、清晰的错误处理、灵活的版本控制以及严格的安全性措施,我们能够让RESTful API变得更加“性感撩人”,为Web应用注入新的活力与魅力。
28 3
|
12天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
42 3
|
14天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
在 Python Web 开发中,RESTful API 是构建强大应用的关键,基于 Representational State Transfer 架构风格,利用 HTTP 卞性能。通过 GET、POST、PUT 和 DELETE 方法分别实现资源的读取、创建、更新和删除操作。示例代码展示了如何使用 Flask 路由处理这些请求,并强调了状态码的正确使用,如 200 表示成功,404 表示未找到资源等。
37 5
|
12月前
|
人工智能 数据可视化 API
ArcGIS API for Python
ArcGIS API for Python
60 0
|
JavaScript 前端开发 应用服务中间件
Arcgis api for javascript 详细部署
Arcgis api for javascript 详细部署
|
人工智能 数据可视化 数据管理
ArcGIS API for Python
ArcGIS API for Python
104 0
下一篇
无影云桌面