Dữ liệu sử dụng trong chương trình

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về mạng lưới trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 63)

Dữ liệu của ứng dụng là bản đồ đã được số hóa do Phòng Nghiên cứu và xử lý thông tin môi trường - Viện Địa lý - Viện Khoa học và Công nghệ Việt Nam cung cấp. Nguồn dữ liệu thô này gồm hai lớp bản đồ được vẽ bằng MapInfo dưới dạng các table và các tệp .MIF/.TAB.

3.3.1 Mô t chi tiết các bng d liu trong MapInfo

Trong chương trình này sử dụng hai lớp bản đồ với ý nghĩa như sau:

• Lớp điểm dừng xe buýt: gồm tất cả các điểm dừng xe buýt trên tuyến phố Hà Nội. Có tất cả 44 điểm dừng đỗ khắp nơi trong khu vực Hà Nội.

• Lớp tuyến xe buýt: bao gồm lộ trình theo các tuyến phố của toàn bộ hệ

thống xe buýt Hà Nội. Có 49 tuyến xe buýt đang hoạt động.

Hai lớp Diem_chuyen và Xe_buyt được thể hiện qua hai bảng dữ liệu với cấu trúc dữ liệu được mô tả như sau:

Bảng Diem_chuyen

Tên trường Kiểu dữ liệu Độ lớn Ghi chú

Ten_diem char 20 Tên của các điểm xe buýt

Tuyen char 100 Các tuyến đi qua điểm xe buýt này ID integer 4 Số thứ tự các điểm xe buýt

Bảng Xe_buyt

Tên trường Kiểu dữ liệu Độ lớn Ghi chú

Ten_tuyen char 5 Tên của các tuyến xe buýt Chieu char 50 Hướng đi của tuyến xe buýt Ten_duong char 50 Tên đường xe buýt đi qua

Bảng Duong_Xe

Tên trường Kiểu dữ liệu Độ lớn Ghi chú

Ten_tuyen number 5 Tên của các tuyến xe buýt Chieu text 50 Hướng đi của tuyến xe buýt Diem_xe_buyt_di text 50 Điểm xe buýt đi

Diem_xe_buyt_den text 50 Điểm xe buýt sẽđến

Khoang_cach number 10 Khoảng cách hai điểm xe buýt gần nhau trên cùng tuyến

3.4 Thiết kế, đặc t các chc năng

3.4.1 Xem bn đồ

• Xem bản đồ tổng thể

Cho phép bản đồ hiển thị dạng tổng thể trên toàn bộ cửa sổ chính của chương trình.

Khi người dùng chọn chức năng này, hệ thống sẽ truy cập cơ sở dữ

liệu và hiển thị toàn bộ bản đồ ra cho người dùng.

• Phóng to, thu nhỏ bản đồ

Là cách thức một người dùng phóng to hay thu nhỏ phần không gian hiển thị của bản đồ.

Khi chức năng phóng to được lựa chọn, người dùng kích trái chuột, giữ và di con trỏ chuột để tạo một hình chữ nhật bao quanh vùng cần phóng to rồi thả chuột.

Khi người dùng chọn chức năng thu nhỏ, chỉ cần nhấn chuột trái lên bản đồ tại vùng không gian đang hiển thị.

Hệ thống sẽ truy cập cơ sở dữ liệu lấy ra phần thông tin trong không gian mới và hiện ra cho người dùng.

• Di chuyển bản đồ

Là cách thức một người dùng di chuyển bản đồ lên trên, xuống dưới, sang trái, sang phải để xem vùng không gian khác trên bản đồ. Người dùng nhấn chuột lên bản đồ, giữ chuột, kéo bản đồ sang vùng không gian cần xem và thả chuột. Hệ thống sẽ truy cập cơ sở dữ liệu lấy ra phần thông tin trong không gian mới và hiện ra cho người dùng.

• Chọn một đối tượng bản đồ:

Cho phép người sử dụng chọn một đối tượng trên bản đồ.

• Chọn một vùng trên bản đồ:

Cho phép người sử dụng lựa chọn một vùng hoặc tất cả các đối tượng trong vùng đó theo lựa chọn của người sử dụng.

• Hiển thị các lớp bản đồ

Cho phép người dùng mở cửa sổ lớp bản đồ để bật hoặc tắt các lớp thông tin.

Hệ thống tự cập nhật ngay những thay đổi đối với thao tác người dùng và hiển thị tác dụng trên bản đồ.

