VS2010 ARCGIS ENGINE10.2 -------------点状要素符号化

本文介绍了一个使用ArcGIS进行地图符号化的应用程序案例。该程序通过不同的符号化方式,如简单标记、箭头标记、字符标记、图片标记及多层标记等,来改变地图上点要素的显示样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
//using TextSymbols;
using ESRI.ArcGIS.Controls;
//using 符号化.Annotation;
//using 符号化.Class;
//using 符号化;
using ESRI.ArcGIS.Animation;
using ESRI.ArcGIS.esriSystem;
//using 符号选择器;
using stdole;
using ESRI.ArcGIS.SystemUI;
using _5_2地图符号化.Class;


namespace _5_2地图符号化
{
    public partial class Form1 : Form
    {
        private OperateMap m_OperateMap = null;
        public string filepath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
        public Form1()
        {
            InitializeComponent();
            m_OperateMap = new OperateMap();


        }


        private void 文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {


        }


        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {


            ICommand Cmd = new ControlsOpenDocCommandClass();
            Cmd.OnCreate(mainMapControl1.Object);
            Cmd.OnClick();
        }


        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveMap(mainMapControl1.DocumentFilename, mainMapControl1.Map);
        }


        private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ICommand Cmd = new ControlsSaveAsDocCommandClass();
            Cmd.OnCreate(mainMapControl1.Object);
            Cmd.OnClick();
        }


        public void SaveMap(string m_FilePath, IMap m_SaveMap)
        {
            try
            {
                IMapDocument pMapDoc = new MapDocumentClass();
                IMxdContents pMxdC = m_SaveMap as IMxdContents;
                pMapDoc.New(m_FilePath);
                pMapDoc.ReplaceContents(pMxdC);
                if (pMapDoc.get_IsReadOnly(pMapDoc.DocumentFilename) == true)
                {
                    MessageBox.Show("本地图文档是只读的,不能保存!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                pMapDoc.Save(pMapDoc.UsesRelativePaths, true);
            }
            catch (Exception ex)
            {


            }
        }


        private void SimpleMaker_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = mainMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol();
                pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSSquare;//设置点符号样式为方形
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(225, 100, 100);
                pMarkerSymbol.Color = pRgbColor;//设置点符号颜色
                ISymbol pSymbol = (ISymbol)pMarkerSymbol;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pSymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                mainMapControl1.Refresh();
                mainTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


        private void ArrowMarker_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = mainMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                IArrowMarkerSymbol pArrowMarkerSymbol = new ArrowMarkerSymbolClass();
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(255, 100, 0);
                pArrowMarkerSymbol.Angle = 90;
                pArrowMarkerSymbol.Color = pRgbColor;
                pArrowMarkerSymbol.Length = 20;//设置简单顶点到底边的距离
                pArrowMarkerSymbol.Width = 10;//设置箭头底边宽度
                pArrowMarkerSymbol.XOffset = 0;
                pArrowMarkerSymbol.YOffset = 0;
                pArrowMarkerSymbol.Style = esriArrowMarkerStyle.esriAMSPlain;//设置点符号样式
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pArrowMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                mainMapControl1.Refresh();
                mainTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


        private void CharacterMarker_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = mainMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                ICharacterMarkerSymbol pCharacterMarkerSymbol = new CharacterMarkerSymbol();
                stdole.IFontDisp pFontDisp = (stdole.IFontDisp)(new stdole.StdFontClass());
                IRgbColor pRgbColor = new RgbColor();
                pRgbColor = GetRgbColor(255, 0, 0);
                pFontDisp.Name = "arial";//设置字体样式          
                pFontDisp.Italic = true;//设置是否采用斜体字符


                pCharacterMarkerSymbol.Angle = 0;
                pCharacterMarkerSymbol.CharacterIndex = 65;
                pCharacterMarkerSymbol.Color = pRgbColor;
                pCharacterMarkerSymbol.Font = pFontDisp;
                pCharacterMarkerSymbol.Size = 10;
                pCharacterMarkerSymbol.XOffset = 3;
                pCharacterMarkerSymbol.YOffset = 3;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pCharacterMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                mainMapControl1.Refresh();
                mainTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


        private void PictureMarker_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = mainMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号           
                IPictureMarkerSymbol pPictureMarkerSymbol = new PictureMarkerSymbolClass();
                string fileName = m_OperateMap.getPath(filepath) + "\\data\\Symbol\\city.bmp";
                pPictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);//图片类型和图片来源               
                pPictureMarkerSymbol.Angle = 0;
                pPictureMarkerSymbol.Size = 10;
                pPictureMarkerSymbol.XOffset = 0;
                pPictureMarkerSymbol.YOffset = 0;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pPictureMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                mainMapControl1.Refresh();
                mainTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        public IRgbColor GetRgbColor(int intR, int intG, int intB)
        {
            IRgbColor pRgbColor = null;
            if (intR < 0 || intR > 255 || intG < 0 || intG > 255 || intB < 0 || intB > 255)
            {
                return pRgbColor;
            }
            pRgbColor = new RgbColorClass();
            pRgbColor.Red = intR;
            pRgbColor.Green = intG;
            pRgbColor.Blue = intB;
            return pRgbColor;
        }
        private void MultiLayerMarker_Click(object sender, EventArgs e)
        {
            try
            {
                //获取目标图层
                ILayer pLayer = new FeatureLayerClass();
                pLayer = mainMapControl1.get_Layer(0);
                IGeoFeatureLayer pGeoFeatLyr = pLayer as IGeoFeatureLayer;
                //设置点符号
                IMultiLayerMarkerSymbol pMultiLayerMarkerSymbol = new MultiLayerMarkerSymbolClass();
                IPictureMarkerSymbol pPictureMarkerSymbol = new PictureMarkerSymbolClass();
                ICharacterMarkerSymbol pCharacterMarkerSymbol = new CharacterMarkerSymbol();
                stdole.IFontDisp fontDisp = (stdole.IFontDisp)(new stdole.StdFontClass());
                IRgbColor pGgbColor = new RgbColor();
                pGgbColor = GetRgbColor(0, 0, 0);
                fontDisp.Name = "arial";
                fontDisp.Size = 12;
                fontDisp.Italic = true;
                //创建字符符号
                pCharacterMarkerSymbol.Angle = 0;
                pCharacterMarkerSymbol.CharacterIndex = 97;//字母a
                pCharacterMarkerSymbol.Color = pGgbColor;
                pCharacterMarkerSymbol.Font = fontDisp;
                pCharacterMarkerSymbol.Size = 24;
                //创建图片符号           
                string fileName = m_OperateMap.getPath(filepath) + "\\data\\Symbol\\city.bmp"; ;
                pPictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, fileName);
                pPictureMarkerSymbol.Angle = 0;
                pPictureMarkerSymbol.BitmapTransparencyColor = pGgbColor;
                pPictureMarkerSymbol.Size = 10;
                //添加图片、字符符号到组合符号中
                pMultiLayerMarkerSymbol.AddLayer(pCharacterMarkerSymbol);
                pMultiLayerMarkerSymbol.AddLayer(pPictureMarkerSymbol);
                pMultiLayerMarkerSymbol.Angle = 0;
                pMultiLayerMarkerSymbol.Size = 20;
                pMultiLayerMarkerSymbol.XOffset = 5;
                pMultiLayerMarkerSymbol.YOffset = 5;
                //更改符号样式
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();
                pSimpleRenderer.Symbol = pMultiLayerMarkerSymbol as ISymbol;
                pGeoFeatLyr.Renderer = pSimpleRenderer as IFeatureRenderer;
                mainMapControl1.Refresh();
                mainTOCControl1.Update();
            }
            catch
            {
                MessageBox.Show("请输入有效图层", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值