zoukankan      html  css  js  c++  java
  • ArcGIS Server 开发系列(二)Web ADF 编程 (转载于Flyingis)

    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(null, out 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开发的起步。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangjie_xiaoke/archive/2008/03/07/2155714.aspx

  • 相关阅读:
    堆和栈的区别 (转贴)
    Linux常用的网络命令
    H.264的编解码流程
    链表逆序
    快速排序
    一个计算机硕士毕业生的求职经验(五)
    H.264简单总结
    重要的热键 【Tab】,【Ctrl】—C,【Ctrl】—D
    Linux 文件与目录管理
    一个计算机硕士毕业生的求职经验(六)
  • 原文地址:https://www.cnblogs.com/googlegis/p/2979053.html
Copyright © 2011-2022 走看看