첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ BingGeocodeDataProvider 클래스 : 빙 지오코드(Bing Geocode) 서비스를 사용해 위도/경도에 대한 정보 구하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using System;

using System.Text;

using System.Windows.Forms;

 

using DevExpress.XtraEditors;

using DevExpress.XtraMap;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : XtraForm

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

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

 

        #region Field

 

        /// <summary>

        /// 빙 맵 키

        /// </summary>

        private string bingKey = "INPUT YOUR BING KEY";

 

        /// <summary>

        /// 빙 지오코드 데이터 제공자

        /// </summary>

        private BingGeocodeDataProvider bingGeocodeDataProvider;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            Load                  += Form_Load;

            this.sendButton.Click += sendButton_Click;

        }

 

        #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)

        {

            this.bindMapDataProvider.BingKey = this.bingKey;

 

            this.bingGeocodeDataProvider = new BingGeocodeDataProvider();

            

            this.bingGeocodeDataProvider.BingKey               = this.bingKey;

            this.bingGeocodeDataProvider.MaxVisibleResultCount = 1;

 

            this.informationLayer.DataProvider = bingGeocodeDataProvider;

 

            this.bingGeocodeDataProvider.LocationInformationReceived += bingGeocodeDataProvider_LocationInformationReceived;

            this.bingGeocodeDataProvider.LayerItemsGenerating        += bingGeocodeDataProvider_LayerItemsGenerating;

        }

 

        #endregion

        #region 전송 버튼 클릭시 처리하기 - sendButton_Click(sender, e)

 

        /// <summary>

        /// 전송 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void sendButton_Click(object sender, EventArgs e)

        {

            GeoPoint geoPoint;

 

            if(GetGeoPoint(this.latitudeTextEdit.Text, this.longitudeTextEdit.Text, out geoPoint))

            {

                this.bingGeocodeDataProvider.RequestLocationInformation(geoPoint, 0);

            }

        }

 

        #endregion

        #region 빙 지오코드 데이터 공급자 위치 정보 수신시 처리하기 - bingGeocodeDataProvider_LocationInformationReceived(sender, e)

 

        /// <summary>

        /// 빙 지오코드 데이터 공급자 위치 정보 수신시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void bingGeocodeDataProvider_LocationInformationReceived(object sender, LocationInformationReceivedEventArgs e)

        {

            if(e.Cancelled == true)

            {

                return;

            }

 

            if(e.Result.ResultCode != RequestResultCode.Success)

            {

                this.resultMemoEdit.Text = "The Bing Geocode service does not work for this location.";

 

                return;

            }

 

            StringBuilder stringBuilder = new StringBuilder();

 

            int count = 1;

 

            foreach(LocationInformation information in e.Result.Locations)

            {

                stringBuilder.AppendFormat("Request Result {0} :", count                               );

                stringBuilder.AppendLine();

                stringBuilder.AppendFormat("{0}"                 , information.EntityType              );

                stringBuilder.AppendLine();

                stringBuilder.AppendFormat("{0}"                 , information.Address.FormattedAddress);

                stringBuilder.AppendLine();

                stringBuilder.AppendFormat("Coordinates : {0}"   , information.Location                );

                stringBuilder.AppendLine();

                stringBuilder.AppendLine  ("--------------------------------------------------");

 

                count++;

            }

 

            this.resultMemoEdit.Text = stringBuilder.ToString();

        }

 

        #endregion

        #region 빙 지오코드 데이터 공급자 레이어 항목 생성시 처리하기 - bingGeocodeDataProvider_LayerItemsGenerating(sender, e)

 

        /// <summary>

        /// 빙 지오코드 데이터 공급자 레이어 항목 생성시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void bingGeocodeDataProvider_LayerItemsGenerating(object sender, LayerItemsGeneratingEventArgs e)

        {

            this.mapControl.ZoomToFit(e.Items, 0.4);

        }

 

        #endregion

 

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

 

        #region 값 구하기 - GetValue(valueString, minimumValue, maximumValue, valueName, value)

 

        /// <summary>

        /// 값 구하기

        /// </summary>

        /// <param name="valueString">값 문자열</param>

        /// <param name="minimumValue">최소 값</param>

        /// <param name="maximumValue">최대 값</param>

        /// <param name="valueName">값 명</param>

        /// <param name="value"></param>

        /// <returns>처리 결과</returns>

        private bool GetValue(string valueString, double minimumValue, double maximumValue, string valueName, out double value)

        {

            double temporaryValue = string.IsNullOrEmpty(valueString) ? 0 : double.Parse(valueString);

 

            if((temporaryValue > maximumValue) || (temporaryValue < minimumValue))

            {

                MessageBox.Show

                (

                    string.Format

                    (

                        "The {0} must be less than or equal to {2} and greater than or equal to {1}. Correct the input value.",

                        valueName,

                        minimumValue,

                        maximumValue

                    )

                );

 

                value = 0;

 

                return false;

            }

 

            value = temporaryValue;

 

            return true;

        }

 

        #endregion

        #region 지리 위치 구하기 - GetGeoPoint(latitudeString, longitudeString, geoPoint)

 

        /// <summary>

        /// 지리 위치 구하기

        /// </summary>

        /// <param name="latitudeString">위도 문자열</param>

        /// <param name="longitudeString">경도 문자열</param>

        /// <param name="geoPoint">지리 위치</param>

        /// <returns>처리 결과</returns>

        private bool GetGeoPoint(string latitudeString, string longitudeString, out GeoPoint geoPoint)

        {

            double latitude;

            double longitude;

 

            if

            (

                GetValue(latitudeString ,  -90,  90, "Latitude" , out latitude ) &&

                GetValue(longitudeString, -180, 180, "Longitude", out longitude)

            )

            {

                geoPoint = new GeoPoint(latitude, longitude);

 

                return true;

            }

 

            geoPoint = null;

 

            return false;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] ShapefileDataAdapter 클래스 : 도형 파일에서 데이터 로드하기  (0) 2020.06.19
