程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ArcGis 9.2客戶端開發簡介(4)

ArcGis 9.2客戶端開發簡介(4)

編輯:.NET實例教程


全圖

public void Extend(PictureBox m_PictureBox)

        {

            try

            {

                String m_sDataFrame = map.DefaultMapName;

                ESRI.ArCGIS.Carto.IMapServerInfo mapi = map.GetServerInfo(m_sDataFrame);

                ESRI.ArCGIS.Carto.IMapDescription pMapDescription;

                pMapDescription = mapi.DefaultMapDescription;

                IMapArea ma = pMapDescription.MapArea;

                IMapExtent pMapExtent = ma as IMapExtent;

                pMapExtent.Extent = mapi.FullExtent ;

                pMapDescription.MapArea = ma;

                // save the map description and draw the map

                m_sMapDesc = pMapDescription;

                drawMap(ref pMapDescription, m_PictureBox);

            }

            catch (Exception exception)

            {

                MessageBox.Show(exception.Message, "An error has occurred");

            }

        }

放大操作的基本原理是取得mapserver服務器該地圖的FullExtent,然後將其轉換提交服務器,取得圖形進行顯示。

鷹眼操作

       由於在實際使用過程中。有很多針對地圖的操作需要在鷹眼上來實現,所以在本實例中添加了鷹眼點擊漫游的功能:具體實現代碼如下:

       待加

圖層操作

       以下是針對圖層設置其是否顯示的代碼,這些代碼可以結合treevIEw控件來實現對地圖圖層的整體控制功能:


public void setLayerVisible(int LayerId, PictureBox PictureBox, Boolean m_bVisible)

        {

            String m_sDataFrame = map.DefaultMapName;

            ESRI.ArCGIS.Carto.IMapDescription pMapDescription;

            ESRI.ArCGIS.Carto.IMapServerInfo mapi = map.GetServerInfo(m_sDataFrame);

            pMapDescription = m_sMapDesc;

            int m_layerCount = mapi.MapLayerInfos.Count;

            for (int i = 0; i < m_layerCount; i++)

            {

                if (pMapDescription.LayerDescriptions.get_Element(i).ID == LayerId)

                {

                    pMapDescription.LayerDescriptions.get_Element(i).Visible = m_bVisible;

                    i = m_layerCount;

                }

            }

            m_sMapDesc = pMapDescription;

            drawMap(ref pMapDescription, PictureBox);

        }

        public void setLayerVisible(String LayerName, PictureBox PictureBox, Boolean m_bVisible)

        {

            String m_sDataFrame = map.DefaultMapName;

            ESRI.ArCGIS.Carto.IMapDescription pMapDescription;

            ESRI.ArCGIS.Carto.IMapServerInfo mapi = map.GetServerInfo(m_sDataFrame);

            pMapDescription = m_sMapDesc;

            int m_layerCount = mapi.MapLayerInfos.Count;

            for (int i = 0; i < m_layerCount; i++)


;      {

                if (mapi.MapLayerInfos.get_Element(i).Name == LayerName)

                {

                    pMapDescription.LayerDescriptions.get_Element(i).Visible = m_bVisible;

                    i = m_layerCount;

                }

            }

            m_sMapDesc = pMapDescription;

            drawMap(ref pMapDescription, PictureBox);

        }

查詢

       待加

    

查詢定位

待加

 

ArCGIs Engine 

環境需要

ArCGIs Engine開發方式主要是使用ArCGIs Engine 提供的各類空間來實現功能,因此需要有在開發機上需要安裝Visual Studio 2005軟件開發平台和ArCGIs Engine開發支持庫。

流程描述

ArCGIs Engine的基本開發方式是首先在窗體上添加一個ArCGIs控件AxMapControl。在程序中控制AxMapControl控件打開mxd文件,從而根據該文件內數據來源設置獲取GIS空間數據,並在控件中顯示。該AxMapControl控件中包含了Gis空間數據的眾多設置,包括有多少個圖層、圖層的名稱,放大、縮小操作接口等等。如果需要對矢量數據進行操作和浏覽的時候,只需要針對AxMapControl控件內的相關內容進行設置並刷新便可以實現。

開發步驟

       打開VS2005,新建一個工程。在工程建立完畢以後,為窗體添加一個AxMapControl控件,如下圖:

 

       控件添加完成以後,由於arCGIs需要對Engine開發的lisence進行驗證,所以必須在工程中添加LicenseControl控件。在添加完認證控件後,需要設置控件讀取的地圖數據。

       點擊AxMapControl控件,然後選擇屬性框中的屬性頁,系統會彈出控件的屬性設置:

       點擊Layers上的 ,為控件添加初始圖層。

       選擇Server後,添加新的ArCGIs Server。選擇Local ServerInternet Server,根據服務器的配置進行輸入、添加。Server添加成功以後會看到

      

選擇服務器發布的某個地圖服務,然後選擇Open就完成了設置。    

     如果需要得到讀取的Gis數據有多少個圖層,並想使用treevIEw控件顯示出來,可以使用一下代碼:

            treeVIEw1.Nodes.Clear();

            for (int i = 0; i <= axMapControl1.LayerCount - 1; i++)

            {

 

                treeVIEw1.Nodes.Add(axMapControl1.get_Layer(i).Name);

                treeVIEw1.Nodes[i].Checked = true;

            }

     這樣在程序運行的時候點擊打開菜單就能打開一個GIS數據源並進行浏覽。

      

 

       以上只是實現了數據的浏覽,如果要對地圖實現放大、縮小、平移等操作還需要在代碼中進行設置。

       ArCGIs Engine提供了豐富的地圖操作控件能夠方便的實現以上基本的地圖操作,例如ToolBarControl便能方便的在工具欄中添加ArCGIs預設置的多個控件。在這裡我將對如何使用代碼來實現簡單的地圖操作進行介紹。

       在工具欄的放大按鈕代碼中添加以下代碼便能按比例的實現地圖的放大:

                     ESRI.ArCGIS.Geometry.IEnvelope pEnvelope = axMapControl1.Extent;

  double eWidth = Math.Abs(pEnvelope.XMax - pEnvelope.XMin);

                double eHeight = Math.Abs(pEnvelope.YMax - pEnvelope.YMin);

                double xFactor = (eWidth - (eWidth * 0.75)) / 2;

                double yFactor = (eHeight - (eHeight * 0.75)) / 2;

                pEnvelope.XMax = pEnvelope.XMax - xFactor;

                pEnvelope.XMin = pEnvelope.XMin + xFactor;

                pEnvelope.YMax = pEnvelope.YMax - yFactor;

                pEnvelope.YMin = pEnvelope.YMin + yFactor;

                axMapControl1.Extent = pEnvelope;

     縮小:

              ESRI.ArCGIS.Geometry.IEnvelope pEnvelope = axMapControl1.Extent;

                double eWidth = Math.Abs(pEnvelope.XMax - pEnvelope.XMin);

                double eHeight = Math.Abs(pEnvelope.YMax - pEnvelope.YMin);

                double xFactor = ((eWidth * 1.25) - eWidth) / 2;

                double yFactor = ((eHeight * 1.25) - eHeight) / 2;

                pEnvelope.XMax = pEnvelope.XMax + xFactor;

                pEnvelope.XMin = pEnvelope.XMin - xFactor;

                pEnvelope.YMax = pEnvelope.YMax + yFactor;

                pEnvelope.YMin = pEnvelope.YMin - yFactor;

                axMapControl1.Extent = pEnvelope;

     平移操作:

                     axMapControl1.Pan();

     全圖:

              axMapControl1.Extent = axMapControl1.FullExtent;

 

     圖層操作:

         private void treeView1_AfterCheck(object sender, TreeVIEwEventArgs e)

 {

           

            if ((e.Node.Checked == false)&&(axMapControl1.get_Layer(e.Node.Index).Visible==true ))

            {

               axMapControl1.get_Layer(e.Node.Index).Visible=false ;

               axMapControl1.Refresh();

               // axMapControl1.

            }

 

if ((e.Node.Checked ==true ) && (axMapControl1.get_Layer(e.Node.Index).Visible==false ))

            {

 

                axMapControl1.get_Layer(e.Node.Index).Visible = true ;

                axMapControl1.Refresh();

            }

 

        } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved