[DEVEXPRESS/WINFORM] InformationDataProviderBase 클래스 : 커스텀 경로 공급자 구현하기
DevExpress/WinForm 2020. 6. 25. 00:20728x90
반응형
728x170
▶ RouteData.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using DevExpress.XtraMap;
namespace TestProject
{
/// <summary>
/// 경로 데이터
/// </summary>
public class RouteData : IInformationData
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Event
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 데이터 응답시 이벤트 - OnDataResponse
/// <summary>
/// 데이터 응답시 이벤트
/// </summary>
public event EventHandler<RequestCompletedEventArgs> OnDataResponse;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 포인트 리스트
/// </summary>
private readonly List<GeoPoint> pointList = new List<GeoPoint>();
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 포인트 리스트 - PointList
/// <summary>
/// 포인트 리스트
/// </summary>
public List<GeoPoint> PointList
{
get
{
return this.pointList;
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 경로 계산하기 - CalculateRoute(point1, point2)
/// <summary>
/// 경로 계산하기
/// </summary>
/// <param name="point1">포인트 1</param>
/// <param name="point2">포인트 2</param>
public void CalculateRoute(GeoPoint point1, GeoPoint point2)
{
CalculateRouteCore(point1, point2);
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[] mapItemArray = new MapItem[3];
mapItemArray[1] = new MapCallout()
{
Location = pointList[0],
Text = pointList[0].ToString()
};
mapItemArray[2] = new MapCallout()
{
Location = pointList[pointList.Count - 1],
Text = pointList[pointList.Count - 1].ToString()
};
MapPolyline polyline = new MapPolyline()
{
IsGeodesic = true,
Stroke = Color.Red,
StrokeWidth = 4
};
for(int i = 0; i < pointList.Count; i++)
{
polyline.Points.Add(pointList[i]);
}
mapItemArray[0] = polyline;
return new RequestCompletedEventArgs(mapItemArray, null, false, null);
}
#endregion
#region 경로 계산하기 (코어) - CalculateRouteCore(point1, point2)
/// <summary>
/// 경로 계산하기 (코어)
/// </summary>
/// <param name="point1">포인트 1</param>
/// <param name="point2">포인트 2</param>
private void CalculateRouteCore(GeoPoint point1, GeoPoint point2)
{
this.pointList.Clear();
this.pointList.Add(point1);
this.pointList.Add(point2);
}
#endregion
}
}
728x90
▶ RouteProvider.cs
using System.Collections.Generic;
using DevExpress.XtraMap;
namespace TestProject
{
/// <summary>
/// 경로 공급자
/// </summary>
public class RouteProvider : InformationDataProviderBase
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 포인트 열거 가능 목록 - PointEnumerable
/// <summary>
/// 포인트 열거 가능 목록
/// </summary>
public IEnumerable<GeoPoint> PointEnumerable
{
get
{
return Data.PointList;
}
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 데이터 - Data
/// <summary>
/// 데이터
/// </summary>
protected new RouteData Data
{
get
{
return (RouteData)base.Data;
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 경로 계산하기 - CalculateRoute(point1, point2)
/// <summary>
/// 경로 계산하기
/// </summary>
/// <param name="point1">포인트 1</param>
/// <param name="point2">포인트 2</param>
public void CalculateRoute(GeoPoint point1, GeoPoint point2)
{
Data.CalculateRoute(point1, point2);
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 데이터 생성하기 - CreateData()
/// <summary>
/// 데이터 생성하기
/// </summary>
/// <returns>정보 데이터 인터페이스</returns>
protected override IInformationData CreateData()
{
return new RouteData();
}
#endregion
}
}
300x250
▶ 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();
RouteProvider routeProvider = new RouteProvider();
this.informationLayer.DataProvider = routeProvider;
routeProvider.CalculateRoute(new GeoPoint(70, 60), new GeoPoint(-60, -70));
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
반응형
그리드형(광고전용)
댓글을 달아 주세요