private void CopyRenderer(MyLayer from, MyLayer to) { int count; switch (from.rendertype) { case RendererType.SimpleRenderer: to.Renderer = new SimpleRenderer(to.DataType); to.rendertype = RendererType.SimpleRenderer; break; case RendererType.UniqueValueRenderer: count = from.Renderer.SymbolCount; List <string> stringvalues = new List <string>(); for (int i = 0; i < count; i++) { stringvalues.Add(((UniqueValueRenderer)from.Renderer).FindValue(i)); } to.Renderer = new UniqueValueRenderer(to.DataType, ((UniqueValueRenderer)from.Renderer).Field, stringvalues); to.rendertype = RendererType.UniqueValueRenderer; break; case RendererType.ClassBreakRenderer: to.Renderer = new ClassBreakRenderer(to.DataType, ((ClassBreakRenderer)from.Renderer).Field, ((ClassBreakRenderer)from.Renderer).Value); to.rendertype = RendererType.ClassBreakRenderer; break; } to.Renderer.CopyRenderer(from.Renderer); }
private void HasTextInitial(MyLayer layer) { CB_fields.Enabled = true; SQL.Enabled = true; TextStyleMessage.Enabled = true; if (layer.Textrender != null) { CB_LabelFields.SelectedItem = layer.Textrender.Field; if (layer.Textrender.HasSQL == true) { HasSQL.Checked = true; TB_SQL.Text = layer.Textrender.SQL; newfont = layer.Textrender.TextSymol.TextStyle.TextFont; newcolor = layer.Textrender.TextSymol.TextStyle.TextColor; } else { HasSQL.Checked = false; } } else { CB_LabelFields.SelectedItem = CB_LabelFields.Items[0]; } CB_FontStyle.SelectedItem = "宋体"; CB_FontSize.SelectedItem = 12; btn_SelectColor.BackColor = Color.Black; }
/// <summary> /// //唯一构造函数,必须传进来一个属性对象 /// </summary> internal PropertyTableForm(MyLayer layer, int layerIndex) { InitializeComponent(); selectionIDs = layer.selectionIDs; this.layerIndex = layerIndex; this.layer = layer; property = layer.GetFeaturePorperties(); }
//显示字段列表 private void ShowFields(MyLayer layer) { CB_fields.Items.Clear(); //清除刷新 CB_fields.BeginUpdate(); //让控件一次刷新而不逐条刷新 //添加字段 int sFieldCount = layer.SpaceData.Property.FieldNum; foreach (string s in layer.SpaceData.Property.Fields.Keys) { CB_fields.Items.Add(s); } CB_fields.EndUpdate(); CB_fields.Refresh(); }
//显示字段列表 private void InitializeLabel(MyLayer layer) { CB_LabelFields.Items.Clear(); //添加字段 int sFieldCount = layer.SpaceData.Property.FieldNum; foreach (string s in layer.SpaceData.Property.Fields.Keys) { CB_LabelFields.Items.Add(s); } for (int i = 10; i < 64; i++) { CB_FontSize.Items.Add(i); } InstalledFontCollection MyFont = new InstalledFontCollection(); FontFamily[] MyFontFamilies = MyFont.Families; int Count = MyFontFamilies.Length; for (int i = 0; i < Count; i++) { CB_FontStyle.Items.Add(MyFontFamilies[i].Name); } if (layer.HasText == true) { HasLabel.Checked = true; //HasTextInitial(layer); } else { HasLabel.Checked = false; } newfont = new Font("宋体", 12); newcolor = Color.Black; }
/// <summary> /// 构造函数 /// </summary> /// <param name="layer">图层</param> internal LayerPropertiesForm(MyLayer layer) { inputlayer = layer; InitializeComponent(); textBoxLayerName.Text = layer.LayerName; textBoxDescription.Text = layer.Description; MyRectangle bound = layer.SpaceData.Bound; textBoxTop.Text = bound.MaxY.ToString(); textBoxBottom.Text = bound.MinY.ToString(); textBoxRight.Text = bound.MaxX.ToString(); textBoxLeft.Text = bound.MinX.ToString(); if (layer.DataType != MySpaceDataType.MyGrid) { listBoxDataSource.Items[0] = "Data Type: Feature Class"; } else { listBoxDataSource.Items[0] = "Data Type: Raster Data"; } listBoxDataSource.Items[1] = "File Path: " + layer.FilePath; listBoxDataSource.Items[2] = "Geometry Type: " + layer.DataType; listBoxDataSource.Items[3] = "Geographic Coordinate System: " + "WGS_1984"; if (layer.DataType != MySpaceDataType.MyGrid) { slayer = new MyLayer(layer.FilePath); InitializeLabel(layer); CopyRenderer(layer, slayer); ShowSymbols(slayer); } else { tabControl1.TabPages.Remove(tabPageLabels); tabControl1.TabPages.Remove(tabPageSymbology); } }
/// <summary> /// 打开属性表 /// </summary> private void OpTBToolStripMenuItem_Click(object sender, EventArgs e) { if (PanelShow.Controls.Count > 1) { RecoverPanelShow(PanelShow.Controls[PanelShow.Controls.Count - 1].Width); } treeViewLayers.SelectedNode.ContextMenuStrip = null; int layerIndex = treeViewLayers.SelectedNode.Index; MyLayer layer = myMap.Layers[layerIndex]; if (layer.DataType != MySpaceDataType.MyGrid) { propertyPanel = new PropertyTableForm(layer, layerIndex); propertyPanel.TopLevel = false; PanelShow.Controls.Add(propertyPanel); propertyPanel.Height = PanelShow.Height; propertyPanel.Location = new Point(PanelShow.Width - propertyPanel.Width, 0); propertyPanel.ClosingFormCompleted += new PropertyTableForm.ClosingFormDelegate(RecoverPanelShow); propertyPanel.SelectFeatureChanged += new PropertyTableForm.SelectFeatureChangedDelegate(changeSelectionFeatures); picBoxMap.Width = PanelShow.Width - propertyPanel.Width; propertyPanel.Show(); UpdateMapImg(); } }
//显示符号 private void ShowSymbols(MyLayer layer) { switch (layer.rendertype) { case MyRenderer.RendererType.SimpleRenderer: //放置位图 radioButton1.Checked = true; MyRenderer.SimpleRenderer mySrenderer = (MyRenderer.SimpleRenderer)layer.Renderer; Bitmap sBitmap = mySrenderer.SymbolStyle.GetBitmap(); dataGridView1.Rows.Clear(); dataGridView1[0, 0].Value = sBitmap; dataGridView1[1, 0].Value = layer.LayerName; break; case MyRenderer.RendererType.UniqueValueRenderer: radioButton2.Checked = true; MyRenderer.UniqueValueRenderer myUrenderer = (MyRenderer.UniqueValueRenderer)layer.Renderer; int uValueCount = myUrenderer.SymbolCount; dataGridView1.Rows.Clear(); dataGridView1.RowCount = uValueCount; for (short i = 0; i < uValueCount; i++) { //放置位图 Bitmap uBitmap = myUrenderer.FindSymbolByIndex(i).GetBitmap(); dataGridView1[0, i].Value = uBitmap; //显示值 dataGridView1[1, i].Value = myUrenderer.FindValue(i); } break; case MyRenderer.RendererType.ClassBreakRenderer: radioButton3.Checked = true; MyRenderer.ClassBreakRenderer myCrenderer = (MyRenderer.ClassBreakRenderer)layer.Renderer; int cValueCount = myCrenderer.SymbolCount; dataGridView1.Rows.Clear(); dataGridView1.RowCount = cValueCount + 1; //dataGridView1[0, 0].Value =myCrenderer.ShowLinearGradient() ; CB_color.Image = myCrenderer.ShowLinearGradient(); for (short i = 0; i < cValueCount; i++) { //放置位图 Bitmap cBitmap = myCrenderer.FindSymbolByIndex(i).GetBitmap(); dataGridView1[0, i].Value = cBitmap; //显示值 if (i == 0) { dataGridView1[1, i].Value = myCrenderer.MinValue.ToString() + " - " + myCrenderer.Breaks[i].ToString(); } else if (i != cValueCount - 1) { dataGridView1[1, i].Value = myCrenderer.Breaks[i - 1].ToString() + " - " + myCrenderer.Breaks[i].ToString(); } else { dataGridView1[1, i].Value = myCrenderer.Breaks[i - 1].ToString() + " - " + myCrenderer.MaxValue.ToString(); } } break; } if (CB_fields.Items.Count == 0) { ShowFields(slayer); } CB_fields.SelectedItem = slayer.Renderer.Field; }
public void Open() { FileStream fs = new FileStream(_filepath, FileMode.Open); StreamReader sr = new StreamReader(fs); string line = sr.ReadLine(); string[] words = line.Split(' '); _Geocoordinate = Map.MyCoordinates.WGS1984; //由于不存在null选项 _Procoordinate = Map.MyCoordinates.WGS1984; //由于不存在null选项 //记录地理坐标系 switch (words[1]) { case "WGS1984": _Geocoordinate = Map.MyCoordinates.WGS1984; break; } //记录投影坐标系 switch (words[2]) { case "WGS1984": _Geocoordinate = Map.MyCoordinates.WGS1984; break; } //生成地图 _map = new Map.MyMap(words[0], _Geocoordinate, Convert.ToDouble(words[3])); _ratio = Convert.ToDouble(words[3]); _scaleindex = Convert.ToInt32(words[4]); //显示中心点位 _centerpos = new PointF((float)Convert.ToDouble(words[5]), (float)Convert.ToDouble(words[6])); //图层数量 int layercount = Convert.ToInt32(words[7]); for (int i = 0; i < layercount; i++) { string layerpath = sr.ReadLine(); Map.MyLayer newlayer = null; if (Path.GetExtension(layerpath) == ".shp") { //TODO先只可读SHP Shapefile newshp = new Shapefile(layerpath); newlayer = new MyLayer(newshp); } else { CosmosGisVector newcgv = new CosmosGisVector(layerpath); newlayer = new MyLayer(newcgv); } newlayer.FilePath = layerpath; //设置是否可见 string visible = sr.ReadLine(); if (visible == "True") { newlayer.Visible = true; } else { newlayer.Visible = false; } //获取渲染方式 string layerline = sr.ReadLine(); RendererType newrendertyppe = new GetType().RendererType(layerline.Split(' ')[0]); newlayer.rendertype = newrendertyppe; switch (newrendertyppe) { //唯一值渲染 case RendererType.UniqueValueRenderer: string field_uvr = layerline.Split(' ')[1]; //TODO 获得属性唯一值 DataTable dt_uvr = newlayer.SpaceData.Property.SqlQuery("Select Distinct " + field_uvr + " From " + newlayer.LayerName); List <string> values_uvr = new List <string>(); for (int j = 0; j < dt_uvr.Rows.Count; j++) { values_uvr.Add(dt_uvr.Rows[j][field_uvr].ToString()); } //List<string> values = new List<string>() { "1", "2", "3", "3" ,"3","3","7"}; newlayer.Renderer = new UniqueValueRenderer(newlayer.DataType, field_uvr, values_uvr); break; //分级渲染 case RendererType.ClassBreakRenderer: string field_cbr = layerline.Split(' ')[1]; DataTable dt_cbr = newlayer.SpaceData.Property.SqlQuery("Select Distinct " + field_cbr + " From " + newlayer.LayerName); List <double> values_cbr = new List <double>(); for (int j = 0; j < dt_cbr.Rows.Count; j++) { values_cbr.Add(Convert.ToDouble(dt_cbr.Rows[j][field_cbr])); } //List<double> breaks = new List<double>() { 1, 2, 3 }; newlayer.Renderer = new ClassBreakRenderer(newlayer.DataType, field_cbr, values_cbr); break; //简单渲染 default: newlayer.Renderer = new SimpleRenderer(newlayer.DataType); break; } //判断是否有注记信息 string hastext = sr.ReadLine(); if (hastext == "True") { newlayer.HasText = true; newlayer.Textrender = new TextRenderer(sr.ReadLine()); } else { newlayer.HasText = false; } _map.AddLayer(newlayer); } sr.Close(); fs.Close(); }