1. Trang chủ
  2. » Luận Văn - Báo Cáo

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++

117 460 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 117
Dung lượng 1,75 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

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++

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 3

LỜ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 4

LỜ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 5

TÓ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 6

MỤ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 7

II.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 8

IV.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 9

DANH 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 10

GIỚ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 11

Hiệ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 13

Luậ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 14

I.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 15

Luậ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 16

khô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 17

Luậ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 18

cũ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 19

Luậ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 20

Từ 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

xC + − 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 21

Luậ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 22

dữ 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 23

Luậ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 24

Giố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 25

Luậ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 26

class 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 27

Luậ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 29

H IỆ N T HỰ C Đ Ề T ÀI

Trang 30

CHƯƠ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 31

Luậ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 32

Buớ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 33

Luậ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 35

Luậ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 36

virtual 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 37

Luậ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 38

Cá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 39

Luậ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

Ngày đăng: 07/04/2015, 10:47

HÌNH ẢNH LIÊN QUAN

Hình  1-4. Kiến trúc thư viện. - 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++
nh 1-4. Kiến trúc thư viện (Trang 15)
Hình  1-5. Biểu diễn Lưới tam giác không đều (TIN). - 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++
nh 1-5. Biểu diễn Lưới tam giác không đều (TIN) (Trang 17)
Hình  1-6. Quan hệ giữa các lớp đối tượng. - 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++
nh 1-6. Quan hệ giữa các lớp đối tượng (Trang 19)
Hình  2-1. Lược đồ các thực thể cơ bản của Tin. - 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++
nh 2-1. Lược đồ các thực thể cơ bản của Tin (Trang 33)
Hình  2-2. Lược đồ lớ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++
nh 2-2. Lược đồ lớp (Trang 34)
Hình  3-5. Giao tuyến là một polylines - 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++
nh 3-5. Giao tuyến là một polylines (Trang 53)
Hình  3-12. Tinh toán độ cao cho ma trận độ cao - 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++
nh 3-12. Tinh toán độ cao cho ma trận độ cao (Trang 59)
Hình  3-16. Khoảng cách từ điểm đến đoạn. - 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++
nh 3-16. Khoảng cách từ điểm đến đoạn (Trang 61)
Hình  4-1. Hệ tọa độ bàn tay trái và bàn tay phải. - 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++
nh 4-1. Hệ tọa độ bàn tay trái và bàn tay phải (Trang 66)
Hình  4-4. Lưu đồxử l ý event MouseDown của World3D (a) và WorldObject (b). - 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++
nh 4-4. Lưu đồxử l ý event MouseDown của World3D (a) và WorldObject (b) (Trang 76)
Hình  4-6. Lưu đồ xử lý event MouseMove (a) và MouseTimer (b). - 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++
nh 4-6. Lưu đồ xử lý event MouseMove (a) và MouseTimer (b) (Trang 77)
Hình  4-7. Lưu đồ xử lý biến cố MouseMove cho WorldObject. - 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++
nh 4-7. Lưu đồ xử lý biến cố MouseMove cho WorldObject (Trang 77)
Hình  4-8.  Lưu đồ xử lý biến cố WM_PAINT. - 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++
nh 4-8. Lưu đồ xử lý biến cố WM_PAINT (Trang 78)
Hình  5-1. Sơ đồ liên kết động đến COM Object. - 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++
nh 5-1. Sơ đồ liên kết động đến COM Object (Trang 79)
Hình  6-2. Các tam giác được chọn để tính toán. - 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++
nh 6-2. Các tam giác được chọn để tính toán (Trang 86)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w