• ArcgisServer9.3 中矩形选择查询的实现(利用Ext控件的AJAX技术)


     

    效果同于ArcgisServer9.3 中矩形选择查询的实现(利用callback机制)

    1、首先加入一个htmlButton控件, 同时实现本博客中的一个下拉列表控件无刷新的控制另外一个下拉列表控件(利用Coolite.Ext控件);例外添加一个Gridview控件并将它放在一个div中,同时将它们放在一个updatepane中;如下所示:

    <input id="Button3"type="button"

    value="矩形框选" onclick="selectRectangle()" />

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" >

       <ContentTemplate>

           <div id="griddiv" style=" overflow:auto; width:240px; height:300px;" >

             <asp:GridView ID="GridView1" runat="server" AllowPaging="true" AutoGenerateColumns="true" OnPageIndexChanging="GridView1_PageIndexChanging" >

             </asp:GridView>

         </div>

       </ContentTemplate>

     </asp:UpdatePanel>

    2、在前台用javascript实现拉一个矩形框的操作,如下:

    <script language="javascript" type="text/javascript">

     

    //在地图上拉一个矩形框

    function selectRectangle() {

        var map = $find('Map1');

       

        map.set_mouseMode(ESRI.ADF.UI.MouseMode.Custom);

       

        map.getGeometry(ESRI.ADF.Graphics.ShapeType.Envelope,useRectangle, null, 'red', '#0000FF', 'crosshair', true);

     

    }

     

    //获取所画矩形的顶点坐标,并调用后台函数实行矩形选择查询得到查询结果

    function useRectangle(inputGeometry) {

        var map = $find('Map1');

        var env = inputGeometry.getEnvelope();

        var griddiv = document.getElementById("griddiv");

     

        var Xmin = env.get_xmin();

        var Ymin = env.get_ymin();

        var Xmax = env.get_xmax();

        var Ymax = env.get_ymax();

       

    //调用后台的矩形查询的方法,并返回查询结果result,显示在GridView中

        Coolite.AjaxMethods.QueryRectangle(Xmin, Ymin, Xmax, Ymax, {

            success: function(result) {

                if (result != "") {

                    griddiv.innerHTML = result;

                }

            }

    });

     

    }

    </script>

     

    3、后台实现矩形框选择的查询代码如下:

    [AjaxMethod]

     public string QueryRectangle(double Xmin,double Ymin,double Xmax,double Ymax)

    {

     try

     {

        ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(Xmin, Ymin, Xmax, Ymax);

     

         string strRes = Session["ResName"].ToString();

         string strLayer = Session["LayerName"].ToString();

     

           ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality = Map1.GetFunctionality(strRes);

                 ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = gisfunctionality.Resource;

                 bool 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;

            qfunc.GetQueryableLayers(null, out lids, out lnames);

     

                        ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter();

                        spatialfilter.ReturnADFGeometries = true;

                        spatialfilter.MaxRecords = 10000;

                        spatialfilter.Geometry = env;

     

      for (int i = 0; i < lids.Length; i++)

        {

           if (lnames[i] == strLayer)

           {

              DataTable datatable = qfunc.Query(gisfunctionality.Name, lids[i], spatialfilter);

           datatable.TableName = gisresource.Name + "_" + lnames[i];

     

          if (datatable.Rows.Count > 0)

          {

    string datasetName = string.Format("选择要素 - {0}", datatable.TableName);

                    System.Data.DataSet dataset = newSystem.Data.DataSet(datasetName);

                dataset.Tables.Add(datatable);

     

               this.GridView1.DataSource = dataset;

               this.GridView1.DataBind();

                Session["Gridview1"] = dataset;

     

               string returnstring = null;

     

           using (System.IO.StringWriter sw = new System.IO.StringWriter())

               {

                         HtmlTextWriter htw = new HtmlTextWriter(sw);

                        GridView1.RenderControl(htw);

                           htw.Flush();

                        returnstring = sw.ToString();

               }

               return returnstring;

                                   

          }

         else

          {

            return "未查询到任何信息!";

          }

                             

        }

                           

          }   

         }    

        }

      catch (Exception ex)

       {

                SystemLog.WriteLog("矩形选择要素出错!", ex);

       }

    return "未查询到任何信息!";

    }

    4、另外GridView分页的实现参照本博客其他文章。这样就实现了矩形选择查询,仔细体会吧。

    一起学习GIS及其二次开发,一起进步!
  • 相关阅读:
    『高性能模型』卷积复杂度以及Inception系列
    『高性能模型』轻量级网络梳理
    『计算机视觉』YOLO系列总结
    利用Azure Functions和k8s构建Serverless计算平台
    我如何通过K8S开发认证(CKAD)考试
    对Windows桌面应用程序进行UI自动化测试
    Service Fabric是什么?
    如何把遗留的Java应用托管在Service Fabric中
    如何在本地数据中心安装Service Fabric for Windows集群
    当TFS/VSTS遇上Power BI
  • 原文地址:https://www.cnblogs.com/tuncaysanli/p/1390302.html
Copyright © 2020-2023  润新知