作者:Flyingis

本文严禁擅自转载或用于商业目的,如有需要请事先联系作者:dev.vip#gmail.com

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开发的起步。

转载于:https://www.cnblogs.com/flyingis/archive/2007/08/14/854806.html

ArcGIS Server 开发系列(二)--Web ADF 编程相关推荐

  1. ArcGIS Server 开发系列(一)--编程框架总览

    ArcGIS Server是一个发布企业级GIS应用程序的综合平台,如果想对ArcGIS Server基础有更多的了解,可以先看看<ArcGIS Server 体系结构>.ESRI(中国) ...

  2. ArcGis Server开发Web GIS新手体验(二)

    ArcGis Server开发Web GIS新手体验(二) 接(一) 我们知道,.net adf提供的map组件.toc组件等都是标准的asp.net组件.这些组件在运行时,会生成相应的html代码, ...

  3. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  4. 【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析

    目的: 1.ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程原理. 开始: Toolbar工作过程: 一.初始化过程(在页面生成的时候Toolbar控件会生成和它相关的 ...

  5. asp.net项目源码C#中学生健康档案管理系统VS开发sqlserver数据库web结构编程

    一.源码特点         asp.net 中学生健康档案管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. 下载地址:asp.net项目源码C#中学 ...

  6. Flask开发系列之Web表单

    Flask开发系列之Web表单 简单示例 from flask import Flask, request, render_templateapp = Flask(__name__) @app.rou ...

  7. 短信开发系列(二):GSM手机短信开发之短信解码

    短信开发系列目录: 短信开发系列(一):GSM手机短信开发初探 短信开发系列(二):GSM手机短信开发之短信解码 短信开发系列(三):短信接收引擎 昨天写了短信的发送,今天我们在来谈谈如果读取SIM卡 ...

  8. ArcGIS Server开发教程系列(3)切片

    切片工作,我们可以一级一级的切,也可以,所有的一块切,Recreate All Tiles这项是说,在没有进行任何的切片工作时,可以选用这项:Recreate Empty Tiles这项是说,如果之前 ...

  9. arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  10. 总结基于ArcGIS Server 9.2 Dot Net ADF的WebGIS项目部署问题

    过去的几个月内对基于ArcGIS Server9.2的开发有所接触,这也是第一次真正自己动手作WebGIS的开发,期间遇到诸多问题.最突出的就是二次开发WebGIS的部署问题,以及字符集冲突的问题.问 ...

最新文章

  1. CSS之布局(盒子的水平布局)
  2. python【力扣LeetCode算法题库】55-跳跃游戏
  3. Linux突然连不上网,ping不通百度,连不上MobaXterm
  4. 2010考研全程学习规划简案【推荐】
  5. c语言位操作大小写转换,C语言实现大小写转换的三种方法
  6. uCOS:时钟节拍代码追踪
  7. Win7下安装配置gVim
  8. 他,是数学天才,是多复变解析函数的创始人
  9. 存放在外存上的数据关机后_小鑫话题 | 惊了!关机后SSD会丢数据?
  10. 借教室(洛谷-P1083)
  11. BAT自动校对时间脚本,让WINDOWS系统自动校对时间
  12. 深入理解JavaScript运行机制
  13. CWE-123: Write-what-where Condition(任意写入)
  14. 搭建spark源码运行环境报错及解决办法
  15. 表格td的宽度不随内容自适应
  16. 整理全菜30篇学习vue和脚手架的笔记
  17. Random之nextInt函数
  18. 点阵屏32x64/32x128单片机驱动及HUB08说明
  19. 全国智能制造(中国制造2025)创新创业大赛华东赛区决赛完美收官
  20. 小明走格子 (10 分)(Java)

热门文章

  1. 学单片机的动力是什么,学单片机来做什么,需要多长时间把它学会
  2. python中非法变量名_第10p,Python中变量名的命名规则与引用
  3. 使用XML Schema的简化配置方式
  4. 【渝粤教育】广东开放大学 服务标准化 形成性考核 (41)
  5. [渝粤题库] 国家开放大学 人文英语4 资料
  6. C/C++ 进程间通信 管道
  7. [贪心+模拟] zoj 3829 Known Notation
  8. 【转】电脑显示有软驱
  9. struts环境搭建以及登陆功能的书写
  10. arguments.callee 指向正在执行的函数的指针