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;
 }
Esempio n. 3
0
 /// <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);
            }
        }
Esempio n. 7
0
        /// <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;
        }
Esempio n. 9
0
        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();
        }