超图举例单值专题图色带样式控制
此文是用.NET Iobject 7c 下利用vs2010開(kāi)發(fā)的winform版 單值專(zhuān)題圖的創(chuàng)建及色帶的修改。在此記下來(lái)以便后期參考(可能很快就會(huì)被淹沒(méi),超圖的更新?lián)Q代很快)
初期由于不知道樣式的承載控件應(yīng)該選擇那個(gè),測(cè)試過(guò)listview、listbox,但是效果都不滿(mǎn)意,偶然間查到datagridview可以更好的充當(dāng)這個(gè)角色,展示效果做好肯定就要配套的修改功能了,這個(gè)修改我咨詢(xún)過(guò)客服,客服說(shuō)在修改方面,只是給了一個(gè)樣式修改的接口,我測(cè)試過(guò)對(duì)修改對(duì)象進(jìn)行清空,賦值都不行,對(duì)象和地圖展示的關(guān)聯(lián)較強(qiáng);
在測(cè)試中發(fā)現(xiàn),若是對(duì)專(zhuān)題圖對(duì)象刪除再次添加,所添加的名稱(chēng)和刪除圖層的名稱(chēng)保持不變,最后只能曲線的進(jìn)行對(duì)圖層的刪除和重新添加,
----》 第一個(gè)窗體為主窗體展示,最后一個(gè)窗體為增刪值做準(zhǔn)備
說(shuō)明:1 下拉框根據(jù)單值的條件篩選填入字段名稱(chēng)
2 承載數(shù)據(jù)的控件時(shí)datagridview,需要把該控件的列指定特定的值 如圖 2?
?? 3? 按鈕--添加所有值就是重新根據(jù)條件進(jìn)行讀取一次數(shù)據(jù)并展示出來(lái)
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è)置單值專(zhuān)題圖數(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("青->藍(lán)漸變色", 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 單值專(zhuān)題圖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;}// 設(shè)置單值專(zhuān)題圖ThemeUnique themeunique = null;DatasetVector datasetVector = null;Geometry objg = null;Resources resources = null;//單只專(zhuān)題圖子項(xiàng)集合List<ThemeUniqueItem> objThemeUniqueItem = new List<ThemeUniqueItem>();//刪除的單值專(zhuān)題圖集合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();//專(zhuān)題圖清空themeunique.Clear();//列表清空dataGridView2.Rows.Clear();// 當(dāng)只有普通圖層時(shí),添加專(zhuān)題圖層datasetVector = objLayer as DatasetVector;//設(shè)置字段表達(dá)式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的行對(duì)象 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ù)有問(wèn)題!", "提示");}objRecor.MoveNext();//移到下個(gè)列}//釋放對(duì)象objRecor.Dispose();//專(zhuān)題圖子項(xiàng)ThemeUniqueItem objItem = null;GeoStyle geostyle1 = null;Random objRan = new Random();// 根據(jù)指定的漸變顏色類(lèi)型,返回一個(gè) Colors 類(lèi)的對(duì)象//運(yùn)行結(jié)果是根據(jù)指定的漸變顏色返回的4個(gè)顏色構(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);// 得到點(diǎn)線面的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>/// 單元格單擊事件 此事件主要針對(duì)專(zhuān)題圖的顯示和隱藏進(jìn)行操作/// </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")){//樣式符號(hào)GeoStyle objGeoStyle = SymbolDialog.ShowDialog(m_workspace.Resources, objThemeUniqueItem[e.RowIndex].Style, GetSymbolType(objLayer.Type));if (objGeoStyle != null){//更新專(zhuān)題圖樣式objThemeUniqueItem[e.RowIndex].Style = objGeoStyle;//更換列表中的圖像if (objLayer.Type == DatasetType.Point){//獲取符號(hào)編號(hào)int num = objGeoStyle.MarkerSymbolID;//加載符號(hào)庫(kù)SymbolLibrary symbolMarkerLibrary = resources.MarkerLibrary;//擬定一個(gè)點(diǎn)對(duì)象GeoPoint point = new GeoPoint(5, 5);//獲取并賦值對(duì)應(yīng)的點(diǎn)樣式point.Style = objGeoStyle;//從庫(kù)中查找對(duì)應(yīng)的點(diǎn)符號(hào)編號(hào)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){//獲取符號(hào)編號(hào)int num = objGeoStyle.LineSymbolID;//加載符號(hào)庫(kù)SymbolLibrary symbolMarkerLibrary = resources.LineLibrary;//擬定一個(gè)線對(duì)象Point2Ds point2Ds = new Point2Ds();point2Ds.Add(new Point2D(0, 5));point2Ds.Add(new Point2D(15, 5));GeoLine line = new GeoLine(point2Ds);//獲取并賦值對(duì)應(yīng)的點(diǎn)樣式line.Style = objGeoStyle;//從庫(kù)中查找對(duì)應(yīng)的線符號(hào)編號(hào)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){//獲取符號(hào)編號(hào)int num = objGeoStyle.FillSymbolID;//加載符號(hào)庫(kù)SymbolLibrary symbolFillLibrary = resources.FillLibrary;//擬定一個(gè)面對(duì)象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);//獲取并賦值對(duì)應(yīng)的面樣式region.Style = objGeoStyle;//從庫(kù)中查找對(duì)應(yīng)的點(diǎn)符號(hào)編號(hào)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ù)集類(lèi)型獲取符號(hào)庫(kù)的類(lèi)型/// </summary>/// <param name="datasetType">數(shù)據(jù)集類(lèi)型</param>/// <returns>返回符號(hào)庫(kù)類(lèi)型</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>///獲取列表中顯示的圖片 設(shè)置默認(rèn)值并在列表中顯示/// </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){//符號(hào)庫(kù)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)造點(diǎn)對(duì)象,由點(diǎn)組成面對(duì)象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>/// 設(shè)置符號(hào)樣式/// </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:// 實(shí)例化一個(gè)點(diǎn)幾何對(duì)象,并對(duì)其進(jìn)行風(fēng)格設(shè)置// GeoStyle geoStyle_P = new GeoStyle();objGeoStyle.LineColor = c;objGeoStyle.MarkerSize = new Size2D(5, 5);// geoStyle_P.MarkerSymbolID = 0; //系統(tǒng)圖標(biāo)//objGeoStyle = geoStyle_P;break;case DatasetType.Line:// 實(shí)例化一個(gè)線幾何對(duì)象,并對(duì)其進(jìn)行風(fēng)格設(shè)置//GeoStyle geoStyle_L = new GeoStyle();objGeoStyle.LineColor = c;//geoStyle_L.LineSymbolID = 15;objGeoStyle.LineWidth = 1.0; // objGeoStyle = geoStyle_L;break;case DatasetType.Region:// 實(shí)例化一個(gè)面幾何對(duì)象,并對(duì)其進(jìn)行漸變風(fēng)格設(shè)置//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 點(diǎn)、線、面 datagridview繪制/// <summary>/// 繪制符號(hào)轉(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){//此句必須加上,不然在點(diǎn)擊切換樣式時(shí)無(wú)效果// 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){//默認(rèn)的方式 預(yù)備暫時(shí)不用// ThemeUnique themeunique = ThemeUnique.MakeDefault(datasetVector, comboBox1.Text.Trim(), setColorTheml[comboBoxEx1.SelectedIndex]);// 將制作好的專(zhuān)題圖添加到地圖中顯示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>/// 添加子項(xiàng)/// </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>/// 刪除子項(xiàng)/// </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) {//移除專(zhuān)題圖 dataGridView2.Rows.RemoveAt(num);objDeleteThemeUniqueItem.Add(objThemeUniqueItem[num]);objThemeUniqueItem.RemoveAt(num); }}} } 主窗體代碼總結(jié)
以上是生活随笔為你收集整理的超图举例单值专题图色带样式控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pytorch中的MSELoss函数
- 下一篇: ardupilot 加速度计六面校准