• Xem ghi chú động trên bản đồ (MapTips)

Chức năng này chỉ áp dụng đối với lớp đường. Người dùng di chuột tới con đường cần biết tên và thông tin hiện ra dạng ghi chú động, nghĩa là khi di chuột ra vị trí khác thì ghi chú không còn hiển thị.

3.4.2 Truy vn trên bn đồ

Truy vấn các đối tượng theo không gian:

• Kích chọn trực tiếp một đối tượng (điểm, đường) trên bản đồ, đối tượng được lựa chọn sẽđược tô sang màu khác trên bản đồ.

• Hiển thị thông tin của đối tượng (điểm: tên điểm; đường: tuyến xe buýt

đi qua) trên bản đồ.

3.4.3 H thng tìm đường đi xe buýt trên bn đồ

• Hệ thống cho phép người sử dụng có thể tìm đường đi xe buýt ngắn nhất trên bản đồ.

• Cho phép người sử dụng nhập trực tiếp điểm đi và điểm đến hoặc kích chọn trực tiếp điểm đi và điểm đến trên bản đồ.

• Hệ thống sẽ đổi màu quãng đường đi ngắn nhất từ điểm đầu đến điểm cuối của tuyến xe buýt.

3.5 Sơ đồ lung d liu

Biểu đồ hoạt động của chương trình tìm tuyến đường đi có khoảng cách ngắn nhất từ điểm xe buýt bắt đầu đến điểm xe buýt đích cần đến trong mạng lưới xe buýt Hà Nội như sau (hình 3.1):

Hình 3.1 Biu đồ hot động chc năng tìm đường đi ngn nht

[Có] [Có]

[Không]

[Không]

Hiển thị đường đi ngắn nhất trên

bản đồ

Thông báo “Không tồn tại đường đi giữa hai

điểm đó” Tìm kiếm ? (C/K) [Nhập trực tiếp] Lựa chọn tìm kiếm Nhập - Điểm xuất phát - Điểm đến Kích chọn - Điểm xuất phát - Điểm đến

Tìm đường đi giữa hai điểm có khoảng

cách ngắn nhất

Liệt kê các đường đi có cùng khoảng

cách ngắn nhất

3.6 Cài đặt và th nghim chương trình

3.6.1 Cài đặt

Chương trình được phát triển bằng cách sử dụng công cụ MapXtreme v6.6 nhúng trong môi trường Visual C# . NET.

Chương trình chạy trên hệ điều hành Window XP. Máy tính tốc độ

1,73 GHz, bộ nhớ 512MB RAM.

3.6.2 K thut áp dng

™ Hiển thị bản đồ:

- Sử dụng phần mềm hỗ trợ MapXtreme v6.6 để hiển thị bản đồ mạng lưới tuyến xe buýt Hà Nội từ hai bảng cơ sở dữ liệu định dạng MapInfo. Hai bảng dữ liệu này tạo thành hai lớp bản đồ:

+ Tập tin Diem_chuyen.TAB: là lớp Diem_chuyen, hiển thị các hình tròn màu vàng, biểu diễn cho các điểm dừng xe buýt.

+ Tập tin Xe_buyt.TAB: lớp Xe_buyt, hiển thị các đường màu nâu nối các điểm, biểu diễn cho các tuyến xe buýt.

™ Cách chuyển đổi dữ liệu vào chương trình để xây dựng đồ thị

Từ dữ liệu cho trước theo định dạng MapInfo có thể xây dựng thành đồ

thị như sau:

- Các điểm dừng xe buýt (tương ứng với bảng dữ liệu Diem_chuyen) là tập các điểm của đồ thị. Các điểm này có tọa độ và có các thuộc tính như số thứ

tự và tên của từng điểm dừng xe buýt.

- Để xây dựng các cạnh đồ thị, tức là đường nối hai điểm xe buýt liền kề

thì có thể xây dựng một bảng cơ sở dữ liệu Access (bảng Duong_Xe) trong đó thuộc tính Khoang_cach biểu diễn độ dài khoảng cách hai điểm liền kề trong đồ

thị, tức là khoảng cách hai điểm xe buýt gần kề trong cùng tuyến xe buýt.

Đoạn mã xây dựng đồ thị như sau:

private void khoiTaoDoThi()

