<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
    數據加載中……

    BlueViewer 地圖加載分析(C#)

    ??? 作者:Flyingis

    ??? BlueViewer是基于.NET Link進行ArcIMS二次開發的一個實例,里面包含了WebGIS最基本的一些功能。關于ArcIMS結構及其簡介可以參考我的另外一篇隨筆《ArcIMS體系結構》。關于.NET Link連接器的介紹可以參考《ArcIMS連接器--.NET Link使用方法》。Mars寫了一篇《淺析ArcIMS》,對BlueViewer做了簡單的分析。

    ??? 使用.NET Link進行ArcIMS二次開發并不復雜,但不少剛剛接觸GIS朋友面對大量JavaScript和ArcXML,加上對WebGIS運行機制不了解,還是感覺無從下手。這篇隨筆將對BlueViewer地圖加載顯示機制進行剖析,看看整個代碼的運行過程,代碼語言使用C#。

    ??? 使用HTML、ArcExplorer、JavaViewer客戶端進行開發,需要在客戶端使用JavaScript對ArcXML進行編寫與封裝,雖然ArcXML的傳輸過程變得相對簡單,但對人的耐力絕對是個莫大的考驗,因此一般建議使用ArcIMS的各種連接器進行二次開發,BlueViewer就是基于.NET Link進行二次開發的一個實例。

    ??? 連接器的主要作用,就是根據客戶端的請求,將請求封裝為ArcXML傳輸到ArcIMS應用服務器,以及將ArcIMS應用服務器發送回來的結果提取出來(一般為圖片),發送給客戶端,響應用戶請求。在客戶端,用戶對地圖的操作及地圖的顯示還是由JavaScript來控制,但相對于在客戶端編寫ArcXML來說,其工作量還是要減輕不少,開發方法更符合OOP,其中.NET Link相對來說在面向對象方面做的不怎么好,但使用ASP.NET進行開發,.NET Link是不二的選擇。

    ??? 下面是對程序啟動地圖顯示過程的分析
    ----------------------------------------
    ?
    ??? 在default.aspx中有五個隱藏域,hvMinX、hvMinY、hvMaxX、hvMaxY、hvMapPage,前四個對象描述當前地圖顯示范圍,最后一個返回地圖顯示的url。程序啟動第一步就是初始化這些值,在default.aspx.cs中有詳細描述。

    protected?void?Page_Load(object?sender,?System.EventArgs?e)
    {
    ??
    if?(!(IsPostBack))
    ??
    {
    ????Session.Add(
    "VALID_USER",?true);
    ????hvMapPage.Value?
    =?"MakeMap.aspx";
    ??}

    ??
    if?((Request.QueryString["XMIN"]?==?null?|?Request.QueryString["YMIN"]?==?null?|
    ????? Request.QueryString[
    "XMAX"]?==?null?|?Request.QueryString["YMAX"]?==?null))
    ??
    {
    ????hvMinX.Value?
    =?System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMIN"];
    ????hvMinY.Value?
    =?System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMIN"];
    ????hvMaxX.Value?
    =?System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMAX"];
    ????hvMaxY.Value?
    =?System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMAX"];
    ??}

    ??
    else
    ??
    {
    ????hvMinX.Value?
    =?Request.QueryString["XMIN"];
    ????hvMinY.Value?
    =?Request.QueryString["YMIN"];
    ????hvMaxX.Value?
    =?Request.QueryString["XMAX"];
    ????hvMaxY.Value?
    =?Request.QueryString["YMAX"];
    ??}

    }

    ??? 在default.aspx的<body/>中,onload調用main.js的startUp()方法。在startUp()中,先后調用posLoadingImage()、posBorder()、posBorderNavigation()、posTools()四個方法,它們分別代表圖像加載時的"Loading"圖標、放大縮小圖框、方位移動圖標的定位(A)、下方整個工具狀態欄的位置(B,依賴方位移動圖標的位置)。然后通過handleToolClick()確定當前鼠標操作是放大縮?。╥ToolMode==1),還是移動圖層(iToolMode==2),通過m_txtXCoord和m_txtYCoord初始化當前X/Y坐標的顯示(C)。

    BlueViewer.jpg


    m_imgMapCanvas.onload?=?hideWaitImage;

    ??? 這段代碼說明了在服務器響應用戶操作之前的時刻,客戶端所作的狀態清理工作,hideWaitImage主要的作用是清楚用戶的放大縮小框,隱藏"Loading"圖標。
    ?
    ??? 到目前為止,程序完成了在向ArcIMS應用服務器發送ArcXML之前的所有工作,包括程序界面顯示、客戶端對用戶界面操作的響應,下面緊接著,就是用戶請求的發送與系統服務器端(Web應用服務器、ArcIMS應用服務器和ArcIMS空間服務器統稱)對用戶請求的響應。因為這里描述的是程序啟動的過程,不涉及到用戶對地圖的實際操作,但用戶對地圖的操作無非是一堆JavaScript代碼,對后面的程序響應過程沒有太多影響。不論是程序啟動,還是用戶對地圖進行操作請求服務,都要通過submit()方法來發送請求并返回系統服務器端響應。

    function?submit()?{

    ??
    var?sURL?=?m_hvMapPage.value+"?XMIN="+
    ????m_mapViewer.getExtent().getLeft()
    +
    ????
    "&YMIN="+m_mapViewer.getExtent().getBottom()+
    ????
    "&XMAX="+m_mapViewer.getExtent().getRight()+
    ????
    "&YMAX="+m_mapViewer.getExtent().getTop()+
    ????
    "&WIDTH="+m_mapViewer.getTagWidth()+
    ????
    "&HEIGHT="+m_mapViewer.getTagHeight();

    ??updateZoomLevel(m_mapViewer.getLevel());
    ??showWaitImage();

    ??
    if?(navigator.userAgent.indexOf('Netscape6/6')?>?-1)?{
    ????m_lTimerID?
    =?setInterval("hideWaitImageForNetscape6();",100);
    ??}


    ??m_imgMapCanvas.src?
    =?sURL;

    ??persistExtent();

    }

    ??? 在default.aspx的Page_Load()中,hvMapPage.Value已被賦值為"MakeMap.aspx",此時將調用MakeMap.aspx頁面并啟動其Page_Load()過程,在這個過程中實現了根據用戶請求封裝ArcXML的發送,和系統服務器端的響應,具體的過程可以參考《ArcIMS連接器--.NET Link使用方法》。頁面會返回用戶所需要的圖片的url,并定義當前地圖的顯示范圍,賦給submit()的各個參數,通過persistExtent()方法將地圖范圍保存在hvMinX、hvMinY、hvMaxX、hvMaxY四個隱藏域中。

    ??? 到此,程序完成了整個啟動過程,其界面如上圖所示,當用戶對其進行操作請求服務時,除了JavaScript操作不同外,其他過程基本相同。熟悉JavaScript和XML,理解了ArcIMS的體系結構和服務請求過程,進行.NET Link二次開發還是不復雜的。在Ajax橫行天下的年代,將客戶端請求服務和響應客戶端請求的過程用Ajax來實現,可以擺脫frame框架的束縛,改善代碼的邏輯結構,增強WebGIS的用戶體驗。

    posted on 2006-09-03 23:14 Flyingis 閱讀(2714) 評論(5)  編輯  收藏 所屬分類: ArcIMS

    評論

    # re: BlueViewer 地圖加載分析(C#)  回復  更多評論   

    關于hvMinX、hvMinY、hvMaxX、hvMaxY經緯度有正負之分,東經為正西經為負,北緯為正南緯為負。
    2006-09-05 15:19 | Flyingis

    # re: BlueViewer 地圖加載分析(C#)  回復  更多評論   

    你好!我昨天明明給你發了一個回復,可是今天找不到了!
    我是一個新手,開始的時候是用定制Html Viewer的方法進行地圖顯示,但是不知道該如何顯示多個地圖。比如,我在一個單選框中選擇河北省,就能調出相應省份的地圖。
    我現在又看到了.net link 不知道用這個是不是好些呢?現在我不知道如何把這個程序改為顯示我自己的地圖。請指教!
    2006-11-08 16:30 | 水杯小小

    # re: BlueViewer 地圖加載分析(C#)  回復  更多評論   

    @水杯小小
    這條留言(wangyan)是你的吧:
    http://www.cnblogs.com/flyingis/archive/2006/09/03/493978.html
    那是我在博客園的博客。
    2006-11-08 17:47 | Flyingis

    # re: BlueViewer 地圖加載分析(C#)[未登錄]  回復  更多評論   

    例子里的數據是怎樣操作的,為什么ArcIMS中自帶的例子無法運行?
    2007-06-12 11:47 | 行者

    # re: BlueViewer 地圖加載分析(C#)  回復  更多評論   

    需要在asp.net config文件中指定service、server名稱,BlueViewer.axl中修改數據的路徑。
    2007-06-13 12:34 | Flyingis
    主站蜘蛛池模板: 国产男女猛烈无遮档免费视频网站 | 久久无码av亚洲精品色午夜| 3344免费播放观看视频| 亚洲成AV人片在线观看| 成在人线av无码免费高潮喷水 | 亚洲精品美女久久久久99| 色www永久免费| 亚洲av无码av制服另类专区| 暖暖日本免费中文字幕| 久久精品国产亚洲AV麻豆不卡| 成全在线观看免费观看大全| 亚洲国产成人高清在线观看| 青青草无码免费一二三区| 亚洲视频一区二区三区| 99久久精品日本一区二区免费| 亚洲一欧洲中文字幕在线| 精品熟女少妇AV免费观看| 亚洲另类无码专区首页| 夜色阁亚洲一区二区三区| 99re热精品视频国产免费| 内射少妇36P亚洲区| 国产91免费在线观看| 香蕉大伊亚洲人在线观看| 国产又大又黑又粗免费视频| 日日摸夜夜添夜夜免费视频| 亚洲中文字幕日产乱码高清app| 国产一区二区免费| 亚洲AV综合色区无码二区爱AV| 日本特黄a级高清免费大片| 一区视频免费观看| 蜜芽亚洲av无码精品色午夜| 日本一区二区三区免费高清| 亚洲AV成人片无码网站| 亚洲日韩精品一区二区三区无码| 99久久免费精品高清特色大片| 在线a亚洲老鸭窝天堂av高清| 亚洲人成影院在线观看 | 成年在线观看网站免费| 美女又黄又免费的视频| 久久精品国产亚洲AV网站| 日韩精品免费一区二区三区|