ArcGIS Server之Ajax应用---智能查询

 本文严禁擅自转载或用于商业目的,如有需要请事先联系作者,同时也参阅了大量其他网络文档,如果您觉得侵犯您,请和我联系:chinazhousheng@gmail.com    
    基于
ADF Ajax良好的扩展性,结合了Asp.Net Ajax 1.0Atlas)进行Ajax开发,目前ADF组件并不支持UpdatePanel更新机制,但合理的利用Asp.Net Ajax将很大程序上提升程序员效率。最典型的在部分属性查询时采用的类似于Google Suggest的智能提示。

第一步:结合updatapanel以及ajaxtoolkit控件
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
              
<ContentTemplate>  <asp:TextBox ID="txtQuery" runat="server"></asp:TextBox>  
                
<ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteSearch"
         MinimumPrefixLength
="1" TargetControlID="txtQuery"
         ServicePath
="TestWebService.asmx"
         ServiceMethod
="GetSearchTerms"></ajaxToolkit:AutoCompleteExtender>
                    
</ContentTemplate>
                    
        
        
</asp:UpdatePanel>
第二步:下面列出TestWebService.asmx中的关键DEMO
string username = "username";
            
string password = "pwd";
          
string domain = "domainname";
            
string host = "localhost";

            
// Create the user identity.
            ESRI.ArcGIS.ADF.Identity userIdentity = new ESRI.ArcGIS.ADF.Identity(username, password, domain);
            
// Create a connection object to an ArcGIS Server (host), with user credentials.
            ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(host, userIdentity);
            
// Connect to the ArcGIS Server.
            agsConnnection.Connect();
            
// Get a ServerObjectManager.
            ESRI.ArcGIS.Server.IServerObjectManager som = agsConnnection.ServerObjectManager;

           
            ESRI.ArcGIS.Server.IServerContext serverContext 
= som.CreateServerContext("CSMap""MapServer");

            IServerObject so 
= serverContext.ServerObject;
            IMapServer csmap 
= (IMapServer)so;


            
string mapname = csmap.DefaultMapName;

             List
<string> suggestions = new List<string>();

            IQueryFilter pQueryFilter 
= (IQueryFilter)serverContext.CreateObject("esriGeodatabase.QueryFilter");
            pQueryFilter.WhereClause 
= "NAME LIKE  '"+prefixText+"%'";
            IRecordSet result 
= csmap.QueryFeatureData(mapname, 6, pQueryFilter);//6为图层号

            DataSet resultds 
= ESRI.ArcGIS.Server.WebControls.Converter.ToDataSet(serverContext, result);
            DataTable resultdt 
= resultds.Tables[0];
           
int icount=0;
           
while (icount < resultdt.Rows.Count)
           
{
               
string outstring = resultdt.Rows[icount]["NAME"].ToString();
               suggestions.Add(outstring);
               icount
++;
           }


           serverContext.ReleaseContext();
            
return suggestions.ToArray();
     呵 ,代码就不解释了,也不排除里面有部分垃圾代码,望大家见谅!大家有什么意见和想法可以和我交流,非常欢迎!

值得一提的是,智能查询中数据查询只适用于数据量相对较少的情况,这是由于AjaxXMLHTTP组件传输数据时会受到数据量大小限制,一旦结果数据量过大将会导致传输过程中数据丢失,因此系统在Ajax应用方面尽量考虑效率与安全平衡,涉及到大面积的查询数据时仍然采用Form提交方式而并非Ajax方式。



文章来源:http://www.cnblogs.com/chinazhousheng/archive/2008/05/17/1193851.html
posted @ 2008-11-20 16:43  GIS小能  阅读(661)  评论(5)    收藏  举报