7m棒球比分:Flyingis

Talking and thinking freely !
Flying in the world of GIS !
隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
數據加載中……

ArcGIS Server 開發系列(二)--Web ADF 編程

棒球比分大小怎么算 www.355548.live     作者: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(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開發的起步。

posted on 2007-08-14 13:55 Flyingis 閱讀(6838) 評論(10)  編輯  收藏 所屬分類: ArcGIS Server

評論

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

寫得不錯,繼續努力,期待ArcGIS Server 開發系列(三)......
2007-08-21 11:49 | zhaomz

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

這邊server寫的更多,暫時沒有轉過來:
//www.cnblogs.com/flyingis
2007-10-16 11:34 | Flyingis

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

我在幫助上看,一個簡單的WEB瀏覽器就可以打開WMS服務。
WMS是不是就是個一般的地圖呢》》請問
問什么我輸入URL的時候報錯捏。。
難道普通的IE瀏覽器不可以顯示打開嗎
opernlayers是什么東東啊
2007-11-20 09:44 | question

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

學習中,覺得你的文章對我這個初學者太有用了。
2007-12-26 22:22 | 丫頭

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

@丫頭
開發系列更多的可以看這里的文章:
//www.cnblogs.com/flyingis
2008-01-02 09:43 | Flyingis

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

@question
wms是gis地圖服務標準的一種,你在arccatalog中可以add wms server查看地圖。
2008-01-02 10:10 | Flyingis

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

現在來說思路已經清晰好多了!謝謝1
2008-01-10 18:49 | 廣州的丫頭

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

寫得很好,對我這樣的初學者很有用,多謝了
2008-11-01 11:20 | leepf7211

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

請問wms服務添加后在發布的地址是多少?
2009-01-03 21:13 | lizhenhuatop

# re: ArcGIS Server 開發系列(二)--Web ADF 編程  回復  更多評論   

protected void Query(ESRI.ArcGIS.ADF.Web.Geometry.Geometry geometry) 這句應該是protected void Query(ESRI.ArcGIS.ADF.Web.Geometry geometry)吧
2010-08-11 11:20 | 第三關
{ganrao}