地圖網格設定
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(); } } }
