超图举例单值专题图色带样式控制
生活随笔
收集整理的這篇文章主要介紹了
超图举例单值专题图色带样式控制
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
此文是用.NET Iobject 7c 下利用vs2010開發(fā)的winform版 單值專題圖的創(chuàng)建及色帶的修改。在此記下來以便后期參考(可能很快就會被淹沒,超圖的更新?lián)Q代很快)
初期由于不知道樣式的承載控件應該選擇那個,測試過listview、listbox,但是效果都不滿意,偶然間查到datagridview可以更好的充當這個角色,展示效果做好肯定就要配套的修改功能了,這個修改我咨詢過客服,客服說在修改方面,只是給了一個樣式修改的接口,我測試過對修改對象進行清空,賦值都不行,對象和地圖展示的關(guān)聯(lián)較強;
在測試中發(fā)現(xiàn),若是對專題圖對象刪除再次添加,所添加的名稱和刪除圖層的名稱保持不變,最后只能曲線的進行對圖層的刪除和重新添加,
----》 第一個窗體為主窗體展示,最后一個窗體為增刪值做準備
說明:1 下拉框根據(jù)單值的條件篩選填入字段名稱
2 承載數(shù)據(jù)的控件時datagridview,需要把該控件的列指定特定的值 如圖 2?
?? 3? 按鈕--添加所有值就是重新根據(jù)條件進行讀取一次數(shù)據(jù)并展示出來
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SuperMap.Mapping; using SuperMap.Data; using SuperMap.UI; using soTest.ThematicMap;namespace SuperMap.SampleCode.Mapping {public partial class frmThemeUnique : Form{Workspace m_workspace;List<ColorGradientType> setColorTheml = null;Dataset objLayer = null;ThemeUnique objThemeUnique = null;MapControl objMapControl = null;public frmThemeUnique(Workspace m_workspace, Dataset layer, ThemeUnique objThemeUnique,MapControl objMapControl){InitializeComponent();this.m_workspace = m_workspace;this.objLayer = layer;this.objThemeUnique = objThemeUnique;this.objMapControl = objMapControl;dataGridView2.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridView2_CellMouseClick);dataGridView2.CellMouseDoubleClick += new DataGridViewCellMouseEventHandler(dataGridView2_CellMouseDoubleClick);}/// <summary>/// 窗體加載事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void frmThemeUnique_Load(object sender, EventArgs e){resources = m_workspace.Resources;// string path = Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("CurExe"));//設置單值專題圖數(shù)值 #region MyRegion setColorTheml = new List<ColorGradientType>();setColorTheml.Add(ColorGradientType.Spectrum);setColorTheml.Add(ColorGradientType.Terrain);setColorTheml.Add(ColorGradientType.GreenOrangeViolet);setColorTheml.Add(ColorGradientType.Rainbow);setColorTheml.Add(ColorGradientType.CyanGreen);setColorTheml.Add(ColorGradientType.CyanBlue);// setColorTheml.Add("青->藍漸變色", ColorGradientType.PinkBlue);setColorTheml.Add(ColorGradientType.PinkRed);setColorTheml.Add(ColorGradientType.BlueRed);setColorTheml.Add(ColorGradientType.GreenRed);setColorTheml.Add(ColorGradientType.GreenBlue);setColorTheml.Add(ColorGradientType.YellowBlue);setColorTheml.Add(ColorGradientType.YellowGreen);setColorTheml.Add(ColorGradientType.YellowRed);setColorTheml.Add(ColorGradientType.CyanBlack);setColorTheml.Add(ColorGradientType.PinkBlack);setColorTheml.Add(ColorGradientType.YellowBlack);setColorTheml.Add(ColorGradientType.BlueBlack);setColorTheml.Add(ColorGradientType.GreenBlack);setColorTheml.Add(ColorGradientType.RedBlack);setColorTheml.Add(ColorGradientType.CyanWhite);setColorTheml.Add(ColorGradientType.PinkWhite);setColorTheml.Add(ColorGradientType.YellowWhite);setColorTheml.Add(ColorGradientType.BlueWhite);setColorTheml.Add(ColorGradientType.GreenWhite);setColorTheml.Add(ColorGradientType.RedWhite);setColorTheml.Add(ColorGradientType.BlackWhite);#endregiondataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;dataGridView2.AllowUserToAddRows = false;setDZcombox();if (objThemeUnique == null){showDZinformation();}else{updateThemeUnique(objThemeUnique);}}public void updateThemeUnique(ThemeUnique objThemeUnique){comboBox1.Text = objThemeUnique.UniqueExpression; for (int i = 0; i < objThemeUnique.Count; i++){objThemeUniqueItem.Add(objThemeUnique[i]);Image im = getImage(objLayer.Type, objThemeUnique[i].Style);dataGridView2.Rows.Add(true, im, objThemeUnique[i].Caption); }}#region 單值專題圖public void setDZcombox(){DatasetVector objDv = objLayer as DatasetVector;FieldInfos objFled = objDv.FieldInfos;FieldInfo objFd = null;for (int i = 0; i < objFled.Count; i++){objFd = objFled[i];comboBox1.Items.Add(objFd.Name.Trim());}if (comboBox1.Items.Count > 0)comboBox1.SelectedIndex = 0;objFled = null;objDv = null;}// 設置單值專題圖ThemeUnique themeunique = null;DatasetVector datasetVector = null;Geometry objg = null;Resources resources = null;//單只專題圖子項集合List<ThemeUniqueItem> objThemeUniqueItem = new List<ThemeUniqueItem>();//刪除的單值專題圖集合List<ThemeUniqueItem> objDeleteThemeUniqueItem = new List<ThemeUniqueItem>();List<string> list = new List<string>();/// <summary>/// 單值綁定方法/// </summary>public void showDZinformation(){themeunique = new ThemeUnique();//清空數(shù)據(jù)objThemeUniqueItem.Clear();objDeleteThemeUniqueItem.Clear();list.Clear();//專題圖清空themeunique.Clear();//列表清空dataGridView2.Rows.Clear();// 當只有普通圖層時,添加專題圖層datasetVector = objLayer as DatasetVector;//設置字段表達式themeunique.UniqueExpression = comboBox1.Text.Trim();Recordset objRecor = datasetVector.GetRecordset(false, CursorType.Static);FieldInfos objFled = datasetVector.FieldInfos;objRecor.MoveFirst();for (int j = 0; j < objRecor.RecordCount; j++){//新建DataTable的行對象 if (objRecor.FieldCount == objFled.Count){object value = objRecor.GetFieldValue(comboBox1.SelectedIndex);if (value != null){if (!string.IsNullOrWhiteSpace(value.ToString().Trim())){objg = objRecor.GetGeometry();list.Add(value.ToString().Trim());}}}else{// MessageBox.Show("字段數(shù)有問題!", "提示");}objRecor.MoveNext();//移到下個列}//釋放對象objRecor.Dispose();//專題圖子項ThemeUniqueItem objItem = null;GeoStyle geostyle1 = null;Random objRan = new Random();// 根據(jù)指定的漸變顏色類型,返回一個 Colors 類的對象//運行結(jié)果是根據(jù)指定的漸變顏色返回的4個顏色構(gòu)成的顏色集合,顏色值為://(R=0,G=255,B=0),(R=0,G=255,B=85),(R=0,G=255,B=170),(R=0,G=255,B=255)Colors colors = Colors.MakeGradient(list.Count, ColorGradientType.BlueBlack, false);// 得到點線面的RootGroupList<string> isTrueAndFalse = new List<string>();for (int i = 0; i < list.Count; i++){string itemName = list[i];objItem = new ThemeUniqueItem();objItem.Caption = itemName;objItem.IsVisible = true;geostyle1 = GeoStyleSample(objLayer.Type, colors[isTrueAndFalse.Count]);// geostyle1;objItem.Style = geostyle1;objItem.Unique = itemName;if (!isTrueAndFalse.Contains(itemName)){objThemeUniqueItem.Add(objItem);Image im = getImage(objLayer.Type, geostyle1);dataGridView2.Rows.Add(true, im, itemName);isTrueAndFalse.Add(itemName);}}}/// <summary>/// 單元格單擊事件 此事件主要針對專題圖的顯示和隱藏進行操作/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void dataGridView2_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e){if (dataGridView2.Columns[e.ColumnIndex].Name.Equals("checkbox")){bool value = (bool)dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;if (value){dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = false;objThemeUniqueItem[e.RowIndex].IsVisible = false;}else{dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = true;objThemeUniqueItem[e.RowIndex].IsVisible = true;}}}/// <summary>/// 單元格雙擊事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void dataGridView2_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e){ if (dataGridView2.Columns[e.ColumnIndex].Name.Equals("imgvalue")){//樣式符號GeoStyle objGeoStyle = SymbolDialog.ShowDialog(m_workspace.Resources, objThemeUniqueItem[e.RowIndex].Style, GetSymbolType(objLayer.Type));if (objGeoStyle != null){//更新專題圖樣式objThemeUniqueItem[e.RowIndex].Style = objGeoStyle;//更換列表中的圖像if (objLayer.Type == DatasetType.Point){//獲取符號編號int num = objGeoStyle.MarkerSymbolID;//加載符號庫SymbolLibrary symbolMarkerLibrary = resources.MarkerLibrary;//擬定一個點對象GeoPoint point = new GeoPoint(5, 5);//獲取并賦值對應的點樣式point.Style = objGeoStyle;//從庫中查找對應的點符號編號Symbol symbol = symbolMarkerLibrary.FindSymbol(num);//objThemeUniqueItem[e.RowIndex].Style.SetSymbolMarker(symbol as SymbolMarker);dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = DrawSymbol(symbol, point, 20, 20);}else if (objLayer.Type == DatasetType.Line){//獲取符號編號int num = objGeoStyle.LineSymbolID;//加載符號庫SymbolLibrary symbolMarkerLibrary = resources.LineLibrary;//擬定一個線對象Point2Ds point2Ds = new Point2Ds();point2Ds.Add(new Point2D(0, 5));point2Ds.Add(new Point2D(15, 5));GeoLine line = new GeoLine(point2Ds);//獲取并賦值對應的點樣式line.Style = objGeoStyle;//從庫中查找對應的線符號編號Symbol symbol = symbolMarkerLibrary.FindSymbol(num);// objThemeUniqueItem[e.RowIndex].Style.SetSymbolLine(symbol as SymbolLine);dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = DrawSymbol(symbol, line, 20, 20);}else if (objLayer.Type == DatasetType.Region){//獲取符號編號int num = objGeoStyle.FillSymbolID;//加載符號庫SymbolLibrary symbolFillLibrary = resources.FillLibrary;//擬定一個面對象Point2Ds point2Ds = new Point2Ds();point2Ds.Add(new Point2D(0, 0));point2Ds.Add(new Point2D(0, 15));point2Ds.Add(new Point2D(15, 15));point2Ds.Add(new Point2D(15, 0));GeoRegion region = new GeoRegion(point2Ds);//獲取并賦值對應的面樣式region.Style = objGeoStyle;//從庫中查找對應的點符號編號Symbol symbol = symbolFillLibrary.FindSymbol(num);//objThemeUniqueItem[e.RowIndex].Style.SetSymbolFill(symbol as SymbolFill);dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = DrawSymbol(symbol, region, 20, 20);}}}}/// <summary>/// 根據(jù)數(shù)據(jù)集類型獲取符號庫的類型/// </summary>/// <param name="datasetType">數(shù)據(jù)集類型</param>/// <returns>返回符號庫類型</returns>private SymbolType GetSymbolType(DatasetType datasetType){SymbolType result = SymbolType.Marker;switch (datasetType){case DatasetType.Line:{result = SymbolType.Line;}break;case DatasetType.Point:{result = SymbolType.Marker;}break;case DatasetType.Region:{result = SymbolType.Fill;}break;default:break;}return result;}/// <summary>///獲取列表中顯示的圖片 設置默認值并在列表中顯示/// </summary>/// <param name="P"></param>/// <param name="geostyle1"></param>/// <returns></returns>public Image getImage(DatasetType P, GeoStyle geostyle1){Image im = null;if (P == DatasetType.Point){//符號庫SymbolLibrary symbolMarkerLibrary = resources.MarkerLibrary;SymbolGroup m_symbolMarkerRootGroup = symbolMarkerLibrary.RootGroup;GeoPoint point = new GeoPoint(5, 5);point.Style = geostyle1;Symbol symbol = null;if (geostyle1.MarkerSymbolID == null){symbol = m_symbolMarkerRootGroup[0];//symbolMarkerLibrary.FindSymbol(0);//}else {symbol = m_symbolMarkerRootGroup[geostyle1.MarkerSymbolID];//symbol = symbolMarkerLibrary.FindSymbol(geostyle1.MarkerSymbolID);//symbolMarkerLibrary.FindSymbol(0);//} im = DrawSymbol(symbol, point, 20, 20);}else if (P == DatasetType.Line){SymbolLibrary symbolLineLibrary = resources.LineLibrary;SymbolGroup m_symbolLineRootGroup = symbolLineLibrary.RootGroup;Point2Ds point2Ds = new Point2Ds();point2Ds.Add(new Point2D(0, 5));point2Ds.Add(new Point2D(15, 5));GeoLine line = new GeoLine(point2Ds);line.Style = geostyle1;Symbol symbol = null;if (geostyle1.LineSymbolID == null){symbol = m_symbolLineRootGroup[0];//symbolMarkerLibrary.FindSymbol(0);//}else{symbol = m_symbolLineRootGroup[geostyle1.LineSymbolID];//symbol = symbolLineLibrary.FindSymbol(geostyle1.LineSymbolID);//symbolMarkerLibrary.FindSymbol(0);//} im = DrawSymbol(symbol, line, 20, 20);}else if (P == DatasetType.Region){SymbolLibrary symbolFillLibrary = resources.FillLibrary;SymbolGroup m_symbolFillRootGroup = symbolFillLibrary.RootGroup;//構(gòu)造點對象,由點組成面對象Point2Ds point2Ds = new Point2Ds();point2Ds.Add(new Point2D(0, 0));point2Ds.Add(new Point2D(0, 15));point2Ds.Add(new Point2D(15, 15));point2Ds.Add(new Point2D(15, 0));GeoRegion region = new GeoRegion(point2Ds);region.Style = geostyle1;Symbol symbol = null;if (geostyle1.FillSymbolID == null){symbol = m_symbolFillRootGroup[0];//symbolMarkerLibrary.FindSymbol(0);//}else{symbol = m_symbolFillRootGroup[geostyle1.FillSymbolID];// symbol = symbolFillLibrary.FindSymbol(geostyle1.FillSymbolID);//symbolMarkerLibrary.FindSymbol(0);//}// Symbol symbol = m_symbolFillRootGroup[0];//symbolFillLibrary.FindSymbol(0);//im = DrawSymbol(symbol, region, 20, 20);}return im;}/// <summary>/// 設置符號樣式/// </summary>/// <param name="P"></param>/// <param name="c"></param>/// <returns></returns>public GeoStyle GeoStyleSample(DatasetType P, Color c){GeoStyle objGeoStyle = new GeoStyle();switch (P){case DatasetType.Point:// 實例化一個點幾何對象,并對其進行風格設置// GeoStyle geoStyle_P = new GeoStyle();objGeoStyle.LineColor = c;objGeoStyle.MarkerSize = new Size2D(5, 5);// geoStyle_P.MarkerSymbolID = 0; //系統(tǒng)圖標//objGeoStyle = geoStyle_P;break;case DatasetType.Line:// 實例化一個線幾何對象,并對其進行風格設置//GeoStyle geoStyle_L = new GeoStyle();objGeoStyle.LineColor = c;//geoStyle_L.LineSymbolID = 15;objGeoStyle.LineWidth = 1.0; // objGeoStyle = geoStyle_L;break;case DatasetType.Region:// 實例化一個面幾何對象,并對其進行漸變風格設置//GeoStyle geoStyle_R = new GeoStyle();objGeoStyle.FillBackColor = Color.White;;objGeoStyle.FillForeColor = c;objGeoStyle.FillBackOpaque = true;// geoStyle_R.FillOpaqueRate = 50;// geoStyle_R.FillSymbolID = 0;//geoStyle_R.FillGradientMode = FillGradientMode.Linear;//objGeoStyle = geoStyle_R;break;}return objGeoStyle;}#endregion#region 點、線、面 datagridview繪制/// <summary>/// 繪制符號轉(zhuǎn)換為圖片/// 我去。。。/// </summary>/// <param name="symbol"></param>public Image DrawSymbol(Symbol symbol, Geometry geometry, Int32 width, Int32 height){try{Bitmap bitmap = new Bitmap(width, height);if (symbol.Type == SymbolType.Marker){//geometry.Style.MarkerSymbolID = symbol.ID; Toolkit.Draw(geometry, m_workspace.Resources, Graphics.FromImage(bitmap));}else if (symbol.Type == SymbolType.Line){//此句必須加上,不然在點擊切換樣式時無效果// geometry.Style.LineSymbolID = symbol.ID; symbol.Draw(bitmap, geometry);// Toolkit.Draw(geometry, mainfrm.m_workspace.Resources, Graphics.FromImage(bitmap));}else if (symbol.Type == SymbolType.Fill){//geometry.Style.FillSymbolID = symbol.ID;symbol.Draw(bitmap, geometry);// Toolkit.Draw(geometry, mainfrm.m_workspace.Resources, Graphics.FromImage(bitmap));}Image objImage = bitmap;return objImage;}catch (Exception ex){// Trace.WriteLine(ex.Message);}return null;}#endregion//確定按鈕private void btnSure_Click(object sender, EventArgs e){//默認的方式 預備暫時不用// ThemeUnique themeunique = ThemeUnique.MakeDefault(datasetVector, comboBox1.Text.Trim(), setColorTheml[comboBoxEx1.SelectedIndex]);// 將制作好的專題圖添加到地圖中顯示if (datasetVector != null && objThemeUniqueItem.Count > 0){for (int i = 0; i < objThemeUniqueItem.Count; i++){themeunique.Add(objThemeUniqueItem[i]);}// Layer sd = mainfrm.m_LayersControl.Map.Layers.FindLayer(""); Layer layer = objMapControl.Map.Layers.Add(datasetVector, themeunique, true);// m_MapControl.Map.Refresh();themeunique.Dispose();this.Close();}else { objThemeUnique.Clear();// mainfrm.m_LayersControl.Map.Layers.Remove()for (int i = 0; i < objThemeUniqueItem.Count; i++){objThemeUnique.Add(objThemeUniqueItem[i]);}//objThemeUnique.FromXML(themeunique.ToXML()); objMapControl.Map.Refresh(); this.Close();}}/// <summary>/// 取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnCancle_Click(object sender, EventArgs e){this.Close();}private void btnAddValue_Click(object sender, EventArgs e){showDZinformation();}/// <summary>/// 添加子項/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnAddChild_Click(object sender, EventArgs e){ changeUniqueItem showChage = new changeUniqueItem(objDeleteThemeUniqueItem, objThemeUniqueItem,dataGridView2,this); showChage.ShowDialog();}/// <summary>/// 添加值/// </summary>/// <param name="num"></param>public void addToDataGridView(int num){if (objDeleteThemeUniqueItem.Count > 0){Image im = getImage(objLayer.Type, objDeleteThemeUniqueItem[num].Style);dataGridView2.Rows.Add(true, im, objDeleteThemeUniqueItem[num].Caption);}}/// <summary>/// 刪除子項/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnDeleteChild_Click(object sender, EventArgs e){int num = dataGridView2.CurrentRow.Index;if (num >= 0) {//移除專題圖 dataGridView2.Rows.RemoveAt(num);objDeleteThemeUniqueItem.Add(objThemeUniqueItem[num]);objThemeUniqueItem.RemoveAt(num); }}} } 主窗體代碼總結(jié)
以上是生活随笔為你收集整理的超图举例单值专题图色带样式控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch中的MSELoss函数
- 下一篇: ardupilot 加速度计六面校准