[DEVEXPRESS/WINFORM] InformationDataProviderBase 클래스 : 커스텀 지오코드 공급자 구현하기
DevExpress/WinForm 2020. 6. 24. 22:36728x90
728x170
▶ 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
그리드형(광고전용)