Với những yêu cầu ngày càng tăng trong xử lý thông tin địa lý cộng với mức độ phát triển của ngành đồ họa máy tính hiện nay có thể dễ dàng biểu diễn các hình ảnh ba chiều, khoa học thông
Trang 1ĐẠI HỌC BÁCH KHOA TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN
[\
Luận văn tốt nghiệp
XÂY DỰNG THƯ VIỆN PHẦN MỀM HỖ TRỢ
HỆ THỐNG THÔNG TIN ĐNA LÝ GIS 3D DỰA TRÊN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI
TƯỢNG BẰNG NGÔN NGỮ C++
Viên Vĩnh Mên Nguyễn Đăng Lữ Nguyễn Việt Hùng
Lý Thanh Xuân Huy
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
\[
Luận văn tốt nghiệp
XÂY DỰNG THƯ VIỆN PHẦN MỀM HỖ TRỢ
HỆ THỐNG THÔNG TIN ĐNA LÝ GIS 3D DỰA TRÊN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI
TƯỢNG BẰNG NGÔN NGỮ C++
Luận văn này nộp để hoàn tất chương trình kỹ sư của khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp Hồ Chí Minh
Hội đồng : Nguyễn Trung Trực
Nguyễn Ngô Bảo Trân
Trần Quang
Nguyễn Hữu Hải
SVTH : Lý Thanh Xuân Huy - 59800810
GVHD : Nguyễn Hữu Hải
GVPB : Nguyễn Ngô Bảo Trân
⎯ Tháng 01/2003 ⎯
Trang 3LỜI CAM ĐOAN
Chúng tôi cam đoan rằng, ngoại trừ các kết quả tham khảo từ các công trình khác như đã ghi rõ trong luận văn, các công việc trình bày trong luận văn này
là do chính chúng tôi thực hiện và chưa có phần nội dung nào của luận văn này được nộp để lấy bằng cấp ở trường này hoặc trường khác.
Trang 4LỜI CẢM ƠN
Sau quá trình học tập tại Trường Đại Học Bách Khoa, bằng sự nhiệt tình giảng dạy của mình, quý thầy cô đã truyền đạt cho chúng tôi những kiến thức vô cùng quý báu. Trong khoảng thời gian thực tập cũng như trong khoảng thời gian thực hiện bản luận văn này là cơ hội để chúng tôi có thể vận dụng những kiến thức đó vào thực tế nhằm nâng cao hiểu biết của mình và là hành trang
để không phải bỡ ngỡ khi ra trường. Bản luận văn này là kết quả của những kiến thức đó.
Trước hết chúng tôi xin chân thành cảm ơn các thầy cô Trường Đại Học Bách Khoa đã truyền đạt cho chúng tôi những kiến thức quý báu trong những năm học tập tại trường. Đặc biệt là thầy Nguyễn Hữu Hải, người đã trực tiếp hướng dẫn và nhiệt tình giúp đỡ để chúng tôi hoàn thành bản luận văn này. Thứ hai, chúng tôi xin chân thành cảm ơn gia đình và bạn bè, những người đã
hỗ trợ về mặt vật chất cũng như ủng hộ về mặt tinh thần để chúng tôi hoàn thành bản luận văn này.
Sau cùng, chúng tôi xin chúc quý thầy cô cùng gia đình, bạn bè được dồi dào sức khỏe và hoàn thành tốt công tác của mình.
Tp.Hồ Chí Minh, ngày 09 tháng 01 năm 2003.
Nhóm sinh viên thực hiện
Lý Thanh Xuân Huy Nguyễn Việt Hùng Nguyễn Đăng Lữ Viên Vĩnh Mên
Trang 5TÓM TẮT
Nội dung chính của đề tài là xây dựng thư viện với ba chức năng chính : lưu trữ – tính toán – trình diễn các đối tượng địa hình dưới dạng lưới tam giác không đều (Triangulared Irrergular Network) gọi là Thư viện Tính toán và Trình diễn Lưới tam giác không đều.
Thư viện này bao gồm ba tầng: tầng cơ sở dữ liệu – database manipulation layer (tầng DML) , tầng giải thuật – algorithms layer và tầng trình diễn – presetation layer.
Tầng DML cung cấp khả năng lưu trữ các đối tượng không gian dựa trên nền tảng cơ sở dữ liệu hướng đối tượng của ODBMS Versant 6.0. Cung cấp tập các hàm giao tiếp lập trình ứng dụng (API) cho phép truy xuất đến các đối tượng này.
Tầng AL bao gồm các thuật toán, giải thuật cho một số bài toán trên địa hình như: khoảng cách từ hai điểm trên bề mặt, khả năng nhìn thấy từ điểm này đến điểm khác theo đường thẳng hay theo các đường gấp khúc…Các giải thuật này cũng được đóng gói thành các hàm API đưa ra cho người dùng. Tầng PL cung cấp khả năng vẽ lưới tam giác lên màn hình dựa vào công cụ OpenGL. Ngoài ra, tầng PL còn cung cấp khả năng tương tác trực tiếp với các đối tượng không gian qua giao diện người dùng đồ họa (GUI).
Trang 6MỤC LỤC
LỜI CAM ĐOAN
LỜI CẢM ƠN
TÓM TẮT
MỤC LỤC
DANH MỤC HÌNH
GIỚI THIỆU
CHƯƠNG 1 : PHẦN TÍCH ĐỀ TÀI 2
I B ỐI CẢNH CỦA ĐỀ TÀI 2
I.1 Bối cảnh 2
I.2 Mô tả sơ lược đề tài 3
II MỤC TIÊU CỦA ĐỀ TÀI: 4
III KIẾN TRÚC THƯ VIỆN 4
III.1 Tầng DML 5
III.2 Tầng AL 5
III.3 Tầng PL 5
III.4 Ưu điểm của cách hiện thực đa tầng: 5
III.5 Khuyết điểm của cách hiện thực đa tầng: 5
IV L ƯU TR Ữ TIN 5
IV.1 Giới thiệu 5
IV.2 Lưu trữ TIN 6
IV.3 Giới thiệu về một số phép toán trên TIN: 8
IV.3.1 Tính diện tích TIN, thể tích TIN 8
IV.3.2 Tính độ dốc của bề mặt 8
IV.3.3 Xác định độ cao của một điểm khi biết tọa độ x và y của điểm đó 8
IV.3.4 Xác định M(xM, yM, zM) có thuộc bề mặt TIN hay không? 9
IV.3.5 Từ một điểm C(xC, yC, zC) cho trước, hãy xác định phần bề mặt của TIN xung quanh điểm C trong vòng bán kính R>0 theo phương ngang 9
IV.3.6 Tính khoảng cách địa hình 9
IV.3.7 Cắt TIN bằng mặt phẳng bất kỳ 9
IV.3.8 Tính diện tích của mặt cắt 9
IV.3.9 Tính khả kiến trên TIN 10
IV.3.10 Chuyển đổi sang ma trận độ cao 10
IV.3.11 Truy vấn dữ liệu trên TIN 10
V CƠ S Ở D Ữ LI Ệ U HƯ Ớ NG Đ Ố I TƯ Ợ NG – CHU Ẩ N ODMG 10
V.1 Chuẩn ODMG 10
V.1.1 Giới thiệu 10
V.1.2 Kiến trúc của ODBMS theo chuNn ODMG 11
V.2 So sánh giữa ODB và RDB 16
VI K Ế T Q U Ả MON G Đ Ợ I T Ừ Đ Ề T ÀI 17
VII CÁC KIẾN THỨC VÀ KỸ THUẬT CHÍN H SỬ DỤN G TRON G ĐỀ TÀI 17
CHƯƠNG 2 : TẦNG CƠ SỞ DỮ LIỆU DATABASE MANIPULATION LAYER 19
I VERSAN T 19
I.1 Versant và chuẩn ODMG 19
I.2 CDSL đối tượng trong Versant 19
I.2.1 Các bước xây dựng các lớp CSDL trên Versant 20
I.2.2 Đối tượng trong Versant 21
II C ÁC L ỚP CỦA THƯ VIỆN GTIN 21
II.1 Xây dựng ERD 21
II.2 Hiện thực các lớp C++ 22
II.2.1 Lược đồ lớp 22
II.2.2 Tính toàn vẹn dữ liệu trong CSDL của TIN 23
II.2.3 Interface của các lớp persistent 24
Trang 7II.3 Tạo và nạp lược đồ CSDL 26
III HỆ TỌA ĐỘ ÁN H XẠ 26
III.1 Tại sao có hệ tọa độ ánh xạ? 26
III.2 Các phép ánh xạ 26
III.2.1 Các phép ánh xạ 27
III.2.2 Công thức đổi tọa độ thực sang tọa độ ánh xạ và ngược lại 27
III.3 Sử dụng các phép ánh xạ 28
IV TRUY VẤN CÁC Đ ỐI TƯỢN G KHÔN G GIAN 28
IV.1 Các loại câu truy vấn thường dùng trong dữ liệu không gian 28
IV.2 Truy vấn trong Versant 28
IV.3 Chỉ mục cho đối tượng đa chiều - họ cây R 30
IV.3.1 Giới thiệu 30
IV.3.2 Họ cây R-Tree 30
IV.3.3 Chỉ mục trong cơ sở dữ liệu 33
IV.3.4 Áp dụng cây G-Tree trong giải quyết các yêu cầu truy vấn 34
V SƠ KẾT TẦN G DML 34
CHƯƠNG 3 : TẦNG THUẬT TOÁN – ALGORITHM LAYER 36
I TẦ N G THU Ậ T TO Á N 36
I.1 Lớp coordinate 36
I.2 Lớp CTinPlane 36
I.3 Lớp Vector3D 37
I.4 Lớp CTinQuery 37
I.5 Lớp TinUtils 38
II MỘT SỐ THUẬT TOÁN TRÊN TIN 38
II.1 Giao TIN với một mặt phẳng cho trước 38
II.1.1 Phân tích bài toán: 38
II.1.2 Giải thuật: 38
II.2 Tính diện tích mặt cắt của TIN với mặt phẳng 41
II.2.1 Phân tích yêu cầu: 41
II.3 Tính diện tích và thể tích TIN 45
II.3.1 Phân tích yêu cầu: 45
II.4 Tính độ dốc của bề mặt TIN 46
II.5 Xác định độ cao của một điểm khi biết tọa độ x và y của điểm đó 46
II.6 Xác định M(x M , y M , z M ) có thuộc bề mặt TIN hay không? 47
II.7 Từ một điểm C(x C, y C, z C ) cho trước, hãy xác định phần bề mặt của TIN xung quanh điểm C trong vòng bán kính R>0 theo phương ngang 47
II.8 Ma trận độ cao 47
II.8.1 Phân tích yêu cầu: 47
II.8.2 Giải thuật: 48
II.8.3 Phục hồi TIN từ ma trận độ cao 48
II.9 Tính khả kiến từ A đến B 49
II.9.1 Phân tích giải thuật: 49
II.9.2 Giải thuật A nhìn B theo đường thẳng: 49
II.9.3 Giải thuật A nhìn B theo đường bất kỳ: 50
II.10 Khoảng cách giữa hai điểm trên Tin 51
II.10.1 Phân tích yêu cầu: 51
II.10.2 Giải thuật: 51
II.11 Truy xuất dữ liệu TIN từ file 52
CHƯƠNG 4 : VẼ LƯỚI TAM GIÁC & TƯƠNG TÁC NGƯỜI DÙNG -TẦNG RESENTATION 54
I CÔN G CỤ VẼ 54
II VẼ LƯỚI TAM GIÁC 54
II.1 Các hệ tọa độ trong lập trình đồ họa 54
II.2 Vẽ Tin lên màn hình 55
III CÁC YÊU CẦU TƯƠN G TÁC VỚI N GƯỜI DÙN G 56
III.1 Yêu cầu về tương tác với người dùng 56
III.2 Quan sát các đối tượng không gian dưới các góc độ 56
III.3 Chọn đối tượng 3D bằng mouse 57
III.4 Kéo-thả (drag-and-drop) các đối tượng 3D 59
III.5 Sơ kết 59
IV ĐIỀU KHIỂN WORLD3D 60
Trang 8IV.1.1 Tương tác người dùng 60
IV.1.2 World3D là một điều khiển hoạt động độc lập và hoàn chỉnh 60
IV.1.3 Khả năng hoạt động trên nhiều database 61
IV.1.4 World3D là một kiến trúc mở 61
IV.1.5 Undo buffer 62
IV.2 Kiến trúc điều khiển World3D 62
IV.2.1 Các đối tượng trong World3D 63
IV.2.2 Các bộ điều hợp 64
IV.3 Xử lý biến cố trong World3D 64
IV.3.1 Trình xử lý biến cố Mouse 64
IV.3.2 Trình xử lý thông điệp WM_PAIN T 67
CHƯƠNG 5 : ĐỐI TƯỢNG COM CỦA TẦNG DML VÀ AL 68
I GIỚI THIỆU VỀ COM : 68
II KIẾN TRÚC CỦA COM : 69
II.1 COM Interfaces : 69
II.1.1 Interface Marshaling: 69
II.1.2 Các Interface cơ bản của COM : 70
II.1.3 COM Threading Model : 71
CHƯƠNG 6 : CHƯƠNG TRÌNH DEMO TÍNH THỂ TÍCH CẦN ĐÀO, ĐẮP CỦA ĐOẠN ĐƯỜNG 74 I GIỚI THIỆU 74 U I.1 Đặt vấn đề 74
I.2 Mô tả ứng dụng 74
I.3 Mục tiêu 74
II HIỆN THỰC ỨN G DỤN G 75
II.1 Các giải thuật để giải quyết 75
II.2 Xây dựng mặt đường từ trục AB và bề rộng delta 75
II.3 Cắt tam giác bằng 4 mặt phẳng của hình hộp bao con đường 76
II.4 Tính thể tích đào, thể tích đắp, thể tích khoan 76
II.5 Lưu trữ và truy xuất con đường bằng file 77
II.6 Kiến trúc ứng dụng 78
II.7 Nhập dữ liệu vào chương trình 79
II.8 Giao diện 80
III CÁCH SỬ DỤN G 80
CHƯƠNG 7 : TỔNG KẾT VÀ ĐÁNH GIÁ ĐỀ TÀI 82
I KẾT QUẢ ĐẠT ĐƯỢC 82
II Ý N GHĨA THỰC TIỄN CỦA THƯ VIỆN 83
III HƯỚN G MỞ RỘN G ĐỀ TÀI 83
TÀI LIỆU THAM KHẢO 84
PHỤ LỤC A: HƯỚNG DẪN SỬ DỤNG DML API 85
Trang 9DANH MỤC HÌNH
Hình 1-1 Lưới đa giác đều 3
Hình 1-2 Mô hình độ cao (DEM) 3
Hình 1-3 Vị trí của đề tài 4
Hình 1-4 Kiến trúc thư viện 4
Hình 1-5 Biểu diễn Lưới tam giác không đều (TIN ) 6
Hình 1-6 Quan hệ giữa các lớp đối tượng 8
Hình 1-7 Giao tuyến đa giác 9
Hình 1-8 Giao tuyến là polyline 9
Hình 1-9 Mô hình ma trận độ cao 10
Hình 1-10 Truyền thông điệp giữa các đối tượng 12
Hình 1-11 So sánh giữa ODB và RDB 16
Hình 2-1 Lược đồ các thực thể cơ bản của Tin 22
Hình 2-2 Lược đồ lớp 23
Hình 2-3 Sơ đồ Mapped Coordinate System 27
Hình 2-4 Cấu trúc của X-Tree 32
Hình 3-1 Trường hợp mp α cắt khối hộp bao tin tại 4 điểm A,B,C,D 38
Hình 3-2 Hai trường hợp của mặt phẳng chính 40
Hình 3-3 Xác định E và F 40
Hình 3-4 Giao tuyến là một đa giác 41
Hình 3-5 Giao tuyến là một polylines 42
Hình 3-6 Diện tích tam giác ABC 42
Hình 3-7 Đa giác bậc n 43
Hình 3-8 Ma trận dộ cao 47
Hình 3-9 Tinh toán độ cao cho ma trận độ cao 48
Hình 3-10 Phục hồi TIN từ ma trận độ cao 48
Hình 3-11 A nhìn thấy B theo đường thẳng 49
Hình 3-12 Minimum Bounding Region 50
Hình 3-13 Khoảng cách từ điểm đến đoạn 50
Hình 3-14 Tính khả kiến theo theo nhiều đoạn thẳng 51
Hình 3-15 Khoảng cách giữa A, B trên Tin 51
Hình 4-1 Hệ tọa độ bàn tay trái và bàn tay phải 55
Hình 4-2 Camera trong OpenGL 57
Hình 4-3 Kiến trúc World3D 62
Hình 4-4 Lưu đồxử l ý event MouseDown của World3D (a) và WorldObject (b) 65
Hình 4-5 Trình xử lý biến bố MouseDown của TWorldTin 65
Hình 4-6 Lưu đồ xử lý event MouseMove (a) và MouseTimer (b) 66
Hình 4-7 Lưu đồ xử lý biến cố MouseMove cho WorldObject 66
Hình 4-8 Lưu đồ xử lý biến cố WM_PAIN T 67
Hình 5-1 Sơ đồ liên kết động đến COM Object 68
Hình 5-2 Sơ đồ cấu trúc của IUnknown interface 71
Hình 6-1 Đoạn đường qua hai điềm A, B 74
Hình 6-2 Các tam giác được chọn để tính toán 75
Hình 6-3.1 Kiến trúc ứng dụng 78
Hình 6-4 Cấu trúc dữ liệu lưu trữ con đường 79
Hình 6-5 Giao diện chương trình Road Computation 80
Trang 10GIỚI THIỆU
Trong xã hội thông tin, thông tin địa lý chiếm một vai trò hết sức quan trọng. Thực vậy, khi cung cấp thông tin về một sự vật, sự việc hay hiện tượng gì, người ta luôn phải đề cập đến sự vật, sự việc hay hiện tượng này diễn ra ở đâu, khi nào. Đó chính là các thông tin địa lý (geographic information).
Thật sự là từ lâu, việc thu thập và xử lý các thông tin địa lý đã được chú ý đến
mà cơ bản nhất là ngành khoa học bản đồ. Việc nghiên cứu, xây dựng ra các bản đồ đã góp phần quan trọng trong sự phát triển kinh tế cũng như trong đời sống xã hội. Ngày nay, vấn đề xử lý các thông tin địa lý ngày càng phát triển trở thành hệ thống thông tin địa lý ( Geographic Information System – GIS). GIS đã và đang được ứng dụng ngày một rộng rãi trong rất nhiều lĩnh vực. Từ những ứng dụng truyền thống về bản đồ địa hình, tài nguyên, môi trường, GIS đã thâm nhập vào các lĩnh vực khác liên quan đến con người, quy hoạch
và quản lý đô thị, quản lý cơ sở kỹ thuật hạ tầng, kinh tế, xã hội…
Với những ứng dụng ngày càng rộng rãi hệ thống thông tin địa lý trong các lĩnh vực kinh tế, xã hộ, từ năm 1992, các nhà khoa học Hoa Kỳ đã xác lập một ngành khoa học mới, Khoa học thông tin địa lý – GIS (Geographic Informatin Science). Đến nay, ngành khoa học này đang từng bước hoàn thiện các mô hình biểu diễn các đối tượng một cách trung thực hơn. Do đó, các mô hình này khác với các mô hình của ngành bản đồ học, mặc dù trong giai đoạn hiện nay, khoa học thông tin địa lý vẫn còn sử dụng phương pháp bản đồ để xác định vị trí của các đối tượng, các hoạt động, các sự kiện trong không gian.
Ban đầu, các GIS được xây dựng dựa trên mô hình hóa các đối tượng không gian từ thế giới thực sang mặt phẳng hai chiều (2D). Khoa học thông tin địa lý 2D đã được nghiên cứu trong một thời gian khá lâu và đã có rất nhiều ứng dụng dựa trên nền tảng 2D. Các ứng dụng này ngày nay vẫn còn được sử dụng rộng rãi trong thực tế. Tuy nhiên, để biểu diễn các đối tượng không gian
ba chiều (3D), người ta đã dùng các ký hiệu (màu sắc, đường đồng mức…) để biểu diễn chiều không gian thứ ba của đối tượng lên mặt phẳng hai chiều. Điều này làm phức tạp bản đồ biểu diễn các đối tượng. Mặt khác, phương thức biểu diễn này không tạo được tính trực quan đối với người dùng, rất khó khăn trong việc mô phỏng trên máy tính.
Với những yêu cầu ngày càng tăng trong xử lý thông tin địa lý cộng với mức
độ phát triển của ngành đồ họa máy tính hiện nay có thể dễ dàng biểu diễn các hình ảnh ba chiều, khoa học thông tin địa lý ba chiều đã được phát triển để biểu diễn các đối tượng một cách trung thực hơn. Do việc thể hiện các đối tượng không gian một cách trung thực và trực qua hơn, mặc dù ra đời không lâu, GIS 3D đã có khá nhiều ứng dụng trong thực tế và đang từng bước thay
Trang 11Hiện nay, ở nước ta, việc triển khai các ứng dụng GIS 2D không còn là một vấn đề mới mẽ nữa. Tuy nhiên đối với các ứng dụng GIS 3D thì thật sự còn rất
ít. Một trong những nguyên nhân đó là do sự thiếu thốn về mặc công cụ hỗ trợ GIS 3D. Do đó, để có thể theo kịp sự phát triển của công nghệ, chúng ta cần phải xây dựng ngay nền tảng các công cụ hỗ trợ GIS 3D, nhằm từng bước đưa thay thế các ứng dụng 2D trước đây.
Từ yêu cầu đó, chúng tôi đã nhận và nghiên cúu đề tài Xây dựng thư việc hỗ trợ cho việc lập trình các ứng dụng GIS 3D dựa trên mô hình Lưới tam giác không đều. Hi vọng rằng kết quả của chúng tôi có thể làm tiền đề cho các đề tài sau nghiên cứu sâu hơn nữa trong việc xây dựng các công cụ, ứng dụng GIS 3D vào trong thực tiễn.
Trong phạm vi thời gian hoàn tất bản luận án này, chúng tôi không có điều kiện để nghiên cứu kỹ lưỡng hơn, cho nên kết quả đạt đuợc còn hạn chế và có thể có nhiều sai sót. Rất mong quý thầy cô và các bạn bỏ qua, đồng thời đóng góp ý kiến để thư viện ngày càng hoàn chỉnh hơn.
TP. Hỗ Chí Minh, ngày 09 tháng 01 năm 2003.
Nhóm sinh viên thực hiện.
Trang 12
PH ÂN TÍ CH ĐỀ TÀ I
Trang 13Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
I BỐI CẢNH CỦA ĐỀ TÀI
I.1 Bối cảnh
Hệ thống thông tin địa lý (Geographic Information System) là hệ thống thông tin dựa
trên cơ sở tính toán của máy tính GIS ngày càng phát triển mạnh mẽ dựa trên nền tảng
sự tiến bộ không ngừng của khoa học máy tính, đồ họa máy tính, phân tích và quản lý
dữ liệu không gian…
GIS là một hệ thống được kiến trúc từ các thành phần cơ bản sau đây: phần cứng, phần
mềm, cơ sở dữ liệu và người dùng Các thành phần này có quan hệ mật thiết với nhau,
tác động qua lại lẫn nhau Trong đó, người dùng là nhân tố thực hiện các thao tác điều
hành sự hoạt động của hệ thống GIS Các thông tin về sự vật hiện tượng từ thế giới
thực được đo đạc, số hóa bằng các thiết bị phần cứng Các số liệu này được hệ thống
GIS mô hình thành các đối tượng dữ liệu và lưu xuống cơ sở dữ liệu để quản lý Cơ sở
dữ liệu là thành phần trung tâm của hệ thống GIS Phần mềm sẽ thao tác trên cơ sở dữ
liệu để tính toán, phân tích rồi xuất kết quả ra cho người dùng đánh giá và hỗ trợ người
dùng ra quyết định N gười dùng sau đó sử dụng các kết quả này để tác động một cách
hợp lý lên thế giới thực nhằm đạt được mục tiêu đã đề ra Việc tác động của caon
người lên thế giới thực làm phát sinh ra những thông tin mới cần được đưa vào cơ sở
dữ liệu cho GIS quản lý Cứ như thế tạo thành một vòng tròn khép kín các mội quan
hệ giữa các thành phần trong hệ thống GIS
GIS hỗ trợ con người trong việc thu thập dữ liệu, làm mô hình, thao tác, phục hồi,
phân tích và biểu diễn các dữ liệu địa lý Từ đó, GIS trở thành công cụ hữu hiệu trong
công tác quản lý và hỗ trợ tích cực cho việc ra quyết định của con người
Việc nghiên cứu GIS đã mở ra nhiều thách thức thú vị mới trong nhiều lĩnh vực như:
lĩnh vực địa lý, lĩnh vực nghiên cứu bản đồ, lĩnh vực dò tìm từ xa, lĩnh vực xử lý ảnh,
ngành khoa học môi trường và ngành khoa học máy tính…
Hiện nay, GIS thường được quản lý dưới dạng mô hình 2D trong khi các mô hình thế
giới thực là 3D Để có thể biểu diễn được chiều thứ ba của địa hình người ta dùng các
ký hiệu như: màu sắc, các đường đồng mức, các chú thích bản đồ… Kết quả dẫn đến
là việc thể hiện địa hình lên trở nên phức tạp nhưng không thể biểu diễn được chi tiết
bề mặt các địa hình, không trực quan, gây khó khăn trong việc quản lý, phân tích và
đánh giá các đối tượng GIS Các ứng dụng mô tả đối tượng trên 2D hiện không thể
đáp ứng với các yêu cầu ngày càng cao về các thông tin địa lý Chính vì điều này đã
hạn chế nhiều khả năng của GIS trong việc phản ánh thế giới thực Đồng thời, tạo ra
nhu cầu cần một thư viện hỗ trợ cho việc xây dựng các mô hình GIS 3D nhằm đáp ứng
cho nhiều bài toán thực tế Xuất phát từ nhu cầu đó, tập luận văn này tập trung nghiên
cứu nhằm xây dựng một thư viện phần mềm để hỗ trợ hệ thống thông tin địa lý 3D dựa
trên cơ sở dữ liệu hướng đối tượng bằng ngôn ngữ C++
Xuất phát từ mục tiêu chính của đề tài, người sử dụng chính của thư viện này là các
lập trình viên Do đó về mặt tương tác với người dùng cuối (end-user) còn rất nhiều
hạn chế, nhất là việc kiểm tra tính hợp lệ của dữ liệu vào đôi khi đòi hỏi người dùng
phải có sự đảm bảo sự chính xác của các dữ liệu
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 2
Trang 14I.2 Mô tả sơ lược đề tài
Đối tượng không gian chính được quan tâm trong đề tài là địa hình Địa hình thực tế là
một bề mặt bất kỳ, liên tục Do đó để lưu trữ thông tin về địa hình, trước hết ta cần
phải số hóa các bề mặt này Hiện tại có nhiều phương pháp để số hóa các thông tin địa
hình Trong phạm vi đề tài, chúng tôi chỉ tập trung chủ yếu vào phương pháp lưới tam
giác không đều ( Triangulated Irregular N etwork – TIN ) và một phần nhỏ đến mô
hình độ cao ( Digital Elevation Model – DEM )
Do địa hình là một mặt liên tục bất kỳ nên ta có thể phân tích một cách gần đúng bề
mặt này thành vô số các đa giác nhỏ nối kết nhau ( Tesselation ) ( cũng như việc xem
đường tròn là một đa giác đều có số cạnh rất lớn ) Do bề mặt là bất kỳ nên các đa giác
này khó có thể là các đa giác đều mà chúng là những đa giác bất kỳ có số cạnh khác
nhau Việc lưu trữ và xử lý các đa giác này vô cùng phức tạp, do đó người ta chia các
đa giác bất kỳ này thành nhiều tam giác nối liền nhau Ta hoàn toàn có thể xây dựng
được giải thuật phân tích một đa giác bất kỳ thành tập các tam giác không phủ lấp lên
nhau (giải thuật Delaunay, bản đồ Voronoi ) Vì vậy, để lưu trữ các bề mặt của địa
hình, ta ghép chúng thành một tập các tam giác không phủ lắp lên nhau vào liền kề
nhau Tập các tam giác này tạo thành một lưới các tam giác nối liên tục nhau Đó
chính là mô hình Lưới tam giác không đều – TIN được dùng để lưu trữ các bề mặt của
địa hình
Hình 1-1 Lưới đa giác đều
N goài ra, người ta còn lưu trữ địa hình dưới dạng mô hình độ cao hay còn gọi là ma
trận độ cao Ta có thể hình dung ma trận độ cao như sau : đầu tiên ta chia bề mặt địa
hình thành nhiều ô nhỏ hình chữ nhật có kích thuớc đều nhau Sau đó tại mỗi đỉnh của
hình chữ nhật này ta xác định độ cao của của địa hình theo một cột mốc đã chọn Ta
lưu các giá trị này thành một ma trận hai chiều, gọi là ma trận độ cao của địa hình
Hình 1-2 Mô hình độ cao (DEM)
Tuy nhiên, như đã trình bày ở trên, vị trí của thư viện là xử lý trên các dữ liệu đã được
thu thập từ các nguồn dưới dạng mạng lưới các tam giác không đều Do đó ta chỉ cần
lưu trữ lưới các tam giác này
Trang 15Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
N hư vậy, vị trí của đề tài luận văn này được thể hiện trên hình sau:
Hình 1-3 Vị trí của đề tài
II MỤC TIÊU CỦA ĐỀ TÀI:
Biểu diễn bề mặt địa hình bằng lưới tam giác không đều (TIN )
Lưu trữ TIN trên cơ sở dữ liệu hướng đối tượng
Thực hiện các phép toán cơ bản trên TIN
Tạo thư viện GTIN hỗ trợ trực quan cho người dùng
Tạo một ứng dụng Demo
III KIẾN TRÚC THƯ VIỆN
Kiến trúc của thư viện GTIN được biểu diễn bằng hình:
Hình 1-4 Kiến trúc thư viện
Thư viện GTIN hỗ trợ việc lưu trữ các đối tượng GIS 3D dưới dạng lưới tam giác
không đều, đồng thời cung cấp các phép toán cần thiết để thao tác trên lưới tam giác
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 4
Trang 16không đều này Thư viện GTIN được phát triển dựa trên hệ cơ sở dữ liệu ODBMS
Versant
Về mặt kiến trúc tổng quát, thư viện GTIN bao gồm 3 tầng độc lập nhau: tầng DML
(Database Manipulation Layer), tầng AL (Algorithm Layer) và tầng PL (Presentation
Layer)
III.1 Tầng DML
Tầng DML có nhiệm vụ quản lý cơ sở dữ liệu Tầng DML bao gồm: các lớp lược đồ
cơ sở dữ liệu (Database Schema Classes) Các lớp lược đồ cơ sở dữ liệu là các lớp
được kế thừa từ các lớp chuNn của ODBMS Versant (PObject, PVirtual…) Do đó, để
biên dịch tầng DML thì trình biên dịch phải được Versant hỗ trợ (Visual C++, Java)
Tầng DML cung cấp giao diện ra ngoài thông qua các hàm Database Manipulation
APIs Các tầng bên trên sẽ sử dụng các hàm Database Manipulation APIs này để truy
xuất cơ sở dữ liệu
III.2 Tầng AL
Tầng AL có nhiệm vụ hiện thực các giải thuật, tính toán trên TIN Các lớp ở tầng AL
này đã tách biệt độc lập với thư viện hỗ trợ lập trình của Versant Do đó, chúng ta có
thể hiện thực tầng AL bằng các ngôn ngữ lập trình khác nhau (C++ Builder, Visual
C++, C#) N ghĩa là trong quá trình biên dịch tầng AL, các file header của Versant
không bị buộc phải có
Tầng AL sử dụng các hàm Database Manipulation APIs do tầng DML cung cấp để
truy xuất cơ sở dữ liệu nhằm phục vụ cho hiện thực giải thuật Tầng AL cung cấp giao
diện ra ngoài thông qua các hàm Computation APIs
III.3 Tầng PL
Tầng PL có nhiệm vụ hiển thị TIN dùng để mô phỏng các phép toán cơ bản, cho phép
người dùng thao tác trực quan trên TIN như thao tác bằng chuột, kéo, xoay camera,
phóng đại…
III.4 Ưu điểm của cách hiện thực đa tầng:
Thể hiện tính độc lập cao giữa các tầng
Thể hiện tính uyển chuyển trong việc chọn lựa ngôn ngữ lập trình để hiện thực
Tăng tính thân thiện đối với người sử dụng
Là tiền đề để xây dựng một thư viện hỗ trợ cho nhiều ngôn ngữ
III.5 Khuyết điểm của cách hiện thực đa tầng:
Có sự trùng lắp giữa các tầng
Do phải qua nhiều tầng nên thời gian xử lý sẽ tăng, làm chương trình thực thi chậm
hơn
IV LƯU TRỮ TIN
IV.1 Giới thiệu
TIN được dùng để biểu diễn một bề mặt từ một tập các điểm rời rạc Từ tập các điểm
rời rạc này chúng ta sẽ kết hợp chúng lại thành các tam giác không trùng lắp với nhau
Do tính chất của các tam giác không đều mà TIN có thể biểu diễn một bề mặt bất kỳ,
Trang 17Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
với độ phân giải bất kỳ Điều này đặc biệt có ích để biểu diễn bề mặt của Trái đất Bản
thân TIN có khả năng biểu diễn bề mặt bằng tam giác không đều và không theo thứ tự
Hình 1-5 Biểu diễn Lưới tam giác không đều (TIN)
IV.2 Lưu trữ TIN
N hìn chung, có thể lưu trữ TIN theo nhiều cách khá nhau như: dựa trên cơ sở tam giác
(triangle_based), dựa trên cơ sở đỉnh (node_based), dựa trên cơ sở cạnh (side_based)
hoặc kết hợp các cách trên
Đối với bài toán liên quan đến đường đồng mức (conturing) thì cách lưu trữ dựa trên
cơ sở cạnh thích hợp hơn
Đối với bài toán liên quan đến tính độ dốc (slope), thể tích thì cách lưu trữ dựa trên
tam giác tỏ ra thích hợp hơn
Thật sự rất khó để có thể có cách lưu trữ TIN nào thích hợp cho mọi ứng dụng Trong
những trường hợp cụ thể chúng ta cần có những thủ tục để có thể chuyển đổi từ cấu
trúc lưu trữ này sang cấu trúc cách lưu trữ khác
Có thể lưu trữ TIN theo 2 phương án sau:
1 Lưu trữ các tam giác kề nhau: một tam giác gồm 3 cạnh của nó (mỗi cạnh gồm
2 đỉnh không trùng nhau) và các tham khảo đến các tam giác kề của nó Ưu
điểm của phương án này là có thể truy xuất nhanh được các tam giác kề, dễ
dàng lan nhanh theo các tam giác xung quanh Khuyết điểm của phương án này
là phải lưu nhiều lần các tam giác kề N ghĩa là một tam giác có nhiều tam giác
kề, nó tham khảo đến các tam giác xung quanh và các tam giác xung quanh
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 6
Trang 18cũng có tham khảo đến nó Mặt khác, mỗi tam giác có số lượng các tam giác
kề khác nhau, điều này gây khó khăn cho việc lưu trữ
2 Lưu trữ tập đỉnh và tập tam giác: mỗi đỉnh tham khảo đến các tam giác chứa
nó N gược lại mỗi tam giác sẽ có 3 tham khảo đến 3 đỉnh của nó Ưu điểm của
phương án này là tính tự nhiên, dễ dàng quản lý
Trong luận văn này, chúng ta chọn cách lưu trữ thứ hai
Tam giác Các tham khảo đến đỉnh
Bảng 1-1 Các tam giác trong TIN
Đỉnh Các tham khảo đến tam giác
Trang 19Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
Hình 1-6 Quan hệ giữa các lớp đối tượng
CTinObject là lớp kế thừa từ lớp PVirtual chuNn của Versant CTinObject là lớp gốc
của các lớp thường trú (được lưu xuống cơ sở dữ liệu): CTin, CTinTriangle,
CTinVertex
Một TIN bao gồm một tập các đỉnh và một tập các tam giác không trùng lắp lên nhau
Một đỉnh chỉ thuộc vào 1 TIN duy nhất, tuy nhiên đỉnh đó có thể thuộc về nhiều tam
giác khác nhau
Một tam giác chỉ thuộc về 1 TIN duy nhất, đồng thời tam giác đó cũng bao gồm 3 đỉnh
của nó
Mặt khác, để biểu diễn bề mặt địa hình thì đỉnh và tam giác ngoài các thuộc tính tọa độ
và các mối quan hệ cũng cần có thêm các thuộc tính khác như: màu sắc, màu tô…
IV.3 Giới thiệu về một số phép toán trên TIN:
IV.3.1 Tính diện tích TIN, thể tích TIN
Diện tích của TIN được dùng để tính diện tích bề mặt địa hình Diện tích của TIN
được xác định bằng tổng diện tích của các tam giác của TIN
Thể tích của TIN là thể tích của khối được xác định bởi: bề mặt TIN và mặt phẳng
ngang đi qua điểm thấp nhất của TIN
IV.3.2 Tính độ dốc của bề mặt
Độ dốc của một mặt tam giác là góc tạo bởi tam giác đó và mặt phẳng ngang
Độ dốc của một vùng là độ dốc trung bình của các tam giác trong vùng đó
Bài toán tính độ dốc chỉ có ý nghĩa khi bề mặt địa hình được tạo bởi các tam giác có
cùng tính chất: pháp vector cùng hướng về một phía
IV.3.3 Xác định độ cao của một điểm khi biết tọa độ x và y của điểm đó
Khi đã biết được vị trí 2D của một vị trí trên TIN , chúng ta cần xác định vị trí đó ở độ
cao bao nhiêu Đồng thời xác định điểm đó thuộc tam giác nào của TIN Bài toán này
có nghĩa khi chúng ta cần chuyển TIN sang ma trận độ cao
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 8
Trang 20Từ ma trận độ cao đã có chúng ta có thể chuyển ngược lại thành một TIN Do ma trận
độ cao đã rời rạc hóa TIN ban đầu nên TIN kết quả có thể không giống như TIN ban
đầu mà nó chỉ gần giống như TIN ban đầu
IV.3.4 Xác định M(x M , y M , z M ) có thuộc bề mặt TIN hay không?
Bài toán này có nghĩa để kiểm tra tính chính xác của dữ liệu N ếu M không thuộc bề
mặt TIN thì có thể dùng bài toán xác định độ cao của một điểm để hiệu chỉnh lại tọa
độ của M nhằm thỏa mãn yêu cầu
IV.3.5 Từ một điểm C(x C, y C, z C ) cho trước, hãy xác định phần bề mặt của TIN
xung quanh điểm C trong vòng bán kính R>0 theo phương ngang
Phương trình hình trụ tròn bán kính R có trục đi qua điểm C là:
R y
y x
x− C + − C =
N hững điểm trên TIN thỏa mãn bài toán là những điểm nằm bên trong hình trụ tròn
này
IV.3.6 Tính khoảng cách địa hình
Cho 2 điểm bất kỳ A và B trên TIN , tính quãng đường đi từ A đến B N ghĩa là, đi từ A
đến B theo bề mặt địa hình được biểu diễn bằng TIN
IV.3.7 Cắt TIN bằng mặt phẳng bất kỳ
Một mặt phẳng Alpha bất kỳ có phương trình Ax + By + Cz +D = 0 cắt TIN
IV.3.8 Tính diện tích của mặt cắt
Khi cắt TIN bằng mặt phẳng Alpha bất kỳ chúng ta thu được một danh sách các cạnh
giao tuyến
N ếu các cạnh giao tuyến này tạo thành một đa giác (polygon) thì tính diện tích của đa
giác này
Hình 1-7 Giao tuyến đa giác
N ếu các cạnh giao tuyến này là một chuỗi các cạnh liên tục thì tạo một đa giác bằng
cách nối hai đầu mút của chuỗi bởi cạnh ngang thấp nhất của TIN
Hình 1-8 Giao tuyến là polyline
Trang 21Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
IV.3.9 Tính khả kiến trên TIN
Cho 2 điểm bất kỳ A và B trong không gian, cần xác định A và B có nhìn thấy nhau
(khả kiến) theo đường thẳng hay không?
Cho 2 điểm bất kỳ A và B trong không gian, cần xác định A và B có nhìn thấy nhau
(khả kiến) theo đường cong bất kỳ hay không?
Cho một điểm S(xS, yS, zS) bất kỳ trong không gian, hãy tìm những đỉnh trên TIN trong
một region cho trước mà S có thể nhìn thấy
IV.3.10 Chuyển đổi sang ma trận độ cao
Ma trận độ cao là một cách biểu diễn khác cho bề mặt địa hình Trên thực tế, có rất
nhiều ứng dụng sử dụng ma trận độ cao để biểu diễn địa hình Do đó, để những ứng
dụng này có thể xử lý được các dữ liệu trên TIN thì chúng ta cần một phép chuyển đổi
phù hợp
Hình 1-9 Mô hình ma trận độ cao
IV.3.11 Truy vấn dữ liệu trên TIN
Truy vấn tập điểm, tam giác trong một vùng hộp cho trước
Truy vấn tập tam giác từ tập điểm cho trước
Truy vấn điểm, tam giác theo một điều kiện biết trước
Tạo chỉ mục cho dữ liệu không gian 3 chiều
V CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG – CHUẨN ODMG
V.1 Chuẩn ODMG
V.1.1 Giới thiệu
Mô hình dữ liệu là một tổ chức luận lý của các thực thể (entity) của một hệ thống, các
ràng buộc (contraint) lẫn nhau giữa các thực thể này và các mối quan hệ giữa chúng
Mô hình dữ liệu cung cấp một nền tảng lý thuyết để biểu diễn và xử lý dữ liệu Cơ sở
dữ liệu là một tập các dữ liệu kết dính và có tổ chức chặt chẽ Cơ sở dữ liệu được xây
dựng dựa trên một mô hình dữ liệu luận lý
Các mô hình cơ sở dữ liệu cổ điển như mô hình mạng, mô hình phân cấp, mô hình
quan hệ đã được đầu tư và phát triển lâu đời bởi vì mối quan tâm hàng đầu của các nhà
thiết kế ứng dụng là nhằm vào các ứng dụng xử lý dữ liệu trong kinh doanh như: kiểm
kê hàng hóa, bảng tính lương, kế toán, thuế… N hu cầu cần thiết để biểu diễn các loại
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 10
Trang 22dữ liệu phức tạp như: CAD, CAE, CASE, CAM, hệ tri thức cơ bản và hệ đa phương
tiện (multimedia) cho thấy sự hạn chế, không tương xứng của các mô hình dữ liệu cổ
điển này Một số điểm hạn chế thể hiện ở chỗ các mô hình cổ điển không cho phép các
cấu trúc lồng nhau của các thiết kế phức hợp, tính nhất quán ngữ nghĩa không được
ràng buộc chặt chẽ, không biểu diễn được các phiên bản (version) khác nhau của cơ sở
dữ liệu, không đóng gói được việc khai báo dữ liệu và thủ tục xử lý làm một thành
phần đơn vị mà dữ liệu và các thủ tục xử lý là hai phần tách rời nhau
Mô hình cơ sở dữ liệu hướng đối tượng được xây dựng để giải quyết các hạn chế của
các mô hình cơ sở dữ liệu cổ điển Sự kết hợp giữa công nghệ cơ sở dữ liệu có sẵn
cùng với các khái niệm hướng đối tượng mở ra khả năng mô hình hóa dữ liệu và ràng
buộc chặt chẽ tính nhất quán ngữ nghĩa đối với các dữ liệu hỗn hợp phức tạp Hơn
nữa, với sự phát triển mạnh mẽ của các ngôn ngữ lập trình hướng đối tượng đã tạo môi
trường tốt để nhiều hệ cơ sở dữ liệu hướng đối tượng đã được nghiên cứu và xuất hiện
trên thị trường như: Itasca (Orion), Gemstone, Iris, O2, Encore… Bên cạnh đó, nhóm
quản trị cơ sở dữ liệu đối tượng (Object Database Management Group) đề nghị một
chuNn cơ sở dữ liệu đối tượng ODMG-93 đặc tả các giao diện chung của cơ sở dữ liệu
hướng đối tượng và nhanh chóng trở thành chuNn của công nghiệp cơ sở dữ liệu hướng
đối tượng ODMG là một hệ quản trị cơ sở dữ liệu chuNn được nhiều nhà sản xuất sử
dụng để hỗ trợ cho người dùng Do đó, các hệ quản trị cơ sở dữ liệu xây dựng dựa trên
chuNn ODMG có thể dễ dàng tương tác với nhau thông qua OMG Object Request
Broker (ORB) – là một giao diện cho phép xây dựng các hệ client-server hướng đối
tượng ODMG định nghĩa các thuật ngữ, các nghi thức giao tiếp chung giữa các hệ cơ
sở dữ liệu và cung cấp các đặc tả cơ bản hỗ trợ cho các hệ quản trị cơ sở dữ liệu khả
năng chia xẻ dữ liệu, tính khả chuyển (portable) và một số phép truy vấn cơ bản
Bản luận văn này sẽ giới thiệu sơ lược về hệ quản trị cơ sở dữ liệu hướng đối tượng
ODMG 2.0 và hệ quản trị cơ sở dữ liệu hướng đối tượng Versant, một hệ quản trị cơ
sở dữ liệu hướng đối tượng phát triển dựa trên chuNn ODMG
V.1.2 Kiến trúc của ODBMS theo chuẩn ODMG
a Mô hình đối tượng (Object Model)
Trong cơ sở dữ liệu hướng đối tượng, thành phần cơ bản nhất là đối tượng (Object) và
hằng ký tự (Literal) Trong đó, mỗi đối tượng có một định danh (Identifier) duy nhất
Hằng ký tự không có định danh
Các đối tượng và các hằng ký tự được phân loại thành các kiểu (Type) khác nhau
N ghĩa là mỗi đối tượng hay mỗi hằng ký tự sẽ thuộc về một kiểu Một đối tượng là
một thực thể (instance) của kiểu của nó Mọi thực thể của cùng một kiểu sẽ có cùng
một tập các đặc tính (property) và các hành vi (behavior)
Trạng thái (state) của một đối tượng được xác định bởi tập các giá trị đặc tính của nó
Các đặc tính có thể là các thuộc tính (attribute) hoặc các mối quan hệ (relationship)
của bản thân đối tượng với các đối tuợng khác Trạng thái của đối tuợng có thể thay
đổi trong quá trình sống của nó
Hành vi của đối tượng được định nghĩa là các tác vụ (operation) có thể được thực hiện
trên đối tượng hoặc bởi đối tượng khi nó nhận được thông điệp (message) từ đối tượng
khác.Tùy theo trạng thái của mình mà đáp ứng của đối tượng đối với một thông điệp
có thể khác nhau ở các thời điểm khác nhau Mỗi tác vụ được xác định bằng chữ ký
(signature) của nó Một signature gồm danh sách thông số vào, danh sách thông số ra
và kiểu trả về
Trang 23Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
Hình 1-10 Truyền thông điệp giữa các đối tượng
Cơ sở dữ liệu dựa trên lược đồ cơ sở dữ liệu (Database Schema) đuợc định nghĩa bằng
ODL (Object Definition Language) để lưu trữ các đối tượng của các kiểu dữ liệu và
cho phép các ứng dụng truy xuất các đối tượng này Mô hình đối tượng của ứng dụng
chính là lược đồ cơ sở dữ liệu
N hững người phát triển ứng dụng sử dụng các thành phần cơ bản của mô hình dữ liệu
ODMG để xây dựng mô hình đối tượng cho ứng dụng của mình
b Cách đặc tả trên ODMG
Dựa trên mô hình đối tượng được giới thiệu ở trên, ODMG định nghĩa các khái niệm:
kiểu, đối tượng, literal, đặc tính, thuộc tính, tác vụ, mối quan hệ
Kiểu: Một kiểu bao gồm một đặc tả (specification) bên ngoài và một hoặc nhiều cách
hiện thực (implementation) bên trong Phần đặc tả định nghĩa những đặc trưng chung
bên ngoài của kiểu, định nghĩa giao diện (interface) cho kiểu N gười dùng có thể thấy
được những đặc tả này Phần hiện thực bao gồm một số dữ liệu biểu diễn và tập các
phương thức cho phép đọc, hiệu chỉnh các giá trị của tập dữ liệu biểu diễn Một kiểu
có thể có nhiều phần hiện thực
Quy mô (extent) của một kiểu là tập các đối tượng của kiểu đó trong một cơ sở dữ liệu
riêng biệt nào đó N ếu một đối tượng là một thực thể của kiểu A thì nó là một thành
viên của extent A N ếu kiểu A là con của kiểu B thì extent A là con của extent B
Extent có nhiệm vụ quản lý việc thêm hay xóa đối tượng của một kiểu
Khóa là các đặc tính của đối tượng xác định duy nhất đối tượng Khóa dùng để phân
biệt giữa các đối tượng
Đối tượng là một thực thể của một kiểu Mỗi đối tượng có một định danh (identifier)
duy nhất, giá trị của identifier không bao giờ thay đổi Mỗi đối tượng có một hoặc
nhiều tên và có một thời gian sống xác định Thời gian sống của đối tượng xác định bộ
nhớ sử dụng của đối tượng là thường trú (persistent) hay tạm trú (transient)
c Mô hình trạng thái và đặc tính
Một kiểu định nghĩa một tập các thuộc tính mà người dùng có thể truy xuất Có hai
loại đặc tính được định nghĩa trong mô hình đối tượng ODMG là: thuộc tính và mối
quan hệ giữa các đối tượng
d Mô hình hành vi và tác vụ
Hành vi của một kiểu đối tượng được đặc tả bằng các tác vụ mà đối tượng thuộc kiểu
đó thực hiện khi nhận một thông điệp từ một đối tượng khác
Mỗi tác vụ được phân biệt bằng chữ ký của nó Chữ ký của một tác vụ bao gồm: tên
tác vụ, tên và kiểu của mỗi thông số, kiểu của giá trị trả về, tên của các xử lý lỗi cho
tác vụ
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 12
Trang 24Giống như trong các ngôn ngữ lập trình hướng đối tượng, chuNn ODMG cho phép quá
tải (Overload) các tác vụ Các tác vụ có thể không có giá trị trả về (trả về kiểu void)
e Mô hình xử lý lỗi
ChuNn ODMG cung cấp việc xử lý lỗi lồng nhau Các tác vụ có thể ném (throw, raise)
các lỗi ra ngoài khi nó gặp sự cố Bản thân các xử lý lỗi cũng là các đối tượng Chúng
cũng có giao diện cho phép chúng ta thao tác Cách thức xử lý lỗi như sau:
Lập trình viên khai báo một xử lý lỗi trong tầm vực S có thể xử lý cho kiểu lỗi T
Một tác vụ trong tầm vực S có thể ném ra ngoài một lỗi kiểu T
Lỗi đó sẽ được bắt (catch) bởi tầm vực gần nhất chứa xử lý lỗi này
Khi xử lý lỗi đã bắt được lỗi, nó sẽ xử lý sự cố do lỗi này sinh ra nếu có thể N gược lại
nó sẽ ném tiếp một lỗi khác ra ngoài cho một xử lý lỗi khác bắt
Một xử lý lỗi được khai báo để xử lý cho các lỗi kiểu T thì nó cũng có thể xử lý các lỗi
có kiểu là con của kiểu T N ếu muốn xử lý chi tiết hơn cho các kiểu con của T thì lập
trình viên phải khai báo xử lý lỗi bên trong tầm vực của kiểu con này
f Ngôn ngữ định nghĩa đối tượng (Object Definition Language)
OSL (Object Specification Language) dùng để định nghĩa lược đồ (schema) lớp, các
tác vụ (operation) và các trạng thái của một đối tượng cơ sở dữ liệu Mục đích chính
của OSL là dùng để đáp ứng yêu cầu tăng tính khả chuyển (portability) của cơ sở dữ
liệu theo yêu cầu hiện thực của ODMG Một trong những OSL phỗ biến là ODL
(Object Definition Language) ODL là một ngôn ngữ đặc tả được dùng để định nghĩa
các đặc tả của kiểu đối tượng một cách phù hợp với mô hình đối tượng của ODMG
• ODL hỗ trợ tính khả chuyển của lược đồ cơ sở dữ liệu
• ODL hỗ trợ mọi cấu trúc ngữ nghĩa của mô hình đối tượng ODMG
• ODL là ngôn ngữ dùng để định nghĩa, đặc tả đối tượng dữ liệu ODL không
phải là ngôn ngữ lập trình
• ODL độc lập với ngôn ngữ lập trình
• ODL có tính mở rộng, vừa mở rộng các chức năng vừa có thể tối ưu trong
tương lai
Để hiểu rõ hơn về ODL, tham khảo ODMG 2.0
g Ngôn ngữ truy vấn đối tượng (Object Query Language)
OQL dựa trên mô hình đối tượng của ODMG
OQL khá gần gũi với SQL 92 Trong đó có mở rộng thêm một số khái niệm hướng đối
tượng
OQL không hỗ trợ việc tính toán OQL chỉ đơn giản là một ngôn ngữ truy vấn cung
cấp các tiện ích cơ bản để truy xuất đến một ODBMS
OQL có thể được kích hoạt từ bên trong ngôn ngữ lập trình tương thích với ODMG, ví
dụ như: C++, Java, SmallTalk N gược lại OQL cũng có thể kích hoạt các tác vụ được
lập trình bằng các ngôn ngữ lập trình này
h Phần liên kết với ngôn ngữ C++ (C++ Language Binding)
Phần liên kết với ngôn ngữ C++ sẽ ánh xạ mô hình đối tượng vào trong các lớp đối
tượng trong ngôn ngữ C++ bằng cách đưa ra khái niệm lớp mà các đối tượng của lớp
Trang 25Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
đó vừa có thể là đối tượng thường trú (persistent) vừa có thể là đối tượng tạm trú
(transient) được gọi là các lớp có khả năng thường trú (persistence capable classes)
Lớp các đối tuợng tạm trú là các đối tượng (instance) của nó chỉ tồn tại trong quá trình
(process) đã tạo ra nó Các đối tượng thuộc lớp tạm trú không được lưu xuống cơ sở
dữ liệu
Các đối tượng thường trú là các đối tượng được lưu xuống cơ sở dữ liệu N ghĩa là
chúng tồn tại ngay cả khi quá trình tạo ra nó đã kết thúc Giải pháp để thực hiện điều
này là cung cấp một kiểu con trỏ thông minh hoặc một tham khảo thông minh Đó là
N hững lớp đối tượng của lớp có khả năng thường trú có thể bao gồm những đối tượng
nhúng như: đối tượng được xây dựng sẵn của C++, đối tượng do người dùng định
nghĩa, con trỏ đến các đối tượng dữ liệu thường trú
Sự tương quan giữa mô hình đối tượng ODMG và mô hình đối tượng của ngôn
ngữ C++
Mô hình dữ liệu của ngôn ngữ C++ rất gần gũi với mô hình đối tượng ODMG
Một kiểu đối tuợng của ODMG được ánh xạ tương ứng với một lớp của C++ Tùy
theo cách khởi tạo của các lớp C++ mà kết quả có thể là một đối tuợng ODMG hay
hằng ký tự ODMG
Kiểu cấu trúc trong mô hình đối tượng ODMG được ánh xạ tương ứng với kiểu struct
trong ngôn ngữ C++
N gôn ngữ C++ chia việc định nghĩa một lớp đối tượng thành hai phần: phần giao diện
(public) và phần hiện thực bên trong (private, protected)
Các lớp tập hợp trong mô hình đối tượng ODMG tương ứng với các lớp đối tượng có
template trong ngôn ngữ C++
Mối quan hệ được định nghĩa trong mô hình đối tượng ODMG nhưng không được hỗ
trợ trực tiếp trong ngôn ngữ C++ Trong ngôn ngữ C++ mối quan hệ được định nghĩa
là những tham khảo giữa các đối tượng N ếu A có quan hệ 1-1 với B thì trong một đối
tượng kiểu A chứa một tham khảo đến một đối tượng kiểu B N ếu A có mối quan hệ
1-N với B thì trong một đối tượng kiểu A có chứa 1-N tham khảo đến 1-N đối tượng kiểu B
Ví dụ: trong một đỉnh có một tham khảo đến một TIN Trong một đỉnh có N tham
khảo đến N tam giác
N gôn ngữ C++ không hỗ trợ việc khai báo khóa (key) cho kiếu đối tượng
Một đối tượng có thể có nhiều tên khác nhau
C++ ODL là một thư viện cung cấp các khái niệm hiện thực tác vụ, lớp đối tượng theo
mô hình đối tượng ODMG C++ ODL dùng để mô tả lược đồ cơ sở dữ liệu cho các lớp
đối tượng: mô tả thuộc tính, mối quan hệ, tác vụ…
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 14
Trang 26class CTinVertex : public d_Object
d_Rel_Ref<CtinTriangle, ref_to> triangles;
d_Rel_Ref<CTin, belong_to> tin;
Khai báo các mối quan hệ: chúng ta biết rằng một đỉnh có quan hệ với nhiều tam giác,
đồng thời một tam giác cũng có quan hệ với 3 đỉnh của nó Cho nên cần có một liên
kết 2 chiều giữa đỉnh và tam giác, một chiều từ đỉnh đến tam giác và một chiều từ tam
giác đến đỉnh
Chúng ta sử dụng các kiểu khai báo sau:
d_Rel_Ref<T, const char*> cho mối quan hệ một
d_Rel_Set<T, const char*> cho mối quan hệ nhiều
d_Rel_List<T, const char*> cho mối quan hệ nhiều
Trong đó, T là một lớp thường trú và char* là tên của mối quan hệ đến lớp T
Trang 27Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
Ưu điểm của ODB:
• ODB thật sự hiệu quả đối với dữ liệu phức tạp như: multimedia, CAD, dữ liệu
không gian
• Tham khảo đến dữ liệu bằng định danh (identifier) của nó
• Hỗ trợ tính thừa kế
• Hỗ trợ các kiểu dữ liệu trừu tượng như: tính bao đóng (encapsulation), dữ liệu
có các hành vi (behavior) đối với các thông điệp từ bên ngoài thông qua các
phương thức của nó
• Có quan hệ gần gũi với ngôn ngữ lập trình hướng đối tượng
Khuyết điểm của ODB:
• Là một DBMS mới mẽ, còn rất non trẻ (khởi đầu từ thập niên 80)
• Hỗ trợ tương đối yếu trong vấn đề truy vấn dữ liệu so với RDB
• Hỗ trợ không đầy đủ tính bảo mật dữ liệu (security problems) như RDB
Ưu điểm của RDB:
• Là một DBMS phát triển lâu đời (khởi đầu từ thập niên 70)
• Có cấu trúc rõ ràng, đơn giản, dễ sử dụng
• Rất tốt cho quản trị dữ liệu
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 16
Trang 28• Hỗ trợ khá đầy đủ đối với vấn đề truy vấn dữ liệu
• Có tính bảo mật cao
Khuyết điểm của RDB:
• Kém hiệu quả trong quản trị các loại dữ liệu phức tạp như: multimedia, CAD,
network, dữ liệu không gian…
VI KẾT QUẢ MONG ĐỢI TỪ ĐỀ TÀI
Do sự nhu cầu cần có một thư viện để hỗ trợ cho hệ thống thông tin địa lý trong không
gian 3D, cho nên bản luận văn này được thực hiện để đáp ứng nhu cầu đó Với mong
muốn thư viện này sẽ trở thành một công cụ hỗ trợ tích cực cho người dùng cấp trung
gian (lập trình viên) tạo các ứng dụng cho hệ thống thông tin địa lý trong không gian
3D
Biểu diễn địa hình thế giới thực một cách gần gũi với con người
Thao tác trực quan trên địa hình
Giúp tạo giả lập trước khi tác động thật sự vào thế giới thực
Kết quả của đề tài sẽ tạo tiền đề cho các ngành nghiên cứu có liên quan đến ứng dụng
GIS 3D
TRONG ĐỀ TÀI
Bản luận văn này sử dụng những công cụ sau đây để hiện thực:
• Hệ cơ sở dữ liệu hướng đối tượng Versant
• N gôn ngữ lập trình: Visual C++ 7.0, C++ Builder 5.0, C#
• Thư viện đồ họa OpenGL
N goài ra, bản luận văn cũng được xây dựng dựa trên các kiến thức:
• Kiến thức về hình học không gian 3D
• Kiến thức tạo chỉ mục nhiều chiều cho truy vấn cơ sở dữ liệu
Trang 29H IỆ N T HỰ C Đ Ề T ÀI
Trang 30CHƯƠNG 2 : TẦNG CƠ SỞ DỮ LIỆU
I VERSANT
Trong phần trước, ta đã tìm hiểu sơ lược qua chuNn ODMG dùng trong cơ sở dữ liệu
hướng đối tượng Tương tự như mô hình dữ liệu quan hệ, CSDL đối tượng cũng có
các DBMS được gọi là ODBMS Ta có thể chia các ODBMS thành hai loại Loại thứ
nhất hiện thực và quản lý dữ liệu theo dạng bảng truyền thống của mô hình quan hệ Ở
các ODBMS này, giữa chương trình ứng dụng và dữ liệu có phần chuyển tiếp để ánh
xạ của thuộc tính của đối tượng sang dạng hàng cột của bảng Loại thứ hai lưu trữ dữ
liệu theo đúng nghĩa của đối tượng Các đối tượng cùng thuộc tính của nó được lưu trữ
trực tiếp vào thiết bị lưu trữ
Hiện tại có một số ODBMS như O2, Versant, Gem….Ở đề tài này, chúng tôi chọn
Versant là ODBMS để lưu trữ dữ liệu về các đối tượng không gian
I.1 Versant và chuẩn ODMG
Versant do VERSAN T Coporation bắt đầu phát triển từ năm 1988 Được xây dựng
dựa nên nền tảng kiến trúc hướng đối tượng phân bố, Versant trở thành một ODBMS
ổn định, tin cậy Hiện nay, có nhiều công ty thuộc các lĩnh vực viễn thông, tài chính…
đã dùng Versant để giải quyết các yêu cầu về quản lý lưu trữ các dữ liệu phức tạp, biến
đổi theo thời gian thực
Là một ODBMS, Versant cung cấp đầy đủ các thư viện lập trình hỗ trợ chuNn ODMG
Tuy nhiên, bên cạnh đó Versant cũng đưa ra một định nghĩa tương tự về mô hình dữ
liệu đối tượng cho riêng mình để tạo sự dễ dàng, thuận tiện hơn cho lập trình viên Ở
các phiên bản trước v5.2, Versant hỗ trợ ODMG thông qua các ODMG/C++ Library
riêng biệt N hưng kể từ bản v5.2, Versant đã tích hợp các thư viện ODMG/C++ vào
trong các thư viện của mình Trong các phiên bản về sau, các thư viện ODMG/C++ đã
hoàn toàn bị loại bỏ Đối với các ứng dụng dựa trên C++, Versant khuyên nên sử dụng
giao thức lập trình theo chuNn của Versant thay vì dùng chuNn của ODMG
I.2 CDSL đối tượng trong Versant
ChuNn CSDL trong Versant vẫn dựa trên các ý tưởng chính của chuNn ODMG
Versant sử dụng các lớp template để hiện thực các ý tưởng của CSDL hướng đối
tượng Ta có thể xem xét các hiện thực của Versant thông qua các bước xây dựng một
ứng dụng sử dụng CSDL trên Versant như sau :
1 Xác định và xây dựng lược đồ quan hệ giữa các đối tượng (ERD)
2 Hiện thực các lớp dựa vào ERD vừa xây dựng
3 Tạo và nạp lược đồ CSDL (schema files)
4 Dịch và liên kết chương trình nguồn
Trang 31Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
Việc xây dựng ERD cho CSDL là kiến thức chung không phụ thuộc vào ODBMS Do
đó, ở đây ta không nói thêm về việc xây dựng ERD mà chỉ đề cập đến ba bước sau
I.2.1 Các bước xây dựng các lớp CSDL trên Versant
a Hiện thực các lớp C++ từ ERD
Đây là bước quan trọng nhất trong các bước xây dựng các lớp CSDL Việc xây dựng
các lớp C++ từ ERD được hiện thực theo các nguyên tắc sau:
1 Mỗi thực thể trong ERD sẽ chuyển thành một lớp trong C++ Các lớp này kế
thừa từ PObject hay PVirtual là tùy vào tính chất của đối tượng, vấn đề này sẽ
được trình bày chi tiết hơn ở phần sau
2 Các thuộc tính của đối tượng thành các trường trong các lớp tương ứng
3 Quan hệ kế thừa được hiện thực thông qua cơ chế kế thừa của ngôn ngữ hướng
đối tượng
4 Quan hệ bao gộp giữa hai lớp đối tượng hiện thực thông qua các lớp template
list, set, dictionary List dùng để chứa các liên kết đến các đối tượng theo danh
sách có thứ tự Set chứa các liên kết đến các đối tượng không theo thứ tự Các
đối tượng được chứa trong Set là duy nhất Dictionary lưu trữ theo dạng khóa
và giá trị của khóa Giá trị khóa là các liên kết đến đối tượng Trong phạm vi
của thư viện này ta không sử dụng đến nên không đề cập chi tiết đến lớp
template này
5 Quan hệ hai ngôi được hiện thực thông qua các đối tượng template BiLink và
BiLinkVstr
6 N goài ra để hiện thực mối liên hệ một chiều từ đối tượng này sang đối tượng
khác, Versant dùng lớp template Link và LinkVstr
b Tạo và nạp lược đồ CSDL
Lược đồ CSDL chứa các thông tin về các lớp và các thuộc tính của chúng Versant dựa
vào thông tin từ lược đồ này để lưu trữ các đối tượng trong CSDL
Lược đồ CSDL là kết quả trình biên dịch schcomp.exe Đầu vào của schcomp.exe là
tập tin imp mô tả khai báo lớp persistent, khai báo các thuộc tính transient của các lớp
persistent N ội dung của file imp như sau :
#include <cxxcls/pobject.h>
#include <cxxcls/vlist.h> // nếu có dùng V?List<>
#include <cxxcls/vset.h> // nếu có dùng V?Set<>
#include <cxxcls/bilink.h> // nếu có dùng BiLink, BiLinkVstr
// include các header file của các lớp cần lưu trữ
O_CAPTURE_SCHEMA(lớp_persistent)
O_CAPTURE_SCHEMA(V?List(lớp_persistent)) //nếu dùng V?List<lớp_persitent>
O_TRANSIENT(lớp_persistent,[“thuộc_tính_transient”]…)
Ký hiệu O_CAPTURE_SCHEMA() dùng để khai báo các lớp persistent Ký hiệu
O_TRANSIENT() dùng để khai báo các lớp kế thừa từ PObject, PVirtual nhưng hoàn
toàn là transient Đồng thời ký hiệu này còn dùng để khai báo các thuộc tính transient
của lớp persistent
Kết quả của quá trình biên dịch là file sch chứa thông tin lược đồ lớp và file cxx chứa
các lớp cần cho quá trình biên dịch chương trình
Từ schema file, ta thực thi chương trình sch2db.exe để đưa lược đồ CSDL vào CSDL
c Dịch và liên kết chương trình
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 20
Trang 32Buớc cuối cùng là dịch và liên kết chương trình Ta cần thêm file cxx có được từ kết
quả dịch file imp vào project Khi tiến hành liên kết chương trình, ta cần liên kết với
các thư viện hiện thực của Versant là: mscvc1p.lib msccls1p.lib libosc.lib
I.2.2 Đối tượng trong Versant
a Persistent hay Transient?
Trong Versant, các lớp đối tượng được chia làm hai loại : lớp persistent và lớp
transient Các lớp persistent là các lớp được kế thừa từ lớp PObject hoặc PVirtual
trong thư viện chuNn của Vesant Việc lựa chọn kế thừa từ PObject hay PVirtual sẽ
được trình bày ở phần sau Các lớp transient là các lớp không kế thừa từ hai lớp này
Các đối tượng cũng được phân chia thành hai loại : đối tượng persistent và đối tượng
transient Đối tượng persistent là những đối tượng được lưu trữ xuống CSDL, do đó
các đối tượng vẫn tồn tại khi chương trình kết thúc phiên làm việc của mình Các đối
tượng transient là các đối tượng chỉ được lưu trữ trên bộ nhớ N gay khi chương trình
kết thúc, các thông tin về các đối tượng này cũng bị giải phóng theo
Để tạo các đối tượng persistent, trước hết đối tượng này phải thuộc các lớp persistent,
kế đó phải khởi tạo đối tượng thông qua macro O_NEW_PERSISTENT() của Versant
Vì vậy, cho dù đối tượng thuộc lớp persistent nhưng được khởi tạo thông qua toán tử
new của C++ thì vẫn là đối tượng transient Còn đối với các đối tượng thuộc lớp
transient thì mặc nhiên là các đối tượng transient
Bản thân trong các đối tượng persistent, đôi khi không phải tất cả các thuộc tính đều
được lưu trữ xuống CSDL, Versant chỉ lưu trữ những thuộc tính persistent và bỏ qua
các thuộc tính transient Các thuộc tính này cần phải được tính toán lại khi nạp đối
tượng từ CSDL lên bộ nhớ
b PObject hay PVirtual?
N hư đã trình bày, các lớp persistent cần được kết thừa trực tiếp hay gián tiếp từ
PObject hoặc PVirtual Việc chọn lựa lớp cơ sở cho lớp persistent hoàn toàn vào cách
thức so sánh giữa hai đối tượng Phép so sánh bằng nhau giữa hai đối tượng là khá
quan trọng nếu trong chương trình có sử dụng list hay set
Các đối tượng thuộc lớp persistent khi tạo ra đều có thuộc tính oid Thuộc tính này là
duy nhất để xác định đối tượng Hai đối tượng kế thừa từ PObject (thuộc lớp kế thừa
từ PObject) khi so sánh dựa vào thuộc tính oid này, do đó hai đối tượng bất kỳ luôn
luôn khác nhau trong phép so sánh bằng Vì vậy, ta chọn lớp cơ sở là PObject khi ta
không quan tâm về các phép so sánh giữa hai đối tượng
Khi cần so sánh hai đối tượng dựa vào nội dung của nó, ví dụ : so sánh hai điểm trùng
nhau khi chúng có tọa độ giống nhau, thì hai đối tượng này phải thuộc lớp kế thừa từ
PVirtual Lớp kế thừa từ PVirtual phải hiện thực lại phương thức ảo o_4b
compare(const PVirtual& key) để so sánh giữa hai đối tượng Kết quả trả về nhỏ hơn
0 nếu đối tượng this nhỏ hơn key, bằng 0 nếu hai đối tượng bằng nhau và lớn hơn 0
nếu this lớn hơn key
II CÁC LỚP CỦA THƯ VIỆN GTIN
II.1 Xây dựng ERD
Theo các bước đã trình bày trên ta tiến hành xây dựng ERD cho thư viện như sau:
Trang 33Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
• Thực thể VERTEX: lưu trữ thông tin về đỉnh trong không gian N goài các giá
trị tọa độ không gian, ta còn lưu trữ màu của đỉnh
• Thực thể TRIAN GLE: lưu trữ thông tin về các tam giác Thuộc tính kèm theo
mỗi tam giác là: màu tô, màu cạnh, độ rộng cạnh và mẫu cạnh
• Thực thể FILLSTYLE: chứa thông tin về các mẫu tô (fill pattern)
• Thực thể TIN : lưu trữ thông tin về một TIN Thuộc tính kèm theo là tên của
TIN , không gian bao phủ nhỏ nhất (Minimum Bounding Region), độ dài cạnh
dài nhất nối giữa hai đỉnh trong TIN
• Thực thể TIN ATTRIBUTE: thuộc tính do người dùng định nghĩa
• Thực thể ATTRIBUTEVALUE: là các giác trị của một TIN ATTRIBUTE Hai
thực thể này chủ yếu dùng trong quá trình hiển thị Tin sẽ được trình bày cụ thể
hơn ở tầng Presentaion
• Thực thể TIN OBJECT: là lớp tổng quát hóa của các lớp trên Mỗi instance của
lớp này có thuộc objID là một số nguyên duy nhất, tăng dần được dùng như một
định danh đối tượng khi cần kết nối các đối tượng TIN sang các CSDL khác
II.2 Hiện thực các lớp C++
II.2.1 Lược đồ lớp
Từ các thực thể của ERD, ta xây dựng lược đồ lớp dựa trên chuNn UML như sau:
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 22
Trang 34+getMBR() : float*
+objID : int
CDBTinObject
+x : float +y : float +z : float +color : int
CDBTinVertex
+color : int
CDBTinTriangle
+VertexCount() : int +TriangleCount() : int +AddVertex() : CDBTinVertex +RemoveVertex() +AddTriangle() : CDBTinTriangle +RemoveTriangle()
+name : char*
CDBTin
PVirtual PObject
-m_Triangle 0 *
-m_Vertices 3
-m_Tin
Hình 2-2 Lược đồ lớp
Chú giải:
- CDBTinObject: dẫn xuất từ thực thể TIN OBJECT trong lược đồ ERD
N goài thuộc tính objID, mỗi đối tượng CDBTinObject có phương thức getMBR() để trả về vùng bao phủ nhỏ nhất (Minimum Bounding Region),
nếu có, của mỗi đối tượng Tin
- CDBTinVertex: dẫn xuất từ thực thể VERTEX Mỗi đỉnh có thể thuộc vào
một TIN
- CDBTinTriangle: dẫn xuất từ thực thể TRIAN GLE
- CDBTin: dẫn xuất từ thực thể TIN Lớp CDBTin có hai bốn phương thức
quan trọng AddVertex(), RemoveVertex(), AddTriangle(), RemoveTriangle()
nhằm bảo đảm tính nhất quán của dữ liệu
- CDBFillStyle: dẫn xuất từ thực thể FILLSTYLE
Ta thấy các lớp CDBTinVertex, CDBTinTriangle, CDBTin đều kế thừa từ lớp
PVirtual N hư đã trình bày ở trên, do các các đối tượng thuộc các lớp này so sánh bằng
thông qua nội dung của chúng Hai đỉnh bằng nhau khi có tọa độ không gian bằng
nhau Hai tam giác bằng nhau khi các đỉnh của chúng bằng nhau từng đôi một Hai
TIN bằng nhau khi chúng có cùng tên
Trong lược đồ lớp xuất hiện thêm lớp CDBTinInfo Đây là một lớp đặc biệt N ó chỉ có
duy nhất một instance trong một CSDL Instance của lớp này chứa một số thông tin
giúp cho việc sinh ra giá trị objID cho các đối tượng TIN
II.2.2 Tính toàn vẹn dữ liệu trong CSDL của TIN
Một yêu cầu cơ bản CSDL là tính toàn vẹn và nhất quán dữ liệu Yêu cầu toàn vẹn và
nhất quán dữ liệu được thể hiện ở mối liên kết giữa đỉnh và tam giác Khi xóa một tam
Trang 35Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
giác ra khỏi TIN , ta cần xóa các tham khảo đến tam giác này từ các đỉnh của nó Và
khi xóa một đỉnh, ta cần xóa tất cả các tam giác đi qua đỉnh này N goài ra, trong một
TIN không có hai đối tượng bằng nhau Phép so sánh bằng giữahai đối tượng được
trình bày như phần trên
Để bảo toàn tính toàn vẹn và nhất quán dữ liệu, việc thêm và xóa cách đỉnh, tam giác
vào/ra khỏi TIN không thể thực hiện một cách trực tiếp mà phải thông qua hai phương
thức AddVertex() và AddTriangle() của lớp CDBTin
II.2.3 Interface của các lớp persistent
void setTin(Link<CDBTin> tin);
void setObjId(int new_id);
virtual int getObjType() const; // TIN_ROOT virtual real* get_mbr() const;
// overriden methods
virtual o_4b compare(const PVirtual& key) const;
virtual o_u4b hash() const;
// static methods
static CDBTinObject* findTinObj(o_u4b objID);
// getter & seter
o_u4b getObjID() { return m_objID; } // property & public fields
declspec(property(get=getObjID)) o_u4b objID;
void getCoordinate(real* xyz);
void setCoordinate(real* xyz) ; CDBTinTriangle* triangles(int index) const;
int triangle_cnt() const { return RefTriangles.size(); } bool isRefTriangle(CDBTinTriangle& T);
public: // static methods
static real* UnMap(real* _xyz);
static real* Map(real* xyz);
static void MapReset();
static void MapRestore(void* pMap);
static void* MapSave();
static bool MapEnabled();
static void MapEnable(bool enabled);
static void MapCoordinate(int* AxisOrder, real* Origin, int*
static void MapAxisDirection(int dirX, int dirY,int dirZ, int abs_map=0);
static void MapOrigin(real orgX, real orgY, real orgZ, int abs_map=0);
static void MapAxisOrder(int newX, int newY, int newZ, int abs_map=0);
public: // overriden methods
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 24
Trang 36virtual o_4b compare(const PVirtual& key) const;
virtual int getObjType() const;
virtual real* get_mbr() const;
real* getNormVector();
void getNormVector(real* xyz);
public: // overriden methods
virtual int getObjType() const;
virtual o_4b compare(const PVirtual& key) const;
virtual real* get_mbr() const;
public: // property & public field
int IndexOf(CDBTinObject& obj);
CDBTinVertex* Vertices(unsigned int index);
CDBTinVertex* findVertex(real x, real y, real z);
CDBTinVertex* findVertex(CDBTinVertex& p);
CDBTinVertex* addVertex(real x, real y, real z);
int VertexCount() const;
CDBTinTriangle* Triangles(unsigned int index);
CDBTinTriangle* findTriangle(CDBTinVertex* a, CDBTinVertex* b,
void* SelectVertex(real* XRange,real* YRange,real* ZRange,int tag);
void* SelectVertex(real* xyz1, real* xyz2, int tag);
void* SelectTriangle(real* xyz1, real* xyz2, int tag);
void* SelectTriangle(void* vertices, int tag);
void ClearTag(int what);
public: // overriden methods
virtual int getObjType() const;
virtual real* get_mbr() const;
public: // static methods
static CDBTin* newTin(LPTSTR name, int persistent=1);
static CDBTin* findTin(LPTSTR name);
static CDBTin* Tin(int index);
};
Trang 37Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
II.3 Tạo và nạp lược đồ CSDL
Lược đồ CSDL Versant được tạo ra bằng trình biên dịch lược đồ (schema compiler)
schcomp.exe Đầu vào của schcomp.exe là tập tin imp chứa các khai báo về các lớp
persistent của CSDL Sau đây là nội dung đầy đủ của tập tin TincoreSchema.imp khai
báo các lớp persistent của thư viện GTIN
III.1 Tại sao có hệ tọa độ ánh xạ?
Trong một số bài toán, để giải thuật trở nên đơn giản, trong sáng hơn, ta cần dùng đến
hệ tọa độ ánh xạ Các giá trị tọa độ không gian của các đối tượng TIN là giá trị đo đạc
từ thế giới thực Các giá trị này thông qua qua một số phép ánh xạ sẽ trở thành giá trị
tọa độ của đối tượng đó trong một hệ tọa độ khác, đó là hệ tọa độ ánh xạ N hư vậy
phép ánh xạ ở đây thực chất là các phép biến đổi hệ trục tọa độ Để dảm bảo tính hiệu
quả của chương trình, lớp DML chỉ cung cấp các phép biến đổi đơn giản cho phép
người dùng tịnh tiến hệ trục và thực hiện các phép xoay trục theo những góc 900
Một ví dụ dùng hệ tọa độ ánh xạ sẽ được trình bày ở phần giải thuật: “giao TIN với
mặt phẳng”
III.2 Các phép ánh xạ
DML hỗ trợ ba phép ánh xạ cơ bản: thay đổi vị trí trục, đảo hướng trục và tịnh tiến gốc
tọa độ Các phép ánh xạ này lưu trữ trong cấu trúc MAPSTATUS
Trang 38Các phép ánh xạ là hai chiều và có mang tính tương đối Ánh xạ thuận chuyển tọa độ
thế giới thực sang tọa độ ánh xạ; ánh xạ nghịch chuyển tọa độ ánh xạ sang tọa độ thế
giới thực Phép ánh xạ tương đối tác động lên bảng ánh xạ dựa vào hệ trục tọa độ hiện
tại Phép ánh xạ tuyệt đối tác động lên bảng ánh xạ theo hệ trục chuNn ban đầu
Objects/
Search Query
Mapping is enabled.
Mapping is disabled.
World coordinate
World coordinate Mapped
coordinate
APPLICATION coordinateObject
Hình 2-3 Sơ đồ Mapped Coordinate System
III.2.1 Các phép ánh xạ.
a Thay đổi trật tự trục tọa độ
Phép thay đổi trục tọa độ cho phép giả lập việc xoay các trục tọa độ
Ví dụ: đối với hệ tọa độ thế giới thực, trục z hướng lên, trục y nằm hướng ngang sang
phải và x hướng ra Trong khi hệ tọa độ dùng trong OpenGL là: trục y hướng lện, x
ngang sang phải và z hướng ra N hư vậy ta thấy, để vẽ một đối tượng từ thế giới thực
bằng OpenGL ta phải hoán đổi vị trí các trục như sau: xw Æ zv, yw Æ xv, zw Æ zv
Phép đổi trật tự trục tọa độ tác động đến trường AxisOrder của cấu trúc MAPSTATUS
Các trục tọa độ được mã hóa như sau: 0 – x, 1 – y, 2 – z
Phép ánh xạ thuận tác động lên trường AxisOrder của bảng ánh xạ như sau:
Đảo trục tọa độ giống như xoay trục tọa độ một góc 1800 Phép ánh xạ này tác động
lên trường AxisDir như sau:
AxisDir[X_AXIS]*=dirX;
AxisDir[Y_AXIS]*=dirY;
AxisDir[Y_AXIS]*=dirZ;
III.2.2 Công thức đổi tọa độ thực sang tọa độ ánh xạ và ngược lại
Từ thông tin trong bảng ánh xạ, ta có thể chuyển tọa độ thế giới thực sang tọa độ ánh
xạ thuận theo phương trình sau:
xmap = (xyz[AxisOrder[X_AXIS]]-Origin[X_AXIS])*AxisDir[X_AXIS];
ymap = (xyz[AxisOrder[Y_AXIS]]-Origin[Y_AXIS])*AxisDir[Y_AXIS];
zmap = (xyz[AxisOrder[Z_AXIS]]-Origin[Z_AXIS])*AxisDir[Z_AXIS];
Trang 39Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải
Để thực hiện phép ánh xạ ngược, ta dùng công thức sau:
xyz[AxisOrder[X_AXIS]]=xmap*AxisDir[X_AXIS]+Origin[X_AXIS];
xyz[AxisOrder[Y_AXIS]]=ymap*AxisDir[Y_AXIS]+Origin[Y_AXIS];
xyz[AxisOrder[Z_AXIS]]=zmap*AxisDir[Z_AXIS]+Origin[Z_AXIS];
III.3 Sử dụng các phép ánh xạ
Các phép ánh xạ trên được hiện thực ở tầng DML Khi người dùng cho bật chế độ ánh
xạ thì tất cả những tọa độ không gian truy cập từ các đối tượng TIN trả về đều đã được
thông qua phép ánh xạ thuận Và khi thay đổi tọa độ ánh xạ, thì giá trị này sẽ thông
qua phép ánh xạ nghịch chuyển thành tọa độ thực rồi mới được gán vào CSDL Các
câu lệnh truy vấn cũng hỗ trợ phép ánh xạ này
N gười dùng sử dụng hệ tọa độ ánh xạ thông qua nhóm hàm API về ánh xạ tọa độ Ta
sẽ đề cập đến các hàm API này ở phần sau Sau đây là đoạn khung mã để sử dụng hệ
tọa độ ánh xạ
void* pMap = tinMapSave(); // lưu lại tình trạng ánh xạ
tinMapEnable(true); // bật hệ tọa độ ánh xạ
tinMapXXXX(…); // các hàm thực hiện 3 phép ánh xạ
/* các thao tác trên các đối tượng không gian */
tinMapRestore(pMap); // phục hồi lại tình trạng ánh xạ trước đó
IV TRUY VẤN CÁC ĐỐI TƯỢNG KHÔNG GIAN
IV.1 Các loại câu truy vấn thường dùng trong dữ liệu không gian
Đối với dữ liệu không gian nói chung, TIN nói riêng, ta thường thực hiện hai loại truy
vấn phỗ biến : truy vấn theo vùng – region query, và truy vấn các đối tượng lân cận –
neighbour query
• Truy vấn theo vùng trả về các đối tượng không gian có vùng bao nhỏ nhất giao
với vùng do người dùng đưa vào
• Truy vấn lân cận trả về các đối tượng lân cận với một đối tượng xác định một
khoảng cách cho trước
Việc truy vấn dữ liệu là một chức năng cơ bản của một DBMS, do đó, ta hãy xem xét
cách thức thực hiện truy vấn của Versant và mức độ hỗ trợ của nó đối với các yêu cầu
truy vấn trên dữ liệu không gian
IV.2 Truy vấn trong Versant
Do cơ sở lý thuyết của truy vấn trên ODB là còn khá mới so với RDB, nên các câu
truy vấn được hỗ trợ bởi Versant là còn hạn chế Chỉ những câu truy vấn tìm kiếm –
Search query – là được hỗ trợ trực tiếp từ DBMS
a Search query
Truy vấn tìm kiếm, search query, là xem xét một nhóm đối tượng và trả về những đối
tượng thỏa điều kiện dò tìm
Trong Versant, điều kiện dò tìm được gọi là perdicate, mỗi predicate là kết hợp bởi
một hay nhiều predicate term Mỗi predicate term bao gồm ba thành phần: thuộc tính
cần kiểm tra, phép toán so sánh và giá trị khóa Các predicate term kết hợp với các
phép logic toán and, or, not tạo thành predicate
Predicate ::= PredicateTerm [ AND|OR PredicateTerm ]*
PerdicateTerm ::=[NOT] AttributeName COMPARISION_OPERATOR KeyValue
Trong đó:
Thư viện Tính toán và Trình diễn Lưới tam giác không đều Trang 28
Trang 40• AttributeName: tên thuộc tính cần so sánh của đối tượng Tên thuộc tính phải
được đặt theo đúng quy cách Thuộc tính phải thuộc một trong các kiểu sau:
kiểu vô hướng; kiểu mảng tĩnh các phần tử 1 byte; Vstr của kiểu 1 bytes; các
Link, LinkVstr và mảng các Link; chuỗi kiểu PString hoặc VString; các kiểu
lưu trữ thời gian: VDate, VTime, o_date, o_time, o_timestamp, o_interval
• COMPARISION_OPERATOR: là các phép toán so sánh Có 4 loại phép toán
so sánh: quan hệ (=,>=,…), so sánh chuỗi (O_MATCH, O_NOT_MATCH),
kiểm tra đối tượng có thuộc lớp hay không (O_ISA_EXACT, O_NOT_ISA_
EXACT) và các phép toán tập hợp
• KeyValue: là giá trị cho trước dùng để so sánh với thuộc tính của các đối
tượng
N hư vậy, ta có thể hiện thực câu truy vấn theo vùng bằng predicate như sau:
(xmin<= x)and(x <= xmax)and(ymin<= y)and(y <= ymax)and(zmin<= z)and(z <= zmax)
Do hạn chế của mệnh đề truy vấn chỉ lượng giá giá trị thuộc tính với một giá trị khác,
nên ta không thể thiết lập biểu thức truy vấn lân cận theo cơ chế trên Vì vậy, để có thể
truy vấn các đối tượng lân cận một đối tượng, ta phải viết giải thuật hiện thực ở cấp
chương trình
b Chỉ mục cho Search query
Việc truy tìm các đối tượng thỏa mệnh đề truy vấn theo vùng sẽ trở nên rất nặng nề do,
DBMS phải tiến hành lượng giá sáu mệnh đề logic, sau đó phải giao các kết quả trung
gian với nhau mới đưa ra được kết quả cuối cùng Do đó, để tăng hiệu suất tìm kiếm ta
phải giảm bớt số lượng đối tượng lượng giá mà không ảnh hưởng đến kết quả Để làm
được điều này, Versant cung cấp khả năng tạo chỉ mục trên các thuộc tính
Chỉ mục chỉ áp dụng trên một thuộc tính đơn của một lớp và ảnh hưởng đến tất cả các
đối tượng của lớp này N ó là một danh sách của các cặp gồm giá trị khóa và định danh
của đối tượng Chỉ mục không có tên và được quản lý tự động, nó có thể là duy nhất
hoặc không duy nhất Tuy nhiên, một chỉ mục chỉ có tác dụng đến một lớp duy nhất,
nó không có tính kế thừa Vì vậy, để chỉ mục cho một thuộc tính của lớp cha có tác
dụng trên các lớp con, ta phải thiết lập chỉ mục tường minh cho các lớp con này
Mỗi thuộc tính có thể có hai loại chỉ mục: chỉ mục B-Tree và chỉ mục bảng băm –
hash table Tùy vào các câu truy vấn dự định trên thuộc tính đế có thể đặt các loại chỉ
mục phù hợp
• Chỉ mục B-Tree: thường phù hợp cho các câu query theo đoạn N hư vậy, trong
câu truy vấn theo vùng, các thuộc tính tọa độ của đối tượng nên được đặt chỉ
mục B-Tree
• Chỉ mục bảng băm: thường phù hợp với phép so sách trùng các chuỗi
c Chỉ mục cho dữ liệu đa chiều
Ta thấy, đối với các đối tượng không gian dựa vào cơ chế truy vấn của Versant chỉ
giải quyết được một phần nhỏ các yêu cầu truy vấn do cơ chế chỉ mục của Versant là
chỉ mục của thuộc tính đơn Vì vậy, ta cần xây dựng một cấu trúc chỉ mục khác phù
hợp với dữ liệu đa chiều