<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

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

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

        作者:Flyingis

        本文嚴(yán)禁擅自轉(zhuǎn)載或用于商業(yè)目的,如有需要請事先聯(lián)系作者:dev.vip#gmail.com

        Web ADF全名是Web Application Develope Framework,是ArcGIS Server專用的開發(fā)框架,9.2版本的ArcIMS也開始提供ADF的封裝。完全使用Web控件編程幾乎不能解決我們實際項目中的問題,因此我們從《ArcGIS Server 開發(fā)系列(一)--編程框架總覽》中提到的途徑二開始,即web controls + common datasource apis。

        目標(biāo):

        根據(jù)查詢語句實現(xiàn)圖層信息查詢

        準(zhǔn)備工作:

        1.Windows XP sp2中/英文版
        2.Visual Studio 2005中/英文版
        3.ArcGIS Server 9.2(我打上了sp2補(bǔ)丁),創(chuàng)建一個ArcGIS Server服務(wù),Map Server屬性中更改Pooling,使用池化連接方式,Progresses選擇“In a seperate process for each instance(high isolation)”,我的服務(wù)為“World”
        4.利用vs2005創(chuàng)建一個模板server應(yīng)用--Web Mapping Application,并更改MapResourceManager屬性



        這樣我們可以測試程序看是否能夠正常運(yùn)行,啟動調(diào)試看到如下結(jié)果:


        代碼實現(xiàn):

        我們要完成的工作是對圖層屬性信息的查詢,首先在頁面左側(cè)添加一個新的panel,左側(cè)的Tasks、Results等都是放置在panel之中,在這個新的panel中分別添加TreeViewPlus、TextBox、Button三個控件,TextBox輸入查詢條件,Button確定查詢, TreeViewPlus顯示結(jié)果,在設(shè)計試圖中瀏覽效果如下:


        雙擊“Query”Button,編寫點(diǎn)擊事件。

        protected void cmdQuery_Click(object sender, EventArgs e)
        
    {
            Query(Map1.Extent);
        }

        Query方法實現(xiàn)了對圖層屬性信息的查詢。   

    protected void Query(ESRI.ArcGIS.ADF.Web.Geometry.Geometry geometry)
        
    {
            IEnumerable func_enum 
    = null;
            
    //獲取當(dāng)前map1控件中所有的functionality
            func_enum = Map1.GetFunctionalities();

            System.Data.DataTable datatable;
            
    //對所有的functionality進(jìn)行遍歷
            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();
                    
    //設(shè)置過濾器的過濾條件,txtQuery就是panel中text box的ID
                    spatialfilter.ReturnADFGeometries = false;
                    spatialfilter.MaxRecords 
    = 1000;
                    spatialfilter.WhereClause 
    = txtQuery.Text;
                    spatialfilter.Geometry 
    = geometry;

                    
    //對指定的圖層進(jìn)行查詢,查詢的結(jié)果保存為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;
                        
    //將結(jié)果綁定到TreeViewPlus控件上
                        TreeViewPlus1.BindToDataSet(ds);

                        TreeViewPlus1.Nodes[
    0].Expanded = true;
                    }

                }

            }

        }

       
        運(yùn)行程序,text box中輸入“CNTRY_NAME LIKE 'A%'”,查詢結(jié)果:


        這樣這個小程序就完成了,在server中實現(xiàn)了對圖層屬性信息的查詢,現(xiàn)在我們需要進(jìn)行更多的考慮:

        第一,考慮web控件、 functionality、datasource、resource、resourcemamager之間的關(guān)系,代碼中多次對它們的關(guān)系進(jìn)行了描述,用文檔中的一幅圖可以概括整個框架,這篇文章對此進(jìn)行了闡述--《ArcGIS Server .Net Web ADF體系結(jié)構(gòu)》。


        第二,程序中使用的mxd僅僅包含一個world圖層,因此對圖層進(jìn)行遍歷的過程中只需獲得第一圖層的ID,如果指定圖層名,可以在lnames得到所需的圖層進(jìn)行查詢。

        第三,程序?qū)崿F(xiàn)的查詢方式相當(dāng)簡單,在text box中輸入原始的sql來完成where語句,只僅僅是一個測試,一般我們會屏蔽掉sql相關(guān)的關(guān)鍵字,提供多個text box或dropdownlist供用戶選擇進(jìn)行字段查詢。

        第四,如果查詢信息量不大,返回結(jié)果數(shù)量不多,完全可以考慮ajax來完成頁面請求,不論是速度還是用戶體驗都會得到提高。

        第五,通過程序可以看到,查詢結(jié)果保存在一個datatable中,這極大的方便了server查詢和.net的無縫連接,直接將結(jié)果和TreeViewPlus綁定,換成其他的visual studio控件也沒問題。

        只要整個框架思路清晰了,查詢功能的實現(xiàn)其實很簡單,這也是途徑2開發(fā)方式的一個例子,可以看出ArcGIS Server ADF給開發(fā)提供了很多便利,和ArcIMS相比開發(fā)難度相當(dāng),多看看文檔和ADF OMD圖可以讓我們對ArcGIS Server ADF開發(fā)有更多的了解,記住,這只是server開發(fā)的起步。

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

    評論

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

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

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

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

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

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

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

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

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

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

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

    @question
    wms是gis地圖服務(wù)標(biāo)準(zhǔn)的一種,你在arccatalog中可以add wms server查看地圖。
    2008-01-02 10:10 | Flyingis

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

    現(xiàn)在來說思路已經(jīng)清晰好多了!謝謝1
    2008-01-10 18:49 | 廣州的丫頭

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

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

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

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

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

    protected void Query(ESRI.ArcGIS.ADF.Web.Geometry.Geometry geometry) 這句應(yīng)該是protected void Query(ESRI.ArcGIS.ADF.Web.Geometry geometry)吧
    2010-08-11 11:20 | 第三關(guān)
    主站蜘蛛池模板: 激情内射亚洲一区二区三区爱妻| 97国产在线公开免费观看| 亚洲嫩草影院在线观看| 亚洲国产综合无码一区二区二三区| 97视频免费在线| 国产猛男猛女超爽免费视频| 日韩成人毛片高清视频免费看| 国产精品亚洲精品观看不卡| 久久精品亚洲中文字幕无码网站| 亚洲成av人片在线观看天堂无码| 免费无码精品黄AV电影| 亚洲香蕉免费有线视频| 可以免费观看的国产视频| 久久久久久久国产免费看| 特级毛片A级毛片100免费播放 | 久久青草免费91线频观看不卡 | 在线播放免费播放av片| 中文字幕无码播放免费| 88xx成人永久免费观看| 国产午夜精品免费一区二区三区| www.av在线免费观看| 曰批全过程免费视频免费看| 青青青亚洲精品国产| 亚洲av永久中文无码精品| 伊人久久五月丁香综合中文亚洲| 亚洲国产品综合人成综合网站| 亚洲天天在线日亚洲洲精| 亚洲综合久久综合激情久久| 亚洲AV无码成人精品区在线观看 | 成人免费网站久久久| 污污的视频在线免费观看| 春暖花开亚洲性无区一区二区| 亚洲а∨精品天堂在线| 爱爱帝国亚洲一区二区三区| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 精品亚洲成a人片在线观看| 亚洲视频2020| 亚洲综合在线成人一区| 亚洲国产美女视频| 亚洲中文字幕无码爆乳app| 亚洲色大成网站www尤物|