[DEVEXPRESS/WINFORM] SqlGeometryItemStorage 클래스 : 잘 알려진 텍스트에서 벡터 항목 제공하기  (0) 2020.06.19
[DEVEXPRESS/WINFORM] MapItemStorage 클래스 : 맵 상에 표시할 벡터 항목 수동으로 생성하기  (0) 2020.06.19
[DEVEXPRESS/WINFORM] BingElevationDataProvider 클래스 : 빙 고도(Bing Elevation) 서비스를 사용해 높이 구하기  (0) 2020.06.19
[DEVEXPRESS/WINFORM] BingRouteDataProvider 클래스 : 빙 경로(Bing Route) 서비스를 사용해 경로 계산하기  (0) 2020.06.18
[DEVEXPRESS/WINFORM] BingGeocodeDataProvider 클래스 : 빙 지오코드(Bing Geocode) 서비스를 사용해 위도/경도에 대한 정보 구하기  (0) 2020.06.17
[DEVEXPRESS/WINFORM] BingSearchDataProvider 클래스 : 빙 검색(Bing Search) 서비스를 사용해 위치 정보 구하기  (0) 2020.06.17
[DEVEXPRESS/WINFORM] BingSearchDataProvider 클래스 : 빙 검색(Bing Search) 서비스 사용하기  (0) 2020.06.17
[DEVEXPRESS/WINFORM] IImageTileSource 인터페이스 : 실행시 이미지 타일 생성하기  (0) 2020.06.17
[DEVEXPRESS/WINFORM] CartesianSourceCoordinateSystem 클래스 : CoordinateConverter 속성을 사용해 좌표 변환기(Coordinate Converter) 수동으로 설정하기  (0) 2020.06.17
[DEVEXPRESS/WINFORM] ShapefileDataAdapter 클래스 : SourceCoordinateSystem 속성을 사용해 직교 데이터(Cartesian Data) 제공하기  (0) 2020.06.17
Posted by 사용자 icodebroker

댓글을 달아 주세요