{

for(int i =0; i < danhSachDiem.Length;i++) for (int j = 0; j < danhSachDiem.Length; j++) {

if (DoThi[i, j] == null) {

DoThi[i,j]=new clsKhoangCach(danhSachDiem[i],danhSachDiem[j]); }

DoThi[i,j]=khoiTaoKhoangCach(danhSachDiem[i],danhSachDiem[j]); }

}

Trong đó, các biến được khai báo như sau:

clsBenXe[] danhSachDiem;

clsKhoangCach[,] DoThi;// chua khoang cach cac dinh Trong đó, lớp clsKhoangcach được định nghĩa như sau:

class clsKhoangCach

{

public static float MaxValue =float.MaxValue;

clsBenXe diemNguon;

clsBenXe diemDich;

public string tuyenXe;

public float doDai;

public clsKhoangCach(clsBenXe diemDau, clsBenXe diemCuoi) { diemNguon = diemDau; diemDich = diemCuoi; doDai = MaxValue; } }

Lớp clsBenxe được định nghĩa như sau:

class clsBenXe

{

public string ten;// Tên bến xe

public string tuyen;// các tuyến xe đi qua public bool isKiemTra;

public int thuTu; // thu tu cua diem trong danh sach

public int ID; // id cua ben xe trong csdl bang diem_chuyen public clsBenXe diemTruoc;

public clsBenXe() { ID = -1; ten = ""; tuyen = ""; isKiemTra = false; } }

™ Áp dụng thuật toán tìm đường đi vào đồ thị

Đây là đoạn mã lệnh áp dụng thuật toán tìm đường đi Dijkstra đã được trình bày trong chương 2:

private void giaiThuatDijkstra(clsBenXe diemDau) {

for (int i = 0; i < danhSachDiem.Length; i++) {

danhSachDiem[i].isKiemTra = false; danhSachDiem[i].diemTruoc = diemDau; }

diemDau.isKiemTra = true;// dua vao tap set //diemDau.diemTruoc = diemDau; int SoDiemChuaXet = danhSachDiem.Length - 1; while (SoDiemChuaXet > 0)

{

// tim diem ngan nhat chua xet toi diemDau clsBenXe diemMin = new clsBenXe();

for (int i = 0; i < danhSachDiem.Length; i++) {

if (!danhSachDiem[i].isKiemTra) {

if (diemMin.ten == "") diemMin = danhSachDiem[i]; if (DoThi[diemDau.thuTu,i].doDai < DoThi[diemDau.thuTu,diemMin.thuTu].doDai) { diemMin = danhSachDiem[i]; } } } diemMin.isKiemTra = true; SoDiemChuaXet--;

for (int i = 0; i < danhSachDiem.Length; i++) {

if((!danhSachDiem[i].isKiemTra)&&(DoThi[diemDau.thuTu,i].doDai > DoThi[diemDau.thuTu,diemMin.thuTu].doDai +

DoThi[diemMin.thuTu,i].doDai)) {

DoThi[diemDau.thuTu, i].doDai = DoThi[diemDau.thuTu, diemMin.thuTu].doDai + DoThi[diemMin.thuTu, i].doDai; danhSachDiem[i].diemTruoc = diemMin; DoThi[diemDau.thuTu, i].tuyenXe = DoThi[diemMin.thuTu, i].tuyenXe; } } } }

3.6.3 Các kết qu th nghim

3.6.3.1 Kết quả bước đầu

Chương trình “Tìm kiếm đường đi ngắn nhất giữa hai điểm xe buýt trong mạng lưới tuyến xe buýt Hà Nội” chạy trên môi trường WinXP khá ổn định.

™ Giao diện chính của chương trình (hình 3.2)

Hình 3.2 Giao din chính ca chương trình sau khi khi khi động

™ Các nút lệnh trên thanh công cụ (bảng 3.1)

Nút lệnh Chức năng Phóng to bản đồ Thu nhỏ bản đồ Di chuyển bản đồ Chọn một đối tượng bản đồ Chọn một vùng trên bản đồ Hiển thị các lớp trên bản đồ

™Giao diện chức năng xem tổng thể bản đồ hệ thống tuyến xe buýt Hà Nội (hình 3.3)

Hình 3.3 Bn đồ mng lưới tuyến xe buýt Hà Ni khi xem tng th

™ Giao diện chức năng hiển thị các lớp bản đồ (hình 3.4)

™ Giao diện chức năng hiển thị ghi chú động (hình 3.5)

Hình 3.5 Minh ha ghi chú động trên bn đồ

