supermap布局設定地圖網格及布局網格


地圖網格設定

  LayoutElements elements = m_mapLayoutControl.MapLayout.Elements;               
                //構造GeoMap
                GeoMap geoMap = new GeoMap();
                geoMap.MapName = "京津地區交通干線圖";
                // 新建一個 GeoMapGrid 對象。
                GeoMapGrid geoMapGrid = new GeoMapGrid();

                // 設置 GeoMapGrid 對象的相關屬性,即設置地圖的經緯網的風格。

                // 設置為地圖添加經緯網。
                geoMapGrid.GridType = GeoMapGridType.Graticule;
                // 設置經緯網的格網線的線型風格。
                geoMapGrid.GridLineStyle.LineSymbolID = 9;
                geoMapGrid.GridLineStyle.LineColor = Color.Black;
                // 設置經緯網的格網線的水平、豎直間距。
                geoMapGrid.HorizontalGridDistance = 40;
                geoMapGrid.VerticalGridDistance = 40;
                // 設置經緯網的格網線的類型為實線。
                geoMapGrid.GridLineType = GeoMapGridLineType.SolidLine;
                // 設置經緯網的邊框風格。
                GeoStyle style = new GeoStyle();
                style.LineSymbolID = 6;
                style.LineColor = Color.Blue;
                style.LineWidth = 0.2;
                geoMapGrid.BorderLineStyle = style;
                // 設置經緯網文本標注的水平、豎直位置。
                geoMapGrid.HorizontalTextPosition = HorizontalTextPositionType.Middle;
                geoMapGrid.VerticalTextPosition = VerticalTextPositionType.Middle;
                // 設置經緯網文本標注的文本風格。
                geoMapGrid.GridLineTextStyle.ForeColor = Color.Black;
                geoMapGrid.GridLineTextStyle.FontHeight = 60;
                // 為地圖對象添加經緯網。
                geoMap.IsGridVisible = true;
                geoMap.MapGrid = geoMapGrid;


                //設置GeoMap對象的外切矩形
                Rectangle2D rect = new Rectangle2D(new Point2D(850, 1300), new Size2D(1500, 1500));
                GeoRectangle geoRect = new GeoRectangle(rect, 0);
                geoMap.Shape = geoRect;
                elements.AddNew(geoMap);
                m_mapID = elements.GetID();

                //構造指北針
                GeoNorthArrow northArrow = new GeoNorthArrow(
                                            NorthArrowStyleType.EightDirection,
                                            new Rectangle2D(new Point2D(1400, 2250), new Size2D(350, 350)),
                                            0);
                northArrow.BindingGeoMapID = m_mapID;

                elements.AddNew(northArrow);

                //構造比例尺
                GeoMapScale scale = new GeoMapScale(m_mapID, new Point2D(125, 400), 50, 50);
                scale.LeftDivisionCount = 2;
                scale.ScaleUnit = Unit.Kilometer;
                scale.SegmentCount = 4;

                elements.AddNew(scale);
地圖網格設定

布局網格設定

 /*
            //背景色
            GeoStyle  s=new GeoStyle();
            s.FillForeColor = background.BackColor;
            m_mapLayoutControl.MapLayout.BackgroundStyle = s;     
     
            //刻度尺
            RulerSetting ssss = m_mapLayoutControl.MapLayout.RulerSetting;
            ssss.IsRulerVisible = false;
            //壓蓋
            m_mapLayoutControl.MapLayout.IsOverlapDisplayed = true;
            //布局文字反走樣式
            m_mapLayoutControl.MapLayout.IsTextAntialias = true;
           //最小縮放比例
            m_mapLayoutControl.MapLayout.MinZoomRatio = 0.01;
            //最大縮放比例
            m_mapLayoutControl.MapLayout.MaxZoomRatio = 0.01;
            //是否顯示水平滾動條
            m_mapLayoutControl.IsHorizontalScrollbarVisible = true;
            //是否顯示垂直滾動條
            m_mapLayoutControl.IsVerticalScrollbarVisible = true;
            //是否支持對象修改后啟用實時刷新
           // m_mapLayoutControl.RefreshAtTracked = true;
            //獲取設置格網是否可以捕捉
            m_mapLayoutControl.IsGridSnapable = true;

         */
            //構造一個格網設置對象,並設置其相應屬性
            GridSetting gridSetting = new GridSetting();
            gridSetting.IsSizeFixed = true;
            gridSetting.IsSnapable = true;
            gridSetting.IsVisible = true;
            gridSetting.VerticalSpacing = 50;
            gridSetting.Type = GridType.Cross;
            gridSetting.HorizontalSpacing = 50;

            GeoStyle style1 = new GeoStyle();
            style1.LineColor = Color.Gray;
            gridSetting.DashStyle = style1;

            GeoStyle style2 = new GeoStyle();
            style2.LineColor = Color.Gold;
            gridSetting.SolidStyle = style2;
            //設置地圖對象的格網設置
            m_mapLayoutControl.MapLayout.Paper.Grid = gridSetting;

           // m_mapLayoutControl.MapLayout.Paper.IsVisible = false;
           // m_mapLayoutControl.MapLayout.Elements.AddNew(geoMap);
          
           m_mapLayoutControl.MapLayout.Refresh();
