첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ CustomMapColorizer .cs

using System;
using System.Drawing;

using DevExpress.XtraMap;

namespace TestProject
{
    /// <summary>
    /// 커스텀 맵 색상화기
    /// </summary>
    public class CustomMapColorizer : MapColorizer
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 색상 배열
        /// </summary>
        private Color[] colorArray =
        {
            Color.Violet,
            Color.Blue,
            Color.LightBlue,
            Color.Green,
            Color.Yellow,
            Color.Orange,
            Color.Red
        };

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 요소 색상 표시하기 - ColorizeElement(colorizerElement)

        /// <summary>
        /// 요소 색상 표시하기
        /// </summary>
        /// <param name="colorizerElement">색상화기 요소 인터페이스</param>
        public override void ColorizeElement(IColorizerElement colorizerElement)
        {
            MapPolygon polygon = colorizerElement as MapPolygon;

            if(polygon != null)
            {
                double power = (double)polygon.Attributes["PowerValue"].Value;

                int linearizedPower = (int)Math.Truncate(power * colorArray.Length / 1000);

                colorizerElement.ColorizerColor = colorArray[linearizedPower];
            }
        }

        #endregion
    }
}

 

728x90

 

▶ MainForm.cs

using System;
using System.Windows.Forms;

using DevExpress.XtraEditors;
using DevExpress.XtraMap;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : XtraForm
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            Load += Form_Load;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

        /// <summary>
        /// 폼 로드시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Form_Load(object sender, EventArgs e)
        {
            #region 맵 컨트롤을 설정한다.

            MapControl mapControl = new MapControl();

            mapControl.Parent = this;
            mapControl.Dock   = DockStyle.Fill;

            #endregion
            #region 맵 항목 저장소를 설정한다.

            MapItemStorage mapItemStorage = new MapItemStorage();

            MapItemCollection mapItemCollection = mapItemStorage.Items;

            for(int i = 0; i < 50; i++)
            {
                MapPolygon polygon = CreatePolygon
                (
                    i * 20,
                    new GeoPoint[]
                    {
                        new GeoPoint(0 , 5 * i      ), 
                        new GeoPoint(0 , 5 * (i + 1)),
                        new GeoPoint(40, 5 * (i + 1)),
                        new GeoPoint(40, 5 * i      ), 
                        new GeoPoint(0 , 5 * i      )
                    }
                );

                mapItemCollection.Add(polygon);
            }

            #endregion
            #region 벡터 항목 레이어를 설정한다.

            VectorItemsLayer vectorItemsLayer = new VectorItemsLayer();

            vectorItemsLayer.Data           = mapItemStorage;
            vectorItemsLayer.Colorizer      = new CustomMapColorizer();
            vectorItemsLayer.ToolTipPattern = "{PowerValue}";

            mapControl.Layers.Add(vectorItemsLayer);

            #endregion
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Function

        #region 다각형 생성하기 - CreatePolygon(power, pointArray)

        /// <summary>
        /// 다각형 생성하기
        /// </summary>
        /// <param name="power">파워</param>
        /// <param name="pointArray">포인트 배열</param>
        /// <returns>맵 다각형</returns>
        private MapPolygon CreatePolygon(double power, GeoPoint[] pointArray)
        {
            MapPolygon polygon = new MapPolygon();

            foreach(GeoPoint point in pointArray)
            {
                polygon.Points.Add(point);
            }

            polygon.Attributes.Add
            (
                new MapItemAttribute()
                {
                    Name  = "PowerValue",
                    Type  = typeof(double),
                    Value = power
                }
            );

            return polygon;
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요