Xây dựng ứng dụng với ActiveX map control trong Visual Studio

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp lan truyền độ tương tự trong phân cụm dữ liệu và ứng dụng (Trang 52)

Active X map control với MapWinGIS.ocx được sử dụng để cung cấp chức năng GIS và lập bản đồ cho các ứng dụng Windows Forms. MapWinGIS.ocx là một nguồn mở miễn phí, lập trình dựa trên hệ thống thông tin địa lý điều khiển ActiveX và lập trình giao diện ứng dụng (API) có thể được

thêm vào Windows trong Visual Basic, C #, Delphi, hoặc các ngôn ngữ khác có hỗ trợ ActiveX, cung cấp ứng dụng đó với một bản đồ nền.

Cài đặt Active X map control bản 4.9.3.5 Link download tại đây: http://mapwingis.codeplex.com/releases/view/541892

Để đưa Active X map control vào một form trong Visual studio ta làm như sau:  Bước 1: Tạo một project trên VB, ngôn ngữ C#.NET, loại ứng dụng là

Windows Forms Application, framework .NET 3.5.

Sau khi tạo thành công mộtWindow form Application, thực hiện đặt tên, ID cho form bằng cách:

Ấn chuột phải vào form, chọn Properties.

Thiết lập các thuộc tính (Name) và Text cho form. Thuộc tính (Name) sẽ được coi như ID của form để gọi đến form. Thuộc tính Text để hiển thị tên của form.

 Bước 2: Đưa Active X vào Visual Studio bằng cách:

Tại thanh công cụ chọn TOOLChoose Toolbox ItemCOM components đánh dấu tích vào Map ControlOK

Sau khi add xong, kiểm tra trong mục Tool box của form sẽ thấy control Map Control:

 Bước 3: Đưa Map Control vào form bằng cách: kéo chức năng Map Control từ Toolbox thả vào form, trên form sẽ hiện ra khung có toạ độ như hình:

Hình 3.3: Kéo thả Map Control vào form

Đặt (Name) cho Map Control vừa kéo vào là AxMap1

 Bước 4: tạo Legend : Mục đích tạo thanh điều khiển các lớp layer (cho phép layer nào hiển thị, nằm trên)

Các bước thực hiện:

-Bước 4.1: Tại ToolChoose Toolbox Item, tại .Net Framework

ComponentBrower đến C:\Program Files\MapWindow  chọn

MapWinInterfaces.dll, tick chọn Legend

Sau khi tick chọn xong, control Legned đã được add vào Toolbox:

-Bước 4.2: Kéo Legend từ Toolbox thả vào phía bên trái form. Thiết lập thuộc tính (Name) là Legend

Hình 3.4: Kéo Legend vào form

Tạo liên kết giữa Legend và Mapcontrol:

Chuyển sang màn hình code của form, viết sự kiện load cho form như sau:

 Bước 5: Thêm chức năng Tạo layer và Xoá layer -Bước 5.1: Tạo Layer

Thêm 1 button vào form, đặt thuộc tính Text là Tạo layer.

Viết sự kiện Click cho button Tạo layer như sau:

private void TestMap_Load(System.Object sender, System.EventArgs e) {

Legend.Map = AxMap.GetOcx(); }

-Bước 5.2: Xoá Layer

Thêm 1 button vào form, đặt thuộc tính Text là Xoá layer, Name là BtDel Viết sự kiện Click cho button Xoá layer như sau:

 Bước 6: Chọn màu cho vùng hiển thị

Thêm 1 button vào form, đặt thuộc tính Text là Set Color, Name là Bttcolour Từ toolbox, kéo control ColorDialog vào cạnh button Set Color

Viết sự kiện click cho button Set Color như sau: private void BtAdd_Click(object sender, EventArgs e) {

int handle = 0;

MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); OpenFileDialog open1 = new OpenFileDialog();

open1.Filter = sf.CdlgFilter;

if (open1.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { sf.Open(open1.FileName);

handle = Legend.Layers.Add(sf, true); Legend.Map.LayerName(handle) =

System.IO.Path.GetFileNameWithoutExtension(sf.Filename); }

}

private void BtDel_Click(object sender, EventArgs e) {

AxMap.RemoveAllLayers(); Legend.Layers.Clear(); }

 Bước 7: Tạo bảng hiển thị dữ liệu của layer add vào form -Bước 7.1: Tạo bảng:

Tạo một window form mới trong project bằng cách:

Bấm chuột phải vào tên project, chọn Add, chọnWindow form…; Đặt tên file là Table.cs

Tạo thêm Data grid vào form: Từ tool box, kéo control DatagridView vào form, đặt Name cho control này là DataGridView1, set thuộc tính dock của DataGridView1 là Fill.

private void BttColour_Click(object sender, EventArgs e) { int hnd = 0; System.UInt32 col = 0; hnd = Legend.SelectedLayer; if (ColorDialog1.ShowDialog == System.Windows.Forms.DialogResult.OK) { Col = System.Convert.ToUInt32(Information.RGB(ColorDialog1.Color.R, ColorDialog1.Color.G, ColorDialog1.Color.B)); AxMap.set_ShapeLayerFillColor(hnd, col); Legend.Refresh(); AxMap.Refresh(); } }

Hình 3.5: Kéo thêm DataGridView vào form Table

Chuyển sang màn hình code của form Table, thêm dòng khai báo Shape file vào sau dòng Public class Table:

Tạo 1 sub mới với tham số là myShapeFile As MapWinGIS.Shapefile bằng cách thêm đoạn code phía dưới vào public Class Table

Viết sự kiện load cho form Table như sau:

MapWinGIS.Shapefile pshape = default(MapWinGIS.Shapefile);

public New(ref MapWinGIS.Shapefile myShapeFile) {

pshape = myShapeFile; InitializeComponent(); }

Gọi form Table vào form chính TestMap như sau:

Trên form TestMap, thêm 1 button đặt Text là Table, Name là BttTable Viết sự kiện click cho button Table như sau:

private void Table_Load(object sender, EventArgs e) {

DataTable myDataTable = new DataTable(); DataRow myDataRow = null;

int i = 0; int j = 0; int k = 0;

for (i = 0; i <= pshape.NumFields - 1; i++) { myDataTable.Columns.Add(pshape.Field(i).Name); } for (j = 0; j <= pshape.NumShapes - 1; j++) { myDataRow = myDataTable.NewRow(); for (k = 0; k <= pshape.NumFields - 1; k++) { myDataRow[k] = pshape.CellValue(k, j); } myDataTable.Rows.Add(myDataRow); } DataGridView1.DataSource = myDataTable; }

 Bước 8: Hiển thị table có trên layer:

Tại form TestMap, thêm 1 button set Name = BttShowTable, Text: Show Table.

Kết quả chạy thử nghiệm

Dữ liệu đầu vào là từ các trạm quan trắc khí quyển thực tế của tỉnh Vĩnh Phúc với 60 trạm quan trắc khác nhau trên địa bàn.

Bảng số liệu các trạm quan trắc trên địa bàn tỉnh Vĩnh Phúc

kihieu kinhdo vido aqi

K1 574529 2348066 5.708 K2 563291 2342475 3.014 K3 571422 2351125 4.445 K4 575282 2353328 3.888 K5 577449 2360008 1.407 K6 554437 2340277 3.149 K7 559880 2345252 3.439 K8 563347 2345695 2.996 K9 566630 2351670 3.874 K10 569709 2354309 2.052 K11 572790 2357638 2.61

private void BttTable_Click(object sender, EventArgs e) {

int hndl = 0;

MapWinGIS.Shapefile sf = default(MapWinGIS.Shapefile); //Get handle for layer 0

hndl = Legend.SelectedLayer;

//Get the shapefile contained in layer 0 sf = AxMap.get_GetObject(hndl); Table myTableForm = new Table(sf); myTableForm.ShowDialog();

K12 574607 2360084 2.734 K13 550485 2341596 3.506 K14 552895 2346540 3.671 K15 554672 2348404 5.589 K16 560029 2350865 5.668 K17 565283 2355154 2.183 K18 566432 2357532 2.159 K19 569258 2361145 2.419 K20 571617 2364953 0.778 K21 575133 2356868 0.867 K22 549835 2348253 2.797 K23 553173 2351470 3.377 K24 554826 2353597 4.124 K25 562422 2356720 5.013 K26 562756 2361205 4.119

kihieu: ký hiệu của một trạm quan trắc kinhdo: kinh độ

vido: vĩ độ

aqi: chỉ số chất lượng không khí

Trình cắm thêm plugin APCluster được thiết kế đọc dữ liệu từ tệp giống như “Attribute Table” của MapWindow. Nó có thể đọc dữ liệu đầu vào từ các tệp dạng *.dbf, *.xls (là các file xuất từ MapWindow)

Hình 3.6:Giao diện plugin APCluster

- Kết quả đầu ra

Số cụm và danh sách các điểm dữ liệu thuộc mối cụm (xem hình minh họa)

Với dữ liệu thực tế từ 60 trạm quan trắc khí tượng trên toàn tỉnh Vĩnh Phúc, phân cụm bằng thuật toán AP cho kết quả ra 3 cụm. Từ kết quả này có thể kết luận: nếu phân chia tỉnh Vĩnh Phúc thành các tiểu vùng dựa trên các đặc điểm môi trường khí tượng tương tự nhau thì ta được 3 tiểu vùng.

KẾT LUẬN 1. Một số kết quả đạt đƣợc của luận văn

Đề tài đã thực hiện được các nội dung sau:

− Tìm hiểu về hệ thống thông tin địa lý (GIS); phần mềm GIS mã nguồn mở MapWindow; cách viết plug-in để mở rộng thêm chức năng cho MapWindow.

− Tim hiểu về phân cụm và phân cụm dữ liệu địa lý; nghiên cứu thuật toán lan truyền độ tương tự (AP) để phân cụm dữ liệu.

− Tìm hiểu bài toán thực tế: nghiên cứu khai thác các dữ liệu về môi trường khí hậu, do các trạm quan trắc khí tượng cung cấp bằng tiếp cận phân cụm dữ liệu.

− Cài đặt thành công thuật toán phân cụm AP thành một plug-in cho phần mềm mã nguồn mở MapWindow; chạy thử nghiệm ứng dụng cho bài toán thực tế nói trên.

2. Những hạn chế và hƣớng phát triển

Mặc dù đã thực hiện các nội dung cơ bản cho bài toán đặt ra và xây dựng được chương trình ứng dụng, đề tài cần nghiên cứu bổ sung thêm các nội dung sau:

− Cải thiện tốc độ tính toán của thuật toán AP

− Nghiên cứu các cải tiến của thuật toán lan truyền độ tương tự trong phân cụm dữ liệu.

TÀI LIỆU THAM KHẢO Tiếng Việt

[1] .Đặng Văn Đức, Hệ thống thông tin địa lý, Nhà xuất bản Khoa học và Kỹ thuật, 2001, Giáo trình bài giảng GIS 2009

[2] Nguyễn Hồng Phương, Đinh Văn Ưu, Hệ thống thông tin địa lý và một số ứng dụng trong hải dương học, NXB Đại Học Quốc Gia Hà Nội năm 2007

Tiếng Anh

[3] Delbert Dueck (2009, Affinity propagation: clustering data by passing messages, Ph. D. thesis, University of Toronto, Canada

[4] Frey, J.F. and Dueck, D. (2007), Clustering by Passing Messages Between Data Points, Science 315, 972-976

[5] Frey, J.F. and Dueck, D. (2007) Mixture Modeling by Affinity

Propagation, freely available atbooks.nips.cc/papers/files/nips18/NIPS2005 0799.pdf

[6] Givoni Inmar-Ella (2012), Beyond Affinity Propagation: Message Passing Algorithms for Clustering, Ph. D. thesis, University of Toronto, Canada

[8] A.Padmapriya, N.Subitha (2013), Clustering Algorithm for Spatial Data Mining: An Overview, International Journal of Computer Applications (0975 – 8887), Volume 68– No.10, April 2013.

Internet

[9] Tài liệu Hướng dẫn sử dụng MapWindow 4.8.6,

http://www.mapwindow.org/apps/wiki/lib/exe/fetch.php?media=quick_guide_to _mapwindows_4.8.6.pdf

[11]http://www.mapwindow.org/documentation/mapwingis4.8/annotated. html

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp lan truyền độ tương tự trong phân cụm dữ liệu và ứng dụng (Trang 52)