布局網格設定

 

 /// <summary>
        /// 布局添加要素方法事件
        /// cwj
        /// 2017-07-19
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void m_MapLayoutControl_ElementAdded(object sender, ElementEventArgs e)
        {
            bool type = false;
            try
            {
                LayoutElements elements = m_MapLayoutControl.MapLayout.Elements;
                if (elements.SeekID(e.ID))
                {
                    Geometry gemetry = elements.GetGeometry();
                    if (gemetry != null)
                    {
                        GeoNorthArrow northArrow = gemetry as GeoNorthArrow;
                        if (northArrow != null)
                        {
                            if (mapLayoutGeolend < 0) return;
                            type = false;
                            northArrow.BindingGeoMapID = mapLayoutGeolend;
                            elements.SeekID(northArrow.ID); 
                        }
                        GeoMapScale mapScale = gemetry as GeoMapScale;
                        if (mapScale != null)
                        {
                            if (mapLayoutGeolend < 0) return;
                            type = false;
                            mapScale.BindingGeoMapID = mapLayoutGeolend;
                            elements.SeekID(mapScale.ID); 
                        }

                        GeoLegend geoLegend = gemetry as GeoLegend;                       
                        if (geoLegend != null)
                        {
                            if (mapLayoutGeolend < 0) return;
                            type = false;
                            elements.SeekID(mapLayoutGeolend); //根據圖例中地圖的id進行查找獲取地圖對象
                            GeoMap geoMap = (GeoMap)elements.GetGeometry();                          
                            string geoMapName = geoMap.MapName;
                            geoLegend.MapName = geoMapName;                      
                            geoLegend.Load(false);
                            elements.SeekID(geoLegend.ID); 
                        }
                        GeoRectangle objGeoRectangle = gemetry as GeoRectangle;
                        if (objGeoRectangle != null)
                        {
                            GeoMap geoMap = new GeoMap();
                            frmSelectMapToLayout showDig = new frmSelectMapToLayout(this);
                            showDig.ShowDialog();
                            if (string.IsNullOrWhiteSpace(showDig.mapNameDisplay)) return;
                            geoMap.MapName = showDig.mapNameDisplay;                        
                            geoMap.Shape = objGeoRectangle; 
                             int[] id = new int[] { e.ID };
                            //對繪制的矩形先刪除,再把地圖展示出來
                             //一簫一劍走江湖,環球願景已荒蕪。
                             elements.Delete(id);
                             elements.AddNew(geoMap);                         
                             type = true;                        

                        }
                        if (type)
                        {
                           // elements.AddNew(gemetry);
                            this.m_MapLayoutControl.LayoutAction = SuperMap.UI.Action.Select2;
                        }
                        //當初是出於什么原因把這段代碼加上呢???????  
                            //原因是 當不加入一下代碼是 添加用addnew方法會導致在拖動 控件時 多出一個白色的框,暫不理解addnew 和setgeometry的原理,看api解析不好使,猜測是繪制框顯示的問題
                        else
                        {
                           
                            elements.SetGeometry(gemetry);
                            GeoLine geoLine = gemetry as GeoLine;
                            GeoPoint geoPoint = gemetry as GeoPoint;
                            GeoPoint geoRegion = gemetry as GeoPoint;
                            if (geoLine != null || geoPoint != null || geoRegion != null)
                            {

                            }
                            else
                            {
                                this.m_MapLayoutControl.LayoutAction = SuperMap.UI.Action.Select2;
                            }
                        }
                        elements.Refresh();                     
                        m_MapLayoutControl.MapLayout.Refresh();
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorTrapping.WriteLog(ex);
            }
        }
        //選擇地圖
        public int GetMapID()
        {
            int mapID = -1;
            int count = 0;
            LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
            LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
            layoutElements.Refresh();
            for (int i = 0; i < layoutSelection.Count; i++)
            {
                int ID = layoutSelection[i];
                layoutElements.SeekID(ID);
                Geometry geometry = layoutElements.GetGeometry();
                if (geometry.Type == GeometryType.GeoMap)
                {
                    mapID = ID;
                    count++;
                }
                if (count > 1)
                {
                    mapID = -1;
                }
            }
            return mapID;
        }
        //選擇指南針
        public int GetArrowID()
        {
            int ArrowID = -1;
            int count = 0;
            LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
            LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
            layoutElements.Refresh();
            for (int i = 0; i < layoutSelection.Count; i++)
            {
                int ID = layoutSelection[i];
                layoutElements.SeekID(ID);
                Geometry geometry = layoutElements.GetGeometry();
                if (geometry.Type == GeometryType.GeoNorthArrow)
                {
                    ArrowID = ID;
                    count++;
                }
                if (count > 1)
                {
                    ArrowID = -1;
                }
            }
            return ArrowID;
        }
        //選擇比例尺
        public int GetScaleID()
        {
            int ScaleID = -1;
            int count = 0;
            LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
            LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
            layoutElements.Refresh();
            for (int i = 0; i < layoutSelection.Count; i++)
            {
                int ID = layoutSelection[i];
                layoutElements.SeekID(ID);
                Geometry geometry = layoutElements.GetGeometry();
                if (geometry.Type == GeometryType.GeoMapScale)
                {
                    ScaleID = ID;
                    count++;
                }
                if (count > 1)
                {
                    ScaleID = -1;
                }
            }
            return ScaleID;
        }
        //選擇比例尺
        public int GetlendID()
        {
            int lendID = -1;
            int count = 0;
            LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
            LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
            layoutElements.Refresh();
            for (int i = 0; i < layoutSelection.Count; i++)
            {
                int ID = layoutSelection[i];
                layoutElements.SeekID(ID);
                Geometry geometry = layoutElements.GetGeometry();
                if (geometry.Type == GeometryType.GeoLegend)
                {
                    lendID = ID;
                    count++;
                }
                if (count > 1)
                {
                    lendID = -1;
                }
            }
            return lendID;
        }

        /// <summary>
        /// cwj 2017-07-19 ******
        /// 指南針點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void arrorwAttri_Click(object sender, EventArgs e)
        {
            int ID = GetArrowID();
            if (ID > 0)
            {
                LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements; 
              
                layoutElements.SeekID(ID);
                Geometry objGeometry = layoutElements.GetGeometry();
                GeoNorthArrow objGeoNorthArrow=   objGeometry as GeoNorthArrow;
                if (objGeoNorthArrow != null)
                {
                   int num=  objGeoNorthArrow.BindingGeoMapID;
                  //  int ss = mapLayoutGeolend;
                   layoutElements.SeekID(num);
                    GeoMap objGeoMap = layoutElements.GetGeometry() as GeoMap;
                    string name = objGeoMap.MapName;
                    //layoutElements.SeekID(ID);
                    frmLayoutNorth objfrmLayoutNorth = new frmLayoutNorth(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout, num);
                    objfrmLayoutNorth.Show();
                  
                }
            }

        }
        /// <summary>
        /// cwj 2017-07-19 ******
        /// 比例尺點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void layoutmapScalem_Click(object sender, EventArgs e)
        {
            int ID = GetScaleID();
            if (ID > 0)
            {
                LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
                layoutElements.SeekID(ID);
                Geometry objGeometry = layoutElements.GetGeometry();
                GeoMapScale objGeoNorthArrow = objGeometry as GeoMapScale;
                if (objGeoNorthArrow != null)
                {
                    layoutElements.SeekID(mapLayoutGeolend);
                    GeoMap objGeoMap = layoutElements.GetGeometry() as GeoMap;
                    string name = "";
                    if (objGeoMap != null) {
                        name = objGeoMap.MapName;
                    }                    
                    frmLayoutSc objfrmLayoutNorth = new frmLayoutSc(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout);
                    objfrmLayoutNorth.Show();

                }
            }
        }
        /// <summary>
        /// cwj 2017-07-19 ******
        /// 圖例點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void maptuli_Click(object sender, EventArgs e)
        {
            int ID = GetlendID();
            if (ID > 0)
            {
                LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
                layoutElements.SeekID(ID);
                Geometry objGeometry = layoutElements.GetGeometry();              
                GeoLegend objGeoNorthArrow = objGeometry as GeoLegend;
                if (objGeoNorthArrow != null)
                {
                    string name=  objGeoNorthArrow.MapName;                  
                    frmLayoutLen objfrmLayoutNorth = new frmLayoutLen(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout);
                    objfrmLayoutNorth.Show();
                }
            }
        }
繪制布局要素

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM