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

TestProject.zip
다운로드

▶ Address.cs

using DevExpress.XtraMap;

namespace TestProject
{
    /// <summary>
    /// 주소
    /// </summary>
    public class Address : AddressBase
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - Address(address)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="address">주소</param>
        public Address(string address)
        {
            FormattedAddress = address;
        }

        #endregion
    }
}

 

728x90

 

▶ GeocodeData.cs

using System;

using DevExpress.XtraMap;

namespace TestProject
{
    /// <summary>
    /// 지오코드 데이터
    /// </summary>
    public class GeocodeData : IInformationData
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Event
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 데이터 응답시 이벤트 - OnDataResponse

        /// <summary>
        /// 데이터 응답시 이벤트
        /// </summary>
        public event EventHandler<RequestCompletedEventArgs> OnDataResponse;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 위치 정보
        /// </summary>
        private LocationInformation locationInformation = new LocationInformation();

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 위치 정보 - LocationInformation

        /// <summary>
        /// 위치 정보
        /// </summary>
        public LocationInformation LocationInformation
        {
            get
            {
                return this.locationInformation;
            }
            set
            {
                this.locationInformation = value;
            }
        }

        #endregion

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

        #region 주소 계산하기 - CalculateAddress(geoPoint)

        /// <summary>
        /// 주소 계산하기
        /// </summary>
        /// <param name="geoPoint">지리 포인트</param>
        public void CalculateAddress(GeoPoint geoPoint)
        {
            string addressString = "Address from your service here " + Environment.NewLine + "Coordinates: " + geoPoint.ToString();

            LocationInformation locationInformation = new LocationInformation();

            locationInformation.Address  = new Address(addressString);
            locationInformation.Location = new GeoPoint(geoPoint.Latitude, geoPoint.Longitude);

            LocationInformation = locationInformation;

            FireOnDataResponseEvent();
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region 데이터 수신시 이벤트 발생시키기 - FireOnDataResponseEvent()

        /// <summary>
        /// 데이터 수신시 이벤트 발생시키기
        /// </summary>
        protected void FireOnDataResponseEvent()
        {
            OnDataResponse?.Invoke(this, CreateEventArgs());
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 이벤트 인자 생성하기 - CreateEventArgs()

        /// <summary>
        /// 이벤트 인자 생성하기
        /// </summary>
        /// <returns>요청 완료시 이벤트 인자</returns>
        private RequestCompletedEventArgs CreateEventArgs()
        {
            MapItem item = new MapCallout()
            {
                Location = this.locationInformation.Location,
                Text     = this.locationInformation.Address.FormattedAddress
            };

            return new RequestCompletedEventArgs
            (
                new MapItem[] { item },
                null,
                false,
                null
            );
        }

        #endregion
    }
}

 

300x250

 

▶ GeocodeDataProvider.cs

using DevExpress.XtraMap;

namespace TestProject
{
    /// <summary>
    /// 지오코드 데이터 공급자
    /// </summary>
    public class GeocodeDataProvider : InformationDataProviderBase, IMouseClickRequestSender
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region 데이터 - Data

        /// <summary>
        /// 데이터
        /// </summary>
        protected new GeocodeData Data
        {
            get
            {
                return (GeocodeData)base.Data;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - GeocodeDataProvider()

        /// <summary>
        /// 생성자
        /// </summary>
        public GeocodeDataProvider()
        {
            ProcessMouseEvents = true;
        }

        #endregion

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

        #region 포인트 요청하기 - RequestByPoint(geoPoint, screenPoint)

        /// <summary>
        /// 포인트 요청하기
        /// </summary>
        /// <param name="geoPoint">지리 포인트</param>
        /// <param name="screenPoint">화면 포인트</param>
        public void RequestByPoint(GeoPoint geoPoint, MapPoint screenPoint)
        {
            Data.CalculateAddress(geoPoint);
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region 데이터 생성하기 - CreateData()

        /// <summary>
        /// 데이터 생성하기
        /// </summary>
        /// <returns>정보 데이터 인터페이스</returns>
        protected override IInformationData CreateData()
        {
            return new GeocodeData();
        }

        #endregion
    }
}

 

▶ MainForm.cs

using DevExpress.XtraEditors;
using DevExpress.XtraMap;

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

        #region 생성자 - MainForm()

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

            this.informationLayer.DataProvider = new GeocodeDataProvider();

            this.openStreetMapDataProvider.WebRequest += openStreetMapDataProvider_WebRequest;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region OPEN STREET MAP 데이터 공급자 웹 요청시 처리하기 - openStreetMapDataProvider_WebRequest(sender, e)

        /// <summary>
        /// OPEN STREET MAP 데이터 공급자 웹 요청시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void openStreetMapDataProvider_WebRequest(object sender, MapWebRequestEventArgs e)
        {
            e.UserAgent = "XtraMap Getting Started - Connect to OpenStreetMap";
        }

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