™ Giao diện chức năng tìm đường đi cho xe buýt theo yêu cầu người sử dụng Thao tác:

- Chọn một điểm xe buýt đi và một điểm xe buýt đến.

- Kích nút Tìm trên giao diện để đưa ra kết quả. Kết quả đường đi

được hiển thị trên bản đồ và được liệt kê chi tiết đường đi trong hộp thoại bên phải màn hình.

Chọn điểm đi và điểm đến (hình 3.6):

Kết quả sau khi tìm:

Hình 3.7 Minh ha kết quđường đi tìm được

Trên hình 3.7 là ví dụ tuyến xe buýt đi từ bến xe Kim Mã đến bến xe Mỹ Đình. Tuyến xe có lộ trình ngắn nhất là tuyến 34 với tổng chiều dài là 5.854879 km. Kiểu tìm kiếm là “Đường đi ngắn nhất”.

3.6.3.2 Nhận xét về kết quả

Chương trình đã được cài đặt và hoạt động trên cơ sở dữ liệu của mạng lưới tuyến xe buýt Hà Nội. Chương trình cài đặt một thuật toán tìm đường đi ngắn nhất Dijkstra để tìm đường đi tuyến xe buýt.

Chương trình đã xác định được đúng tuyến đường đi của xe buýt giữa hai

điểm xe buýt sao cho khoảng cách ngắn nhất. Kết quả tuyến đường đi hiển thị

trực quan trên bản đồ và đưa ra tổng chiều dài đường đi ngắn nhất đó.

Người sử dụng có thể truy vấn trực tiếp trên bản đồ hoặc nhập điểm đi và

điểm đến.

Chương trình chỉ mới thực hiện tìm lộ trình xe buýt ngắn nhất đến điểm

đích, không quan tâm số lần chuyển xe nhiều hay ít. Điều kiện này dùng trong trường hợp người dùng chọn đường đi ngắn nhất, có thể chọn đi bộ một số đoạn

đường ngắn thay vì phải chuyển xe.

Còn điều kiện chuyển tuyến xe ít nhất cho phép tìm đường đi qua ít trạm dừng nhất, tức là người đi không phải đổi trạm nhiều, giảm thiểu chi phí và thời

gian đợi chuyển xe. Nhưng chương trình chưa thực hiện điều kiện này.

Trong thực tế, đường đi có khoảng cách ngắn nhất chưa chắc là tối ưu nhất để lựa chọn vì đường phố đông đúc thì có thể thời gian sẽ lâu hơn. Hoặc với đường đi ngắn nhất mà phải chuyển nhiều tuyến xe thì chắc chắn người dùng vẫn muốn chọn tuyến xe nào hạn chế được việc chuyển tuyến xe dù đoạn

đường có dài hơn.

Giao diện chương trình thân thiện, dễ sử dụng.

KT LUN

Ngày nay, GIS được xem là một trong những công nghệ mới nhất, có nhiều ứng dụng nhất trong việc giải quyết các bài toán thực tế trong hầu hết các lĩnh vực kinh tế -

xã hội của loài người. Bên cạnh đó, việc sử dụng GIS để phân tích không gian là một

trong những hướng đi tiềm năng trong việc ứng dụng GIS giải quyết các vấn đề thực

tế. Một trong số những ứng dụng trong phân tích không gian là lập phương án vận

chuyển, tức tìm kiếm phương án tối ưu cho bài toán thực tế.

Trong khuôn khổ luận văn này đã thu được một số kết quả chính sau đây:

• Trình bày tổng quan về hệ thông tin địa lý, các vấn đền cơ bản liên quan đến

mạng lưới cơ sở dữ liệu không gian, các mô hình của mạng lưới không gian.

• Tìm hiểu và phân tích, đánh giá một số thuật toán xử lý truy vấn phân tích

mạng lưới, cụ thể là các thuật toán tìm đường đi ngắn nhất trong đồ thị như thuật toán Dijkstra, thuật toán A*, thuật toán Floyd,…

• Tìm hiểu công cụ phần mềm hỗ trợ trong GIS như MapInfo, MapXtreme.

• Cài đặt và thử nghiệm một thuật toán Dijkstra trong hệ thống quản lý mạng

lưới tuyến xe buýt Hà Nội với thành công bước đầu là xác định được lộ trình

nhanh nhất đến điểm xe buýt đích mà không cần quan tâm đến số lần

chuyển xe. Một vấn đề còn tồn tại là chưa đánh giá được thời gian thực hiện chương trình đối với thuật toán Dijkstra.

Hướng nghiên cu tiếp theo:

• Xây dựng một hệ thống chương trình quản lý tuyến xe buýt Hà Nội có giao

diện thuận tiện hơn, thực hiện nhiều chức năng hơn. Thực hiện việc tìm tuyến xe với kiểu tìm “chuyển xe ít nhất” và kết hợp với “khoảng cách ngắn

nhất” để giúp cho người sử dụng thuận tiện hơn trong việc định hướng đi

cho mình và chủ động hơn khi tham gia giao thông bằng phương tiện xe buýt.

• Thu thập thêm cơ sở dữ liệu về các lớp bản đồ thành phố Hà Nội để xây

dựng một bản đồ tuyến xe buýt Hà Nội chi tiết và sống động hơn.

• Tiếp tục cài đặt các thuật toán còn lại đã trình bày trong luận văn.

Mặc dù đã rất cố gắng, nỗ lực nhưng do thời gian và trình độ có những hạn chế nhất định nên luận văn sẽ không tránh khỏi những thiếu sót. Trong tương lai, em sẽ cố gắng hoàn thiện những hạn chế và phát triển những vấn đề đã nêu trên, để mang lại những kết quả khả quan hơn nữa. Rất mong nhận được sự đóng góp ý kiến của thầy cô và các bạn để luận văn ngày càng hoàn thiện hơn.

TÀI LIU THAM KHO

Tiếng Vit

[1] Đặng Văn Đức (2001), “Hệ thống thông tin địa lý”, NXB Khoa học và kỹ

thuật, Hà Nội.

[2] Đinh Mạnh Tường (2003), “Cấu trúc dữ liệu và thuật toán”, NXB Khoa học và kỹ thuật, Hà Nội.

[3] Kenneth H.Rosen (2000), “Toán học rời rạc ứng dụng trong tin học”, tr.494-711, NXB Khoa học và kỹ thuật, Hà Nội.

[4] Robert Sedgewick (1995), “Cẩm nang thuật toán”, tập 2, tr.81-186, NXB Khoa học và kỹ thuật, Hà Nội.

Tiếng Anh

[5] Dimistris Papadias, Jun Zhang, Nikos Mamoulis, Yufie Tao (2003), “Query Processing in Spatial Network Databases”, Proceedings of the 29th VLDB Conference.

[6] Hanan Samet (2002), The Design and Analysis of Spatial Data Structures, Addison-Wesley Publishing Company, Inc., USA.

[7] Jagan Sankaranarayanan, Houman Alborzi and Hanan Samet (2005), “Efficient Query Processing on Spatial Networks”, GIS’05, November 4-5, Bremen, Germany.

[8] James R. Evans, Edward Minieka (1992), Optimization Algorithms for Networks and Graphs, Marcel Dekker, Inc., USA.

[9] Kevin Shaw, John Sample, Elias Ioup, Mahdi Abdelguerfi, Oliver Mansion (2005), Graph Processing for Spatial Network Queries.

[10] Philip Rigaux, Michel Scholl, Agnès Voisard (2002), Spatial Databases with application to GIS,Academic Press, USA.

[11] Russell, S. J Norving, (2003), Artificial Intelligence: A Modern Approach, pp. 97-104.

[12] Shashi Shekhar, Sanjay Chawla (2003), Spatial Database: A Tour, Pearson Education, Inc., Upper Saddle River, New Jersey, USA.

[13] Williams, T.A., and G. P. White, 1973, A Note on Yen’s Algorithms for Finding the Length of All Shortest Paths in N-Node Nonnegative Distance Networks, J. ACM, 20(3), pp. 389-390.

[14] Yen, J. Y., 1973, Finding the Lengths of All Shortest Paths in N-Node Nonnegative Distance Complete Networks Using 1/2N3 Addition and N3

Comparisons, J. ACM, 19(3), pp. 423-424. Trang Web [15] http://en.wikipedia.org/wiki/Geographic_information_system [16] http://testdrive.mapinfo.com/TechSupp/MIProd.nsf/ [17] http://www.basao.com.vn/ [18] http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/

[19] http://www.mapinfo.com/, MapXtreme2004 Developer Guide.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về mạng lưới trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 63)

Tải bản đầy đủ (PDF)

(91 trang)