티스토리 뷰
목차
GIS Mapping Library DotSpatial, 기초, 응용, 개발 사용 방법
◆ BASIC
위의 문서를 통해서 얻을 수 있는 정보는 아래 4가지입니다.
- C#으로 DotSpatial의 클래스 라이브러리를 로드하여 사용하는 방법
- 레스터 데이터 로드 (포스트 하단 참조)
- Shape 파일 작업
- 레스터와 벡터를 분석하고 시각화
GIS Mapping Library DotSpatial 문서를 다운받아 보시면, 기본 프로젝트 설정과 사용 방법, 그리고 소스 코드가 있습니다.
그러한 소스 코드를 구현하면 아래와 같은 결과 화면을 볼 수 있습니다.
[GIS Mapping Library DotSpatial] Raster Vector Data Analysis
아래 코드는 UI 오른쪽 상단의 "View Elevation" 버튼에 대한 소스입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #region "Class level variables" //the line layer MapLineLayer lineLayer; //the line feature set FeatureSet lineF; int lineID= 0; //boolean variable for first time mouse click Boolean firstClick=false; //boolean variable for ski path drawing finished Boolean hikingpathPathFinished = false; #endregion private void btnDrawPath_Click(object sender, EventArgs e) { //remove any existing path foreach (IMapLineLayer existingPath in map1.GetLineLayers()) { map1.Layers.Remove(existingPath); } //hikingpath is not finished hikingpathPathFinished = false; //change the mouse cursor map1.Cursor = Cursors.Cross; //initialize the polyline featureset LineF= new FeatureSet(FeatureType.Line); //set projection lineF.Projection = map1.Projection; //initialize the featureSet attribute table DataColumn column = new DataColumn("ID"); lineF.DataTable.Columns.Add(column); //add the featureSet as map layer lineLayer = (MapLineLayer)map1.Layers.Add(lineF); //implement the symbology LineSymbolizer symbol = new LineSymbolizer(Color.Blue, 2); lineLayer.Symbolizer = symbol; //Set the legend text lineLayer.LegendText = "Hiking path"; //Before clicking the mouse first time firstClick = true; } //GIS Mapping Library DotSpatial private void map1_MouseDown(object sender, MouseEventArgs e) { //if hiking path is fininshed, don't draw any line if (hikingpathPathFinished == true) return; if (e.Button == MouseButtons.Left) { //left click - fill array of coordinates //coordinate of clicked point Coordinate coord = map1.PixelToProj(e.Location); //first time left click - create empty line feature if (firstClick) { //Create a new List called lineArray. //This list will store the Coordinates //We are going to store the mouse click coordinates into this array. List<Coordinate> lineArray = new List<Coordinate>(); //Create an instance for LineString class. //We need to pass collection of list coordinates LineString lineGeometry = new LineString(lineArray); //Add the linegeometry to line feature IFeature lineFeature = lineF.AddFeature(lineGeometry); //add first coordinate to the line feature lineFeature.Coordinates.Add(coord); //set the line feature attribute lineID = lineID + 1; lineFeature.DataRow["ID"] = lineID; firstClick = false; } else { //second or more clicks - add points to the existing feature IFeature existingFeature = lineF.Features[lineF.Features.Count - 1]; existingFeature.Coordinates.Add(coord); //refresh the map if line has 2 or more points if (existingFeature.Coordinates.Count >= 2) { lineF.InitializeVertices(); map1.ResetBuffer(); } } } Else if (e.Button == MouseButtons.Right) { //right click - reset first mouse click firstClick = true; map1.ResetBuffer(); lineF.SaveAs("c:\\MW\\linepath.shp", true); MessageBox.Show("The line shapefile has been saved."); map1.Cursor = Cursors.Arrow; //the ski path is finished hikingpathPathFinished = true; } } public List<PathPoint> ExtractElevation (double startX, double startY, double endX, double endY, IMapRasterLayer raster) { double curX = startX; double curY = startY; double curElevation = 0; List<PathPoint> pathPointList = new List<PathPoint>(); int numberofpoints = 100; double constXdif = ((endX - startX) / numberofpoints); double constYdif = ((endY - startY) / numberofpoints); for (int i = 0; i <= numberofpoints; i++) { PathPoint newPathPoint = new PathPoint(); if ((i == 0)) { curX = startX; curY = startY; } else { curX = curX + constXdif; curY = curY + constYdif; } Coordinate coordinate = new Coordinate(curX, curY); RcIndex rowColumn = raster.DataSet.Bounds.ProjToCell(coordinate); curElevation = raster.DataSet.Value[rowColumn.Row, rowColumn.Column]; //set the properties of new PathPoint newPathPoint.X = curX; newPathPoint.Y = curY; newPathPoint.Elevation = curElevation; pathPointList.Add(newPathPoint); } return pathPointList; } | cs |
개인적으로는 저 문서와 더불어 공식 홈페이지 자료와 코드 프로젝트의 게시글을 보시길 추천합니다.
[GIS Mapping Library DotSpatial] Hiking Path Graph
◆ DotSpatial Mapping
공식 홈페이지 - DotSpatial [클릭]
공식 홈페이지에 접속해서 맨 오른쪽의 Download를 눌러 데모 프로그램과 DLL을 다운 받을 수 있습니다.
[GIS Mapping Library DotSpatial] DotSpatial Mapping - Download site
◆ Download DotSpitial
우선 공식 사이트로 이동해 DotSpatial_Release.1.0.845 RC2.zip을 다운 받습니다.
현재 최신버전이고 다른 버전은 다운로드 사이트를 참조하세요.
DotSpitial 설치 - 다운로드
다운 받은 압축 파일의 내부에 있는 실행 파일로 데모 프로그램은 실행해 볼 수 있습니다.
DotSpitial 설치 - 폴더 크기 확인
Creating a Project
비주얼 스튜디오를 실행한 뒤, WinForm으로 새로운 프로젝트를 생성합니다.
DotSpitial 설치 - Creating a Project
Changing Target Platform
DotSpatial은 .NET Framework 4 버전을 사용해야 합니다. 프로젝트를 우클릭하여 속성 창에 들어가 버전을 변경합니다.
DotSpitial 설치 - Changing Target Platform
Adding ToolEbox Items
도구 상자에 DotSpatial 아이템을 드래그해서 폼을 꾸밀 수 있습니다. 도구 상자에서 우클릭하여 새로운 아이템들을 추가해줄 준비를 합니다.
DotSpitial 설치 - Adding ToolEbox Items
그리고 난 뒤, 바로 우클릭을 통해서 새로운 아이템들을 실제로 추가해 줍니다.
DotSpitial 설치 - Choose Items
이후에 Browser를 눌러서 DotSpatial.Controls를 추가합니다.
DotSpitial 설치 - Insert DotSpatial.Controls
그러면, 아래 그림과 같이 도구 상자에 아이콘이 추가된 것을 볼 수 있습니다.
DotSpitial 설치 - 도구상자 아이콘 확인
Laying Out the User Interface
우선, 4개의 버튼을 상단에 추가합니다. 정가운데에는 Map Control도 추가해 줍니다.
[GIS Mapping Library DotSpatial] DotSpitial 설치 - Map Control 추가
Adding DotSpatial References
DotSpitial 설치 - Adding DotSpatial References
이어서 참조 추가를 통해서 아래의 두 파일을 선택해 추가합니다.
- DotSpatial.Data
- DotSpatial.Symbology
Setting Control Properties
DotSpitial 설치 - Setting Control Properties
아래처럼 버튼의 Name과 Text를 교체합니다.
Button1 -> Open File
Open File - 추가 코드
1 | uxMap.AddLayer(); | cs |
Button2 -> Zoom In
Zoom In - 추가 코드
1 | uxMap.ZoomToMaxExtent(); | cs |
Button3 -> Zoom Wide
Zoom Wide - 추가 코드
1 2 3 4 | private void uxPan_Click(object sender, EventArgs e) { uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan; } | cs |
Button4 -> Pan
map1 -> uxMap
uxMap - 추가 코드
1 | uxMap.ZoomIn(); | cs |
이 과정까지 완료되었다면 다 된 겁니다.
마지막으로 제가 참조한 사이트들입니다.
참조 사항
1. dotspatial.codeplex.com
- DotSpatial에 대한 추가 정보와 설명서 [클릭]
2. MapWindowSix
- MapWindow 6 - 확장 DotSpatial 기반 응용 프로그램 [클릭]
3. Natural Earth
4. Diva GIS - Download
관련 글
- FWTools GDAL Windows 유틸리티 (GIS 툴)
- 좌표 변환 GIS 프로그램, 경위도 좌표계 변경 (WGS84, TM, KATE 수치)
- ArcGIS, GIS 전문가라면 외워야할 용어 17개 (Analysis ~ DBMS)
GIS Mapping Library DotSpatial, 기초, 응용, 개발 사용 방법
ⓒ written by vicddory