Luận văn Xây dựng một ứng dụng bản đồ trên máy pocket pc 2002 (windows ce 3.0) cho phép hiển thị một bản đồ điện tử và cung cấp một số chức năng tìm kiếm thông tin

Tài liệu Luận văn Xây dựng một ứng dụng bản đồ trên máy pocket pc 2002 (windows ce 3.0) cho phép hiển thị một bản đồ điện tử và cung cấp một số chức năng tìm kiếm thông tin: KH OA C NT T – Đ H KH TN TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM VÕ SỸ NAM – 9912616 ĐỖ LỆNH HÙNG SƠN – 9912064 XÂY DỰNG MỘT ỨNG DỤNG BẢN ĐỒ TRÊN MÁY POCKET PC 2002 (WINDOWS CE 3.0) CHO PHÉP HIỂN THỊ MỘT BẢN ĐỒ ĐIỆN TỬ VÀ CUNG CẤP MỘT SỐ CHỨC NĂNG TÌM KIẾM THÔNG TIN LUẬN VĂN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN TS. DƯƠNG ANH ĐỨC LÊ THỤY ANH TP. HCM, 2003 KH OA C NT T – Đ H KH TN KH OA C NT T – Đ H KH TN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .......................................

pdf157 trang | Chia sẻ: hunglv | Lượt xem: 1115 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Xây dựng một ứng dụng bản đồ trên máy pocket pc 2002 (windows ce 3.0) cho phép hiển thị một bản đồ điện tử và cung cấp một số chức năng tìm kiếm thông tin, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
KH OA C NT T – Đ H KH TN TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM VÕ SỸ NAM – 9912616 ĐỖ LỆNH HÙNG SƠN – 9912064 XÂY DỰNG MỘT ỨNG DỤNG BẢN ĐỒ TRÊN MÁY POCKET PC 2002 (WINDOWS CE 3.0) CHO PHÉP HIỂN THỊ MỘT BẢN ĐỒ ĐIỆN TỬ VÀ CUNG CẤP MỘT SỐ CHỨC NĂNG TÌM KIẾM THÔNG TIN LUẬN VĂN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN TS. DƯƠNG ANH ĐỨC LÊ THỤY ANH TP. HCM, 2003 KH OA C NT T – Đ H KH TN KH OA C NT T – Đ H KH TN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. KH OA C NT T – Đ H KH TN NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. KH OA C NT T – Đ H KH TN LỜI CÁM ƠN Luận văn của chúng em sẽ rất khó hoàn thành nếu không có sự truyền đạt kiến thức quí báu và sự hướng dẫn tận tình của Thầy Dương Anh Đức và thầy Lê Thụy Anh. Chúng em xin chân thành cám ơn sự chỉ bảo của các thầy. Chúng con xin gửi tất cả lòng biết ơn, sự kính trọng đến ông bà, cha mẹ, cùng toàn thể gia đình, những người đã nuôi dạy, đã cho chúng con niềm tin và nghị lực để vượt qua mọi khó khăn. Chúng em xin trân trọng cám ơn quý Thầy cô trong Khoa Công nghệ thông tin trường Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh đã tận tình giảng dạy, truyền đạt những kiến thức quý báu và tạo điều kiện cho chúng em được thực hiện luận văn này. Xin chân thành cám ơn sự giúp đỡ, động viên và chỉ bảo rất nhiệt tình của các anh chị đi trước và tất cả bạn bè. Các anh chị, các bạn luôn có mặt trong những thời điểm khó khăn nhất, tiếp thêm động lực và ý chí, giúp chúng tôi hoàn thành được luận văn. Mặc dù đã cố gắng nỗ lực hết sức mình, song chắc chắn luận văn không khỏi còn nhiều thiếu sót. Chúng em rất mong nhận được sự thông cảm và chỉ bảo tận tình của quý Thầy cô và các bạn. Tp.HCM, 7/2003 Nhóm sinh viên thực hiện Võ Sỹ Nam - Đỗ Lệnh Hùng Sơn KH OA C NT T – Đ H KH TN LỜI NÓI ĐẦU Ngày nay, trong tất cả các lãnh vực của đời sống kinh tế, xã hội, công nghệ thông tin được xem là một trong những ngành công nghệ mũi nhọn, đóng vai trò hết sức quan trọng, có thể tạo ra những bước đột phá mạnh mẽ. Công nghệ thông tin đang phát triển từng ngày, cả trong kĩ thuật phần cứng lẫn lĩnh vực phần mềm. Kích thước cũng như khả năng của các thiết bị ngày càng được cải thiện rất nhiều. Từ các máy tính có kích thước rất lớn như mainframe, hiện nay, trên thế giới đã xuất hiện các loại thiết bị hỗ trợ cá nhân di động, gọi là PDA (Personal Digital Assistant), hết sức nhỏ gọn và tiện lợi, đặc biệt đối với những người có nhu cầu di chuyển nhiều. Các thiết bị thông minh, không dây và thuận tiện này đang ngày càng khẳng định vị trí của mình với những đặc tính của nó. Pocket PC là một dạng thiết bị PDA rất phổ biến và đang được sử dụng rộng rãi trên thế giới với nhiều tiện lợi và các phần mềm hữu ích. Trên môi trường này, đã có rất nhiều ứng dụng được phát triển với mục đích hỗ trợ tối đa người sử dụng thường xuyên phải di chuyển nhiều, như sổ tay điện tử, xem phim, nghe nhạc, bản đồ du lịch điện tử... Tại thị trường Việt Nam, Pocket PC cũng đang ngày càng trở nên thông dụng hơn. Trong bối cảnh Việt Nam chuẩn bị đăng cai Đại hội Thể thao Đông Nam Á (SEA Games) lần thứ 22, chúng em nhận thấy việc cho ra đời một ứng dụng bản đồ điện tử trên Pocket PC là hết sức cần thiết, tại Việt Nam nói chung và Tp.Hồ Chí Minh nói riêng. Với ý tưởng trên, chúng em đã tập trung thực hiện đề tài “XÂY DỰNG MỘT ỨNG DỤNG BẢN ĐỒ TRÊN MÁY POCKET PC 2002 (WINDOWS CE 3.0) CHO PHÉP HIỂN THỊ MỘT BẢN ĐỒ ĐIỆN TỬ VÀ CUNG CẤP MỘT SỐ CHỨC NĂNG TÌM KIẾM THÔNG TIN” và đã xây dựng ứng dụng với dữ liệu là bản đồ Tp.Hồ Chí Minh. KH OA C NT T – Đ H KH TN Nội dung của luận văn được chia làm 7 chương: Chương 1: Mở đầu giới thiệu chung về đề tài, ý nghĩa và các mục tiêu của đề tài; trình bày các giải pháp và hướng nghiên cứu đã được thực hiện trong và ngoài nước. Chương 2: Tổng quan về Pocket PC và Windows CE 3.0 giới thiệu tổng quan về Pocket PC và Windows CE 3.0, môi trường sẽ sử dụng ứng dụng bản đồ. Chương này cũng giới thiệu về khả năng lập trình trên Pocket PC 2002 và Hệ điều hành nhúng Windows CE 3.0. Chương 3: Các vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC trình bày các vấn đề liên quan trực tiếp đến việc xây dựng một ứng dụng bản đồ điện tử trên Pocket PC 2002 (Windows CE 3.0) như hạn chế về tốc độ tính toán, hiển thị, vấn đề lưu trữ trên Pocket PC. Chương 4: Các giải pháp cho ứng dụng bản đồ trên Pocket PC giới thiệu và phân tích các giải pháp thực hiện đối với việc xây dựng ứng dụng bản đồ điện tử trên Pocket PC như hiển thị, tìm kiếm, giải pháp tiếng Việt. Chương 5: Tổ chức dữ liệu bản đồ trên Pocket PC trình bày về dữ liệu nguồn và các vấn đề liên quan tới phương diện tổ chức lưu trữ thông tin và dữ liệu Pocket PC. Các giải thuật để xây dựng và tổ chức lại dữ liệu từ dữ liệu nguồn cũng được giới thiệu trong chương này. Chương 6: Ứng dụng Pocket Map giới thiệu về ứng dụng bản đồ điện tử Tp.Hồ Chí Minh trên Pocket PC 2002, mô tả các khảo sát hiện trạng, đặc tả yêu cầu và các phân tích thiết kế cho một số chức năng chính của ứng dụng. Chương này cũng giới thiệu giao diện và cách sử dụng của một số chức năng chính của ứng dụng. Chương 7: Tổng kết tóm tắt lại các vấn đề đã được đặt ra trong luận văn, cách giải quyết, kết quả đạt được và đề ra một số hướng phát triển trong tương lai. KH OA C NT T – Đ H KH TN MỤC LỤC Danh sách hình................................................................................. i Danh sách bảng...............................................................................iii Một số khái niệm và thuật ngữ ........................................................v Chương 1 : Mở đầu........................................................................ 1 1.1 GIS, các ứng dụng và giải pháp về GIS ...........................................1 1.2 Ứng dụng GIS trên Pocket PC.........................................................2 1.3 Các giải thuật nghiên cứu về GIS....................................................3 1.4 Mục tiêu của đề tài ........................................................................3 Chương 2 : Tổng quan về Pocket PC và Windows CE 3.0.............. 5 2.1 Giới thiệu về các thiết bị PDA .........................................................5 2.2 Tổng quan về Windows CE.............................................................6 2.3 Tổng quan về Pocket PC ................................................................7 2.4 Khả năng lập trình trên Pocket PC và Windows CE 3.0......................8 Chương 3 : Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC .................................................................................. 20 3.1 Khả năng tính toán của Pocket PC ................................................20 3.2 Tốc độ và các hỗ trợ khả năng hiển thị .........................................21 3.3 Khả năng và hình thức lưu trữ ......................................................25 3.4 Cấp phát bộ nhớ .........................................................................28 3.5 Tương tác giữa người sử dụng và thiết bị ......................................29 Chương 4 : Các giải pháp cho ứng dụng bản đồ trên Pocket PC . 31 4.1 Yêu cầu chung ............................................................................31 4.2 Vấn đề tối ưu tốc độ hiển thị ........................................................31 4.3 Tìm đường đi ngắn nhất ..............................................................38 KH OA C NT T – Đ H KH TN 4.4 Tìm kiếm thông tin phi không gian................................................42 4.5 Giải pháp tiếng Việt trên môi trường Pocket PC..............................45 Chương 5 : Tổ chức dữ liệu bản đồ trên Pocket PC..................... 54 5.1 Dữ liệu nguồn .............................................................................54 5.2 Mối liên hệ giữa các file .MNT, .SHP và .DBF..................................60 5.3 Tổ chức lại dữ liệu.......................................................................61 5.4 Xây dựng dữ liệu Topology...........................................................72 Chương 6 : Ứng dụng PocketMap ............................................... 78 6.1 Khảo sát hiện trạng .....................................................................78 6.2 Phân tích và xác định yêu cầu ......................................................79 6.3 Đặc tả Use Case..........................................................................81 6.4 Sơ đồ lớp Class Diagram ..............................................................89 6.5 Mô tả các lớp ..............................................................................91 6.6 Các lưu đồ hoạt động ................................................................ 102 6.7 Thiết kế màn hình ..................................................................... 116 6.8 Cài đặt và thử nghiệm ............................................................... 123 6.9 Hướng dẫn sử dụng................................................................... 125 Chương 7 : Tổng kết.................................................................. 133 7.1 Kết luận.................................................................................... 133 7.2 Hướng phát triển....................................................................... 134 Tài liệu tham khảo....................................................................... 136 Phụ lục ....... ................................................................................ 139 KH OA C NT T – Đ H KH TN Danh sách hình Hình 2-1: Phân bố bộ nhớ trong Windows CE .........................................14 Hình 4-1: Đoạn thẳng giao vùng nhìn ....................................................33 Hình 4-2: Cung giao vùng nhìn..............................................................34 Hình 4-3: Lưu đồ vẽ đối tượng ..............................................................38 Hình 5-1: Liên hệ giữa cung và điểm .....................................................57 Hình 5-2: Liên hệ giữa đường và cung ...................................................57 Hình 5-3: Đường bao quận/huyện .........................................................64 Hình 6-1: UseCase tìm kiếm đường........................................................81 Hình 6-2: Usecase Tìm kiếm địa điểm ....................................................83 Hình 6-3: Tìm đường đi ngắn nhất.........................................................85 Hình 6-4: Usecase Tìm kiếm quận/huyện ...............................................87 Hình 6-5: Sơ đồ tổng quát ....................................................................89 Hình 6-6: Sơ đồ lớp dữ liệu ...................................................................89 Hình 6-7: Sơ đồ lớp vẽ..........................................................................90 Hình 6-8: Sơ đồ lớp sự kiện...................................................................90 Hình 6-9: Lớp dữ liệu đường .................................................................92 Hình 6-10: Lớp GraphData ....................................................................94 Hình 6-11: Lớp DistrictData...................................................................96 Hình 6-12: Lớp PlaceData .....................................................................97 Hình 6-13: Lớp RoadView .....................................................................98 Hình 6-14: Lớp DistrictView...................................................................99 Hình 6-15: Lớp PlaceView ................................................................... 100 Hình 6-16: Lớp DragEvent................................................................... 100 Hình 6-17: Lớp DetailEvent ................................................................. 101 Hình 6-18: Lớp ShortestPathEvent ....................................................... 101 Hình 6-19: Lớp ZoomEvent ................................................................. 102 i KH OA C NT T – Đ H KH TN Hình 6-20: Sequence Diagram: Hiển thị bản đồ .................................... 102 Hình 6-21: Collaboration Diagram: Hiển thị bản đồ ............................... 103 Hình 6-22: Sequence Diagram: Tìm các đường giao nhau...................... 104 Hình 6-23: Collaboration Diagram: Tìm các đường giao nhau................ 105 Hình 6-24: Sequence Diagram: Tìm giao lộ........................................... 106 Hình 6-25: Collaboration Diagram: Tìm giao lộ...................................... 107 Hình 6-26: Sequence Diagram: Tìm đường đi ngắn nhất ....................... 108 Hình 6-27: Collaboration Diagram: Tìm đường đi ngắn nhất .................. 109 Hình 6-28: Sequence Diagram: Tìm địa điểm........................................ 109 Hình 6-29: Collaboration Diagram: Tìm địa điểm................................... 110 Hình 6-30: Sequence Diagram: Tìm con đường..................................... 111 Hình 6-31: Collaboration Diagram: Tìm con đường................................ 112 Hình 6-32: Sequence Diagram: Dịch chuyển vùng nhìn.......................... 113 Hình 6-33: Collaboration Diagram: Dịch chuyển vùng nhìn..................... 114 Hình 6-34: Sequence Diagram: Tỉ lệ lại bản đồ ..................................... 115 Hình 6-35: Collaboration Diagram: Tỉ lệ lại bản đồ ................................ 115 Hình 6-36: Màn hình chính.................................................................. 116 Hình 6-37: Menu chính ....................................................................... 116 Hình 6-38: Nút bấm đặc biệt ............................................................... 117 Hình 6-39: Màn hình tìm thông tin ....................................................... 119 Hình 6-40: Màn hình tên thông tin ....................................................... 120 Hình 6-41: Màn hình thông tin chi tiết.................................................. 120 Hình 6-42: Màn hình tìm đường đi ngắn nhất ....................................... 121 Hình 6-43: Màn hình sử dụng chính ..................................................... 126 Hình 6-44: Màn hình tìm thông tin ....................................................... 127 Hình 6-45: Màn hình tìm đường đi ngắn nhất ....................................... 129 Hình 6-46: Màn hình tìm đường đi ngắn nhất ....................................... 130 Hình 6-47: Màn hình tìm đường đi ngắn nhất ....................................... 131 ii KH OA C NT T – Đ H KH TN Danh sách bảng Bảng 2-1: Sự hỗ trợ của Windows CE 3.0 đối với các hàm thư viện C- Runtime .......................................................................................12 Bảng 2-2: Các thư viện C-Runtime được hỗ trợ trên Windows CE 3.0 .......13 Bảng 3-1: Các tính năng GDI được hỗ trợ trên Windows CE 3.0 ...............23 Bảng 3-2: Các hàm thuộc CWnd không được hỗ trợ trên Windows CE ......24 Bảng 3-3: Các kiểu dữ liệu được hỗ trợ trên database của Windows CE ....27 Bảng 4-1: Quy ước ký hiệu trong thuật toán tìm dường đi ngắn nhất .......39 Bảng 4-2:Các khả năng khi sử dụng chuỗi hằng Unicode.........................53 Bảng 5-1: Header của file .MNT.............................................................55 Bảng 5-2: Header của file .DBF .............................................................58 Bảng 5-3: Header của file Shape ...........................................................59 Bảng 5-4: Các loại mẫu tin của file Shape ..............................................60 Bảng 5-5: Cấu trúc mẫu tin dạng Point ..................................................60 Bảng 5-6: Chỉ số trong file .MNT và thứ tự mẫu tin trong file DBF ............61 Bảng 5-7: Chỉ số trong file .SHP và thứ tự mẫu tin trong file DBF .............61 Bảng 5-8: Dữ liệu DBF quận/huyện........................................................63 Bảng 5-9: Cấu trúc file quận huyện........................................................67 Bảng 5-10: File dữ liệu đường dạngDBF .................................................67 Bảng 5-11: File dữ liệu đường ...............................................................69 Bảng 5-12: File dữ liệu địa điểm DBF .....................................................69 Bảng 5-13: File dữ liệu địa điểm............................................................70 Bảng 5-14: Giá trị đường một chiều.......................................................71 Bảng 6-1: Các chức năng chính .............................................................80 Bảng 6-2: Lớp MapData ........................................................................91 Bảng 6-3: Lớp MapView........................................................................91 Bảng 6-4: Lớp MapEvent.......................................................................91 iii KH OA C NT T – Đ H KH TN Bảng 6-5: Lớp RoadData.......................................................................93 Bảng 6-6: Lớp RoadPath .......................................................................93 Bảng 6-7: Lớp RoadArc.........................................................................94 Bảng 6-8: Lớp GraphData .....................................................................95 Bảng 6-9: Lớp Node .............................................................................95 Bảng 6-10: Lớp DistrictData ..................................................................96 Bảng 6-11: Lớp DistrictArea ..................................................................97 Bảng 6-12:Lớp PlaceData......................................................................98 Bảng 6-13: Lớp Place ...........................................................................98 Bảng 6-14: Lớp DistrictView ..................................................................99 Bảng 6-15: Lớp PlaceView................................................................... 100 Bảng 6-16: Các nút bấm trên menu chính ............................................ 117 Bảng 6-17: Bảng Menu ....................................................................... 119 Bảng 6-18: Menu tìm thông tin............................................................ 120 Bảng 6-19: Bảng các nút tìm đường đi ngắn nhất ................................. 122 Bảng 6-20: Kết qủa thử nghiệm trên máy ảo ........................................ 124 Bảng 6-21: Kết qủa thử nghiệm trên máy thật...................................... 125 Bảng 6-22: Các menu tìm đốI tượng.................................................... 128 Bảng 6-23: Các nút bấm tìm đường đi ngắn nhất.................................. 132 iv KH OA C NT T – Đ H KH TN Một số khái niệm và thuật ngữ Khái niệm Định nghĩa Ghi chú GIS (Geography Information System) Hệ thống thông tin địa lý. Sử dụng công nghệ này là một công nghệ dựa trên máy tính để xây dựng bản đồ, phân tích và xử lý các đối tượng tồn tại và các sự kiện xảy ra trên trái đất. Thông tin không gian Thông tin về những đặc điểm liên quan đến hình dạng, vị trí, quan hệ của các đối tượng địa lý. Bao gồm hai dạng: • Dạng hình học: mô tả các đặc điểm hình dạng, vị trí. Ví dụ như tọa độ của điểm, đường… • Dạng Topology: mô tả quan hệ giữa các đối tượng hình học. Ví dụ như những vùng nào kề với một vùng xác định. v KH OA C NT T – Đ H KH TN Thông tin phi không gian (thông tin thuộc tính) Thông tin về những đặc điểm liên quan đến thống kê, thông tin số, thông tin đặc trưng gán cho mỗi thuộc tính của đối tượng Ví dụ như tên đường phố, dân số… PDA (Personal Digital Assistant) Thiết bị điện tử hỗ trợ cá nhân, giúp người sử dụng lưu trữ các thông tin cá nhân, công việc cần thiết cũng như các phần mềm tối thiểu trên một thiết bị nhỏ gọn Pocket PC Khái niệm này có thể dùng để chỉ: • Hệ điều hành nhúng Pocket PC do Microsoft phát triển dựa trên nhân của Hệ điều hành Windows CE 3.0 • Các thiết bị PDA sử dụng hệ điều hành Pocket PC Palm-size Một dạng thiết bị cầm tay, sử dụng Windows CE 2.21 Đang có khuynh hướng bị Pocket PC thay thế do có nguồn điện và khả năng không tốt Handheld PC Một dạng thiết bị cầm tay, sử dụng Windows CE 2.21 Có kích thước lớn hơn Pocket PC Palm OS Hệ điều hành nhúng do Palm phát triển, sử dụng trên các thiết bị cầm tay Là một trong những hệ điều hành nhúng phổ biến nhất hiện nay, có khả năng chạy nhanh hơn hệ điều hành vi KH OA C NT T – Đ H KH TN Pocket PC của hãng Microsoft EPOC Hệ điều hành nhúng do Symbian phát triển Là một trong những hệ điều hành nhúng phổ biến nhất hiện nay Embedded Linux Hệ điều hành nhúng phát triển dựa trên nhân của Hệ điều hành Linux trên Desktop vii KH OA C NT T – Đ H KH TN Chương 1 :Mở đầu Chương 1 : Mở đầu 1.1 GIS, các ứng dụng và giải pháp về GIS GIS (Geography Information System ) là một công nghệ ra đời vào những năm 60 của thế kỉ 20. Công nghệ GIS cho phép đáp ứng các nhu cầu liên quan tới quản lý cũng như khai thác và sử dụng các thông tin, dữ liệu địa lý. Từ giai đoạn đầu, được sử dụng trên các hệ thống máy tính lớn ở Mỹ và Canada, đến nay, công nghệ GIS đã được áp dụng và triển khai hết sức rộng rãi trên phạm vi toàn thế giới, trên những hệ thống máy PC và thời gian gần đây là trên cả các thiết bị PDA. Một số ứng dụng GIS nổi tiếng trên thế giới hiện nay đang được ứng dụng rộng rãi như MapInfo, Arc/Info, Spatial Database Engine (SDE), ArcView GIS...: được sử dụng với mục đích quản lý, tích hợp, quy hoạch và khai thác các dữ liệu bản đồ. Tại Việt Nam, công nghệ GIS cũng đã được nghiên cứu và có được một số sản phẩm có kết quả đáng khích lệ. Thời gian gần đây, việc nghiên cứu công nghệ GIS đã cho ra hàng loạt ứng dụng áp dụng trong thực tế tại Tp.Hồ Chí Minh, như StreetFinder của DolSoft, hệ thống GIS trên website Ngân hàng bản đồ trực tuyến của VDC, DMC, Dolsoft (www.basao.com.vn), hệ thống chỉ dẫn giao thông của nhóm AMI Group - Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh. Các giải pháp về GIS thường được chia làm hai nhóm chính: • Giải quyết các bài toán phức tạp liên quan đến mạng giao thông Các bài toán như tìm kiếm đường đi tối ưu, điều phối lộ trình giao thông... thường được áp dụng trên các hệ thống máy tính lớn, có cấu hình mạnh. • Hiển thị và tìm kiếm các thông tin bản đồ. Đây là dạng ứng dụng bản đồ điện tử, cung cấp các khả năng cho phép người sử dụng xem bản đồ và tìm kiếm một số thông tin cần thiết, thường được áp dụng trên các máy tính thông thường và nhỏ. 1 KH OA C NT T – Đ H KH TN Chương 1 :Mở đầu 1.2 Ứng dụng GIS trên Pocket PC Sự phát triển mạnh mẽ của Internet, cũng như khả năng của công nghệ phần cứng, đã dẫn đến sự ra đời của các thiết bị ứng dụng Internet. Theo các nhà nghiên cứu thị trường, mặc dù PC vẫn giữ vai trò chủ yếu trong việc xử lý và hỗ trợ công việc, nhưng các thiết bị Internet hay thiết bị hỗ trợ cá nhân sẽ ngày càng khẳng định được vai trò của nó trên thị trường. Ra đời vào những năm 90 của thế kỉ 20, Pocket PC là một dạng thiết bị cầm tay PDA (Personal Digital Assistant) sử dụng hệ điều hành Pocket PC, một biến thể của Windows CE, một hệ điều hành nhúng được Microsoft phát triển cho các thiết bị không là PC (non-PC). Do đặc trưng nhỏ gọn, được thiết kế với mục đích giúp người sử dụng lưu trữ các thông tin cá nhân, công việc cần thiết cũng như các phần mềm tối thiểu trên một thiết bị nhỏ gọn, và sử dụng một hệ điều hành họ hàng Windows, Pocket PC đã được khá nhiều nhà sản xuất phần mềm quan tâm trong lĩnh vực phát triển ứng dụng, trong đó có các ứng dụng GIS. Tuy nhiên, Pocket PC chạy trên nền hệ điều hành nhúng Windows CE, hệ điều hành chỉ cung cấp bộ nhớ một cách giới hạn cho các ứng dụng phát triển trên nó. Vì vậy, các ứng dụng liên quan tới hệ thống GIS phát triển trên Pocket PC và hệ điều hành Windows CE gặp phải các vấn đề về tối ưu hoá bộ nhớ cũng như tốc độ và thường có tốc độ chậm hơn nhiều so với các ứng dụng trên PC thông thường. Ngoài ra, do khả năng lưu trữ có giới hạn, việc ứng dụng GIS trên môi trường này cũng gặp không ít khó khăn. Trên thị trường, một số sản phẩm GIS trên Pocket PC đã được phổ biến rộng rãi như Pocket Street của Microsoft, MapInPocket của Information Technologies India Ltd... 2 KH OA C NT T – Đ H KH TN Chương 1 :Mở đầu 1.3 Các giải thuật nghiên cứu về GIS Công nghệ GIS liên quan trực tiếp tới lý thuyết đồ thị cũng như trí tuệ nhân tạo trong việc đưa ra các giải thuật để giải quyết các bài toán liên quan. Đây là những lĩnh vực nghiên cứu được đầu tư rất nhiều với các cải tiến cũng như đã đưa ra được nhiều giải thuật tốt hoặc tối ưu (chẳng hạn như các giải thuật clipping, kiểm tra điểm trong/ngoài đa giác hay các giải thuật tìm kiếm trên cấu trúc dữ liệu hoặc tìm kiếm lộ trình tối ưu...) Các bài toán về GIS hiện nay vẫn đang được nghiên cứu và có những cải tiến rất tốt, kể cả trong các bài toán phức tạp. 1.4 Mục tiêu của đề tài Hiện nay, một ứng dụng bản đồ điện tử tại Việt Nam nói chung, và Tp.Hồ Chí Minh trên môi trường Pocket PC là rất cần thiết khi lượng khách du lịch từ nước ngoài đến tham quan Việt Nam ngày càng tăng, cũng như sự phổ biến ngày càng rộng rãi của Pocket PC tại Việt Nam. Với đặc tính nhỏ gọn và tiện lợi của nó, Pocket PC đặc biệt thích hợp với dạng ứng dụng bản đồ điện tử hỗ trợ người dùng xem bản đồ và tìm kiếm các thông tin cần thiết trong quá trình di chuyển. Do vậy, từ nhu cầu nói trên, chúng em đã đầu tư xây dựng đề tài ““Xây dựng một ứng dụng bản đồ trên Pocket PC 2002 (Windows CE 3.0) cho phép hiển thị một bản đồ điện tử và cung cấp một số chức năng tìm kiếm thông tin”. Đề tài phải giải quyết một số công việc chính: • Nghiên cứu về Pocket PC 2002 và Hệ điều hành nhúng Windows CE 3.0 để thấy được sự khác biệt về trong mô hình với Windows trên Desktop, cũng như làm rõ được khả năng lập trình trên môi trường này. • Dựa vào những hiểu biết này, xem xét việc xây dựng một ứng dụng bản đồ sẽ phải liên quan trực tiếp tới những vấn đề nào, sau đó, trình bày các giải pháp thực hiện để xây dựng một ứng dụng bản đồ trên Pocket PC 2002. • Triển khai vào một ứng dụng cụ thể là bản đồ Tp.Hồ Chí Minh. Ứng dụng cho phép xem bản đồ Thành phố một cách trực quan, tìm kiếm các thông tin 3 KH OA C NT T – Đ H KH TN Chương 1 :Mở đầu liên quan đến đường phố, địa điểm (như bệnh viện, trường học...) với tốc độ truy xuất, tìm kiếm thông tin có thể chấp nhận đối với người dùng. Ngoài ra, chúng em cũng đã hỗ trợ thêm chức năng tìm kiếm lộ trình ngắn nhất giữa hai vị trí trên bản đồ và một số biến thể của bài toán này là giải quyết việc tìm lộ trình ngắn nhất với ràng buộc phải qua một số giao lộ, con đường hoặc phải tránh một số giao lộ, con đường nào đó (vì nhiều lí do như kẹt xe, ngập lụt...) 4 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 Chương 2 : Tổng quan về Pocket PC và Windows CE 3.0 2.1 Giới thiệu về các thiết bị PDA Khoảng hai mươi năm trước, đã có một cuộc cách mạng về máy tính khi máy tính IBM PC ra đời. Máy tính trở nên thông dụng với mọi người do không còn mang kích thước quá lớn. Sau đó, máy tính xach tay (Laptop PC) xuất hiện, cho phép người sử dụng dùng máy tính của mình ở khắp nơi, từ nhà đến văn phòng. Các máy PC là những thiết bị tính toán với năng lực mạnh mẽ nhưng mềm dẻo, đã trở nên hết sức thông dụng trên thị trường thế giới. Tuy nhiên, đang tồn tại một cuộc cách mạng tiềm ẩn và hứa hẹn khác, đó là sự ra đời của các thiết bị tính toán, xử lý di động hay còn gọi là thiết bị hỗ trợ cá nhân (PDA-Personal Digital Assistant). Trong vài năm gần đây, các thiết bị dạng này đang ngày càng phổ biến. Tuy nhiên, vào thời điểm ban đầu, mỗi thiết bị sử dụng hệ điều hành của riêng nó (các phần mềm trên thiết bị có thể do các nhà cung cấp phần mềm độc lập, bán bản quyền cho nhà cung cấp thiết bị ). Việc này đã dẫn đến sự phân chia thị trường của các hệ điều hành cho thiết bị di động, hay còn gọi là hệ điều hành nhúng, ngăn cản khả năng phát triển các ứng dụng nhúng một cách đồng loạt. Hiện nay, thị trường cho các hệ điều hành nhúng đã bắt đầu có khuynh hướng thu hẹp lại với các hệ điều hành có thị phần cao: • Microsoft Windows CE, bao gồm cả biến thể Pocket PC của hệ điều hành này • Palm OS do Palm cung cấp • EPOC của Symbian • Embedded Linux, hệ điều hành ban đầu chỉ được phát triển cho máy chủ và máy desktop Trong đó, Pocket PC và Windows CE có ưu thế hơn do là một hệ điều hành họ Windows, khá quen thuộc với người sử dụng lẫn lập trình viên. 5 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 2.2 Tổng quan về Windows CE Windows CE là một hệ điều hành nhúng do Microsoft phát triển, được tích hợp vào các thiết bị giải trí, các máy subnotebook, máy tính cầm tay (handheld PC, palm-size PC…), các điện thoại di động, hoặc những hệ thống thông tin và giải trí trên xe hơi (AutoPC)… Windows CE là hệ điều hành họ Windows, song được thiết kế cho các thiết bị di động, nên có tính năng nhỏ gọn, đồng thời “có thể điều chỉnh” (modular) và dễ chuyên biệt hóa để có thể thích ứng trong việc điều khiển nhiều hệ thống nhúng khác nhau. Điều này có nghĩa là các kĩ sư có thể chọn lựa những phần nào của hệ điều hành cần sử dụng, ví dụ như một thiết bị có thể không cần bàn phím hoặc màn hình, nhưng có thể đòi hỏi sử dụng được mạng. Bằng cách chọn lựa những module mà thiết bị cần, kích thước và giá thành của thiết bị có thể được giảm xuống. Tuy nhiên, sự điều chỉnh này lại có thể là một khó khăn cho các nhà phát triển ứng dụng, vì có thể Windows CE hỗ trợ một tính năng nào đó, nhưng thiết bị nguồn được sử dụng lại không hỗ trợ. Hiện thời, có khá nhiều sự lẫn lộn quanh các phiên bản của Windows CE cũng như cách gọi tên. Sau đây là một vài phiên bản hiện thời của Windows CE: • Windows CE 3.0: Phiên bản này được thiết kế để cung cấp các đặc tính của một hệ điều hành thời gian thực và một số phát triển khác. Thiết bị Pocket PC sử dụng một dạng biến thể phiên bản này. • Windows CE 2.12: Được sử dụng chủ yếu bởi các nhà sản xuất thiết bị nhúng dùng Microsoft Platform Builder. Phiên bản này không nhắm tới các thiết bị cho người tiêu thụ cuối. • Windows CE 2.21: Phiên bản của Windows CE dùng cho các thiết bị Windows Handheld và Palm-size. 6 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 2.3 Tổng quan về Pocket PC Vào đầu năm 2000, Microsoft giới thiệu một phiên bản của hệ điều hành Windows cho các thiết bị di động gọi là Pocket PC. Hệ điều hành Pocket PC là một phiên bản của Windows CE 3.0, với các tính năng và giao diện được thiết kế riêng cho các thiết bị hỗ trợ cá nhân (PDA – Personal Digital Assistant) và máy tính cầm tay (handheld PC). Có thể hiểu Pocket PC là một phiên bản của Windows CE được cài đặt nhằm tối ưu cho các thiết bị này. Phiên bản hiện đang được sử dụng rộng rãi nhất là Pocket PC 2002. Pocket PC giải quyết được nhiều thiếu sót đã làm giảm thành công của Windows CE, như giao diện quá phức tạp, tốc độ chậm, khả năng lưu trữ kém, nguồn cung cấp năng lượng không tốt… Microsoft đã thêm các tính năng mới cho các thiết bị Pocket PC (Pocket PC – device, những thiết bị PDA sử dụng hệ điều hành Pocket PC) với hệ điều hành Pocket PC chứa phiên bản thu gọn của một số phần mềm như Internet Explorer, Word, Excel, Outlook, Microsoft Reader, Windows Media Player… Các thiết bị Pocket PC là một dạng thiết bị PDA, do nhiều hãng như Compag, HP, Casio sản xuất. PocketPC sử dụng các chuẩn cắm công nghiệp, có tính tương thích và mở rộng cao như có thể kết nối với máy tính để bàn, gắn thêm storage card, modem kết nối Internet... Ghi chú: Từ đây, trong luận văn, khi đề cập đến Pocket PC xin hiểu đây là thiết bị Pocket PC chạy trên phiên bản hệ điều hành Pocket PC 2002, được phát triển trên nhân hệ điều hành nhúng Windows CE 3.0. Ngoài ra, do là một biến thể của Windows CE 3.0, nên khi đề cập tới các vấn đề liên quan như khả năng lập trình, hạn chế về tốc độ, giải pháp của Windows CE… xin hiểu đó cũng là các vấn đề gặp phải với Pocket PC. 7 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 2.4 Khả năng lập trình trên Pocket PC và Windows CE 3.0 Trong phương diện lập trình, có nhiều điểm khác biệt từ lớn cho tới nhỏ giữa Windows CE và phiên bản Windows trên Desktop. Lý do gây ra sự khác biệt này là do Windows CE được xây dựng và thiết kế từ kiến trúc nền sao cho nó có thể ở mức nhỏ nhất có thể. Windows CE bảo đảm 2 điều: các hàm được chọn lọc lại để sử dụng hoặc không hỗ trợ các hàm này nữa (phụ thuộc vào yêu cầu xác định của thiết bị, như H/PC hay P/PC). Trong các hàm được khai báo và cài đặt trùng nhau giữa Win32 API và các thư viện runtime của ngôn ngữ lập trình (ví dụ: lstrlen/strlen, time/GetSystemTime…), WinCE sẽ chỉ cung cấp và hỗ trợ một hàm. Một thay đổi lớn về mặt cấu tạo là cách Win CE cung cấp các thư viện hệ thống. Win CE không còn cung cấp nhiều thư viện khác nhau như GDI, Kernel và User nữa, mà chỉ cung cấp duy nhất một thư viện coredll.lib. Thư viện này cung cấp tất cả các hàm API cũng như nhiều hàm nội (internal) không được cung cấp tài liệu. 2.4.1 Các hàm Win32 API Khoảng 3600 hàm Win32 API được hỗ trợ trong Windows NT và Windows 95/98, còn số hàm API mà Windows 2000 lớn hơn rất nhiều. Trong khi đó, phiên bản 1.0 của WinCE chỉ hỗ trợ 500 trong số các hàm này, trong phiên bản 2.0( được cấu hình cho H/PC và P/PC), số hàm này tăng gấp 3, khoảng 1500 hàm. Các hàm của Windows CE sử dụng mô hình khai báo hàm cho các phiên bản ANSI và UNICODE giống trên desktop. Dựa vào macro UNICODE, hệ điều hành sẽ chọn khai báo hàm tương ứng khi biên dịch chương trình. Tuy nhiên, thực chất, chỉ có phiên bản Unicode của các hàm API này được cài đặt, vì vậy, bất kì chương trình nào được xây dựng nhằm mục đích sử dụng trong môi trường Windows CE đều phải định nghĩa macro UNICODE. Trong môi trường Windows CE, các ứng dụng dạng Win32 console không được hỗ trợ. Mọi ứng dụng đều bắt buộc phải có hàm WinMain (thay cho main()), trong đó, tham số dòng lệnh lpCmdLine là một chuỗi Unicode. Tuy nhiên, ứng dụng không bắt buộc phải có vòng lặp xử lý thông điệp. Các ứng dụng 8 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 dialog-based hoặc không có giao diện để người dùng tương tác vẫn làm việc bình thường mà không cần vòng lặp này. Một đặc điểm nữa khi lập trình trong Windows cần chú ý là các cửa sổ chương trình trong Windows CE chỉ có thể ở một trong hai trạng thái: minimized hay maximized. Vì vậy, Windows CE không còn hỗ trợ cho việc định lại kích cỡ cửa sổ, có nghĩa là các thông điệp như WM_SIZING hay WM_WINDOWPOSCHANGING hoặc biểu tượng Restore trên menu hệ thống cũng không còn cần thiết Cấu hình hệ thống cho chương trình trên Windows CE toàn bộ sử dụng Registry như trên desktop, không sử dụng các biến môi trường hay các file INI. Mọi chương trình đều phải sử dụng Registry, có cơ chế gần như tương tự với Registry trên Windows- phiên bản desktop. Vì một hay nhiều nguyên nhân, một số phần cơ bản trong Win32 API cũng không được hỗ trợ. Các phần này bao gồm: • Hook • Generic, flat, and universal thunks • Services and the event log • Profiling (GetThreadTime và GetProcessTime) • Bảo mật (SACLs, DACLs, …) Từ phiên bản 2.1, Windows CE đã thêm vào một số hỗ trợ cho vấn đề mã hoá (gọi là Cryptography API) cũng như hỗ trợ cho COM (CompChỉ mộtnt Object Model) 2.4.2 Các hàm API và SDK phụ trợ Các hàm này không nằm trong tập hợp các hàm được xem là cơ bản của Win32. Trong khi Win32 hỗ trợ một số lượng khổng lồ các hàm SDK và API ngoại vi, thì Windows CE chỉ hỗ trợ rất ít các hàm này. Một số những tính năng quan trọng được Windows CE hỗ trợ như: 9 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 2.4.2.1 Truyền thông đa phương tiện (Multimedia) Bắt đầu từ Windows CE 2.0, hệ điều hành này đã hỗ trợ một số hàm sử dụng để chơi hoặc thu lại âm thanh. sndPlaySound và các hàm trong họ xử lý wave (waveInStart, waveOutClose...) cũng bắt đầu có thể sử dụng được trong việc tạo và dùng các tập tin WAV. 2.4.2.2 WinSock WinSock được hỗ trợ hạn chế trên Windows CE. Chỉ một vài chức năng cơ bản liên quan tới cơ sở dữ liệu (getservbyname...), các hàm không đồng bộ (WSAAsyceSelect...) và Secure Socket Layer (SSL) được hỗ trợ trên Windows CE. 2.4.2.3 Telephony API (TAPI) Một tập con của TAPI được cung cấp và cài đặt nhưng chỉ để hỗ trợ cho các cuộc gọi đi. Các hàm API này có thể được sử dụng với các thiết bị modem tích hợp sẵn (built-in) hay PCMCIA. 2.4.2.4 Mail API (MAPI) MAPI không được hỗ trợ trên Windows CE, mà thế vào đó là một bộ API riêng cho Windows CE được cung cấp nhằm giúp lập trình viên có thể tạo, gửi mail và sử dụng address book. 2.4.2.5 Active Data Objects (ADO) ADO là một phần mới được hỗ trợ trong Windows CEvới đầy đủ các chức năng cho Recordset và Field. 2.4.3 Các thư viện C-Runtime Windows CE chỉ hỗ trợ một phần các hàm thư viện C-runtime có trên môi trường Desktop. Hỗ trợ ít hàm hơn cho phép Windows CE có thể chạy trên các thiết bị với các tài nguyên hạn chế hơn rất nhiều so với phiên bản Desktop. Các thư viện này chứa khoảng vài trăm hàm nằm trong 15 thư viện 10 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 Loại hàm Hỗ trợ trên Windows CE Nhóm hàm liên quan đến chuỗi (ghép nối chuỗi, sao chép chuỗi, so sánh chuỗi, chiều dài chuỗi, tìm chuỗi, tìm kí tự, tìm token, gán kí tự cho chuỗi, đổi chuỗi thành chữ hoa/thường, đảo chuỗi) Một phần Thông báo lỗi chuỗi Không Các hàm xử lý chuỗi khác Không Phân loại kí tự Một phần Chuyển đổi (ép) kiểu dữ liệu Một phần Thao tác trên vùng đệm (buffer) Có Tách byte đối với các chuỗi multibyte Không Truy xuất tham số Không Thiết lập, thông báo về thời gian, định dạng thời gian Không Các hàm toán học lượng giác, log, exponent, power, trị tuyệt đối... Có Ép kiểu dấu chấm động Một phần Random giá trị Có Các hàm toán học và xử lý dấm chấm động khác Một phần Execute, Exit, Spawn Không Điều khiển tiến trình, điều khiển môi trường Một phần Cấp phát bộ nhớ Một phần Heap Không Memory handler hông Các lệnh gọi hệ thống Không Nhóm hàm liên quan đến stream (đóng/mở stream, định vị stream-pointer, đọc nhiều byte từ stream, đọc kí tự từ stream, ghi nhiều byte ra stream, ghi kí tự ra Một phần 11 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 stream, flushing và buffer) Thông báo lỗi stream Có Các dạng file I/O khác Không Nhóm hàm liên quan đến file (Đóng/mở/tạo file, Đọc/ghi file, Định vị con trỏ file) Không Console và các cổng I/O Không Điều khiển thư mục Không Xử lý file dựa trên file handle Chỉ một Xử lý file dựa trên đường dẫn và tên file Không Lỗi handling Một phần Lỗi Exception handling Không Bảng 2-1: Sự hỗ trợ của Windows CE 3.0 đối với các hàm thư viện C- Runtime File tiêu đề Hỗ trợ trên Windows CE Không Có Không Có Có Không Có Có Không Có Không Không Có 12 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 Có Không Bảng 2-2: Các thư viện C-Runtime được hỗ trợ trên Windows CE 3.0 Một trong những thư viện bị thiếu quan trọng nhất là thư viện stdio. Lý do dễ dàng nhận thấy là vì Windows CE không hỗ trợ ứng dụng dạng console, nên người dùng không có cách tương tác với chương trình thông qua dòng lệnh, và vì vậy, các hàm thư viện stdio được thay thế (ví dụ, hàm printf được thay bằng một hộp thoại - dialog box) Tuy nhiên, có một điều thú vị là trong khi tài liệu về Windows CE thường nói về vấn đề thiếu các hàm này, thì khi áp dụng lập trình thực tế, có một số vẫn có thể sử dụng được. Có lẽ, trong các phiên bản sau, các hàm hoặc cơ chế này sẽ được hỗ trợ. 2.4.4 Các thư viện chuẩn C++ So sánh với các thư viện C-RTL (C-Runtime Library), số lượng các hàm C++ còn bị thiếu hơn rất nhiều. Mặc dù các tính năng quan trong như template, con trỏ hàm... vẫn được cung cấp, song khá nhiều hỗ trợ khác đã bị bỏ qua, như các xử lý ngoại lệ (exception), thông tin kiểu runtime (runtime-type information), và toàn bộ STL (Standard Template Library) (do dựa trên các xử lý exception) 2.4.5 Tiến trình và tiểu trình 2.4.5.1 Hạn chế Trên hệ điều hành Win 32, không có hạn chế nào về số lượng tiến trình có thể chạy đồng thời, và mỗi tiến trình sở hữu 4GB không gian bộ nhớ ảo của riêng nó. Windows CE đã thay đổi nhiều kiến trúc này, chỉ cho phép 32 tiến trình được phép chạy đồng thời. Mỗi tiến trình này được coi là một slot, hỗ trợ 32MB không gian bộ nhớ ảo trong tổng số 1GB bộ nhớ có thể định vị được. Các module cung cấp các chức năng của hệ điều hành, như driver thiết bị, đồ hoạ và các hệ sự kiện con 13 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 (event subsystem) giữ một vài slot đầu tiên khi thiết bị khởi động. Thông thường, một thiết bị đang chạy với phần shell và các dịch vụ thông tin liên lạc có khoảng 24 slots trống cho các ứng dụng của người dùng. Tuy nhiên, mặt khác, Windows CE không giới hạn số tiểu trình trong một tiến trình. Mỗi tiểu trình có quyền truy xuất hoàn toàn lên phần không gian 32MB của tiến trình. Hình 2-1: Phân bố bộ nhớ trong Windows CE Không giống Windows NT hay 95, không gian stack dành cho một tiểu trình không được cấp phát động, mà có cùng kích thước cố định đối với tất cả các tiểu trình trong một tiến trình. Phiên bản trước 2.1 có phần stack cố định là 58KB, và người dùng không thể thay đổi phần stack này. Từ phiên bản 2.1, kích thước mặc định được thiết lập bởi việc sử dụng khai báo /stack trong trình linker. Nếu không có khai báo này, chương trình sẽ tự động sử dụng giá trị 58KB. Một lưu ý quan trọng là kích thước stack của tiểu trình thứ 2 không thể thay đổi trong quá trình chạy bằng cách chỉ ra giá trị dwStackSize trong hàm API CreateThread hay beginthreadex. Tham số này bị bỏ qua và chương 14 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 trình luôn sử dụng giá trị được xác định qua khai báo /stack hoặc qua giá trị mặc định của hệ điều hành. Sự sắp xếp độ ưu tiên của tiểu trình trên Windows CE cũng khác trên Win32. Không giống trên WindowsNT, Windows CE không có lớp ưu tiên và các tiểu trình không được điều phối dựa trên độ ưu tiên của tiến trình chứa nó; Thay vào đó, tất cả các tiến trình đều được xem là ngang nhau, và việc điều phối dựa trên một tiêu chí duy nhất, đó là độ ưu tiên của tiểu trình. Windows CE hỗ trợ 8 mức độ ưu tiên của tiểu trình: • THREAD_PRIORITY_TIME_CRITICAL trên độ ưu tiên bình thường 2 cấp • THREAD_PRIORITY_HIGHEST trên độ ưu tiên bình thường 1 cấp • THREAD_PRIORITY_ABOVE_NORMAL trên độ ưu tiên bình thường 1 cấp • THREAD_PRIORITY_NORMAL chỉ độ ưu tiên bình thường. Đây là mức ưu tiên mặc định cho tất cả các tiểu trình • THREAD_PRIORITY_BELOW_NORMAL dưới độ ưu tiên bình thường 1 cấp • THREAD_PRIORITY_LOWEST dưới độ ưu tiên bình thường 2 cấp • THREAD_PRIORITY_ABOVE_IDLE dưới độ ưu tiên bình thường 3 cấp • THREAD_PRIORITY_IDLE dưới độ ưu tiên bình thường 4 cấp Việc điều phối hoạt động theo chiến lược Round-Robin dựa trên độ ưu tiên, nghĩa là tất cả các tiểu trình có độ ưu tiên cao hơn sẽ hoạt động trước các tiểu trình có độ ưu tiên thấp hơn. Có 2 ngoại lệ trong chiến lược Round-Robin khi điều phối các tiểu trình trên WindowsCE. Bất kỳ tiểu trình nào có được độ ưu tiên THREAD_PRIORITY_CRITICAL đều sẽ không bị ngắt trong khi đang hoạt động, 15 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 ngay cả bởi 1 luồng THREAD_PRIORITY_CRITICAL khác. Nó sẽ hoạt động đến khi hoàn thành hoặc khi hết khối xử lý. Các tiểu trình có độ ưu tiên này thường dành riêng cho việc phục vụ các ngắt trong driver thiết bị và các phần của hệ điều hành. Không nên sử dụng độ ưu tiên này trong ứng dụng. Ngoại lệ thứ hai xuất hiện khi tiểu trình có độ ưu tiên thấp hơn sở hữu một tài nguyên mà một tiểu trình có độ ưu tiên cao hơn phải sử dụng. Trong trường hợp này, tiểu trình có độ ưu tiên thấp sẽ tạm thời được cấp quyền ưu tiên của tiểu trình đang chờ nó để tài nguyên được giải phóng và tiểu trình có độ ưu tiên cao sẽ tiếp tục chạy. Sau khi tài nguyên được giải phóng, độ ưu tiên của tiểu trình sẽ được thiết lập trở lại trạng thái ban đầu 2.4.5.2 Đồng bộ hoá tiểu trình Đồng bộ hoá tiểu trình trên WindowsCE được phân chia thành 3 phần chính • Miền găng • Các interlocked API • Các đối tượng hạt nhân (kernel object) Sử dụng miền găng cũng tương tự như trên Windows32, dùng để bảo đảm không có quá một tiểu trình tại một thời điểm thi hành một khối mã lệnh nào đó. Có 4 thao tác chính trên miền găng: initialize, delete, enter và leave, và các hoạt động của chúng cũng tương tự như trên Windows 98 và NT Các hàm interlock được cung cấp nhằm bảo vệ các thao tác đơn mà không cần dùng miền găng hay mutex. Các hàm này gồm • InterlockedCompareExchange • InterlockedTestExchange • InterlockedIncrement • InterlockedDecrement • InterlockedExchange • InterlockedExchangeAdd 16 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 Các hàm interlock rất tốt trong các trường hợp thao tác trên các biến đếm trong ứng dụng đa tiểu trình (thông qua InterlockedIncerment và InterlockedDecrement), nhưng trong các vấn đề phức tạp hơn, nên sử dụng miền găng hoặc mutex. Các đối tượng hạt nhân là các tài nguyên của hệ điều hành có thể được tham chiếu đến, như handle, từ bất kì tiến trình nào. Các ví dụ của đối tượng hạt nhân là mutex, tiểu trình, và tiến trình Win32 cung cấp 4 đối tượng hạt nhân cho việc đồng bộ hoá • Mutex cung cấp chức năng tương tự miền găng • Event cho phép thông báo tới các tiểu trình khác khi điều kiện được thoả • Semaphore cung cấp khả năng hạn chế số tối đa người dùng thao tác tới tài nguyên • Waitable Time cho phép thông báo tới các tiểu trình khác theo một khoảng thời gian xác định Tuy nhiên, trong Windows CE 3.0, chỉ có mutex, event và semaphore được hỗ trợ. Giống như miền găng, mutex cung cấp các chức năng để hạn chế việc truy xuất vào một khối mã nguồn trong một tiểu trình vào một khoảng thời gian. Để giành mutex, ta sử dụng WaitForSingleObject và giải phóng nó bằng cách gọi hàm ReleaseMutex. Lợi thế lớn nhất của mutex so với miền găng là ở chỗ mutex là một đối tượng hạt nhân, vì vậy nhó có thể được dùng trong nhiều tiến trình. Nếu ta không cần đồng bộ hoá nhiều tiến trình, thì nên sử dụng miền găng bởi độ nhanh trong xử lý của nó trên thiết bị sử dụng WinCE (xin tham khảo [ 6]) Event có tính năng mềm dẻo hơn nhiều so với mutex và cung cấp khả năng thông báo tới các tiểu trình khác nếu một điều kiện ràng buộc nào đó được thoả. Event trên WindowsCE tương tự như trên Windows98 và WindowsNT với việc sử dụng hai hàm SetEvent và PulseEvent 17 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 Semaphore là một đối tượng đồng bộ hoá liên tiến trình có thể có giá trị giữa 0 và một giá trị cực đại nào đó. Trạng thái của đối tượng sẽ được thiết lập thành giá trị “bật” nếu số đếm của nó lớn hơn 0 và ngược lại. Ta có thể sử dụng các hàm CreateSemaphore hay ReleaseSemaphore để tạo hoặc giải phóng một đối tượng Semaphore (Windows CE không hỗ trợ OpenSemaphore). Đối tượng này có thể dùng trong nhiều tiến trình hoặc trong duy nhất một tiến trình. 2.4.6 Vấn đề Unicode Ở mức độ hệ thống, Windows CE sử dụng duy nhất chuẩn Unicode cho tất cả các chuỗi và kí tự, do đó, các ứng dụng trên Windows CE đều phải hỗ trợ Unicode. Đây cũng là một điều thuận tiện nhằm giúp các ứng dụng có khả năng phát triển đa ngôn ngữ, hướng tới thị trường toàn cầu hơn. Tuy nhiên, đây đôi khi lại là khó khăn với các lập trình viên thường gặp khi lập trình với Windows CE. Tất cả các hàm API của Windows CE đều dùng chuỗi Unicode thay thế cho các chuỗi 1 byte (single byte string) hay nhiều byte (multi- byte string) Khi lập trình trên môi trường Windows CE, có một số điểm cần lưu ý: Quyết định xem mã nguồn này sẽ chỉ được sử dụng trên WinCE hay đôi khi cũng được sử dụng trong các hệ đìều hành họ Windows khác (tính khả chuyển). Nếu muốn duy trì sự khả chuyển này, nên sử dụng riêng từng phần xử lý Unicode bằng các macro #ifdef _WIN32_WCE và UNICODE. Nếu muốn duy trì tính khả chuyển, nên sử dụng các chuỗi ở dạng TCHAR. Có thể dùng WCHAR nếu tính khả chuyển này không quan trọng lắm, còn CHAR được sử dụng đối với các chuỗi được đọc/ghi từ các tập tin văn bản ASCII hay các thiết bị phần cứng (như modem…) Nếu ta xây dựng phiên bản Unicode của ứng dụng (ví dụ ta định nghĩa _DUNICODE khi dịch chương trình), TCHAR sẽ được chuyển thành WCHAR. Còn nếu ta xây dựng phiên bản non-Unicode, TCHAR sẽ được chuyển thành 18 KH OA C NT T – Đ H KH TN Chương 2 :Tổng quan về Pocket PC và Windows CE 3.0 CHAR. Một số hàm sử dụng các chuỗi TCHAR thông dụng như _tcscpy, _tcslen, _tcsstr, _tcscat… Các nhóm hàm thường sử dụng mẫu đặt tên theo kiểu strfunction, wcsfunction, mbsfunction. Dựa trên đây, ta có thể biết hàm nào sử dụng cho tập kí tự nào. strfunction là phiên bản xử lý chuỗi truyền thống, wcsfunction là phiên bản xử lý cho các chuỗi wide-character (như Unicode), mbsfuction là phiên bản xử lý cho các chuỗi dạng multibyte-character. tương tự như vậy, cho các mẫu hàm function, wfunction (wfunction thường là phiên bản wide-character của hàm) Nếu dùng các biến WCHAR, ta nên sử dụng các hàm xử lý chuỗi riêng cho UNICODE (như wcscpy, wcslen, wcsstr, wcscat…). Nếu ta cần phải hỗ trợ các chuỗi kí tự ASCII, có thể sử dụng các hàm mbstowcs, wcstombs để chuyển chuỗi qua lại UNICODE. 19 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC Chương 3 : Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC 3.1 Khả năng tính toán của Pocket PC Pocket PC sử dụng một loại CPU khác với CPU thông thường. Máy Pocket PC 2002 sử dụng CPU StrongARM hoặc XScale của Intel. Các CPU này được gọi là các bộ xử lý RISC (Reduced Instruction Set Computer) vì nó chỉ thực hiện một lệnh trong một chu kì CPU. (Mỗi chu kì CPU trong một giây gọi là 1 Hertz hay 1 Hz). Máy PC thông thường của chúng ta sử dụng bộ xử lý CISC (Complex Instruction Set Computer), đòi hỏi nhiều chu kì CPU để xử lý một lệnh xác định. Do đó, các bộ xử lý RISC như StrongARM theo lý thuyết, có thể tính toán lên tới 206 triệu lệnh một giây nếu nó xử lý ở tốc độ 206 Mhz. Các bộ xử lý StrongARM và XScale cũng xử lý các lệnh 32bit, giống như PC thông thường. Tuy nhiên, lại có một khác biệt lớn trong việc xử lý kích thước lệnh. Bộ xử lý CISC cho phép lệnh có thể có chiều dài biến đổi, vì vậy, nó phải tính toán kích thước của dữ liệu cần đọc khi xử lý lệnh. Trong kiến trúc RISC, mỗi lệnh 32bit sẽ có 32 dữ liệu đi kèm. Vì vậy, bộ xử lý luôn biết được phải đọc bao nhiêu dữ liệu., đây là một điểm mạnh của kiến trúc này. Độ rộng của bus cùng với tốc độ bus cũng có một ảnh hướng lớn đến tốc độ xử lý và tính toán của máy tính. Độ rộng của bus chỉ ra số lượng bit (hay byte) dữ liệu có thể đọc từ / ghi lên RAM vào bộ vi xử lý. Còn tốc độ bus chỉ ra dữ liệu có thể được đọc từ RAM vào bộ vi xử lý với độ nhanh như thế nào. Ta có thể hình dung, độ rộng bus như số làn giao thông trên xa lộ, còn tốc độ bus như giới hạn về tốc độ khi lưu thông. Hiện này, StrongARM và XScale sử dụng bus tốc độ 100Mhz và thiết kế hiện nay của Pocket PC cho phép dùng bus 16bit. Điều này có nghĩa là tốc độ bus tối đa là 200MB/giây. 20 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC Vấn đề đặt ra ở đây là như vậy, bộ vi xử lý có thể đạt được tốc độ xử lý bao nhiêu. Do chúng ta cần đọc 8bytes dữ liệu trước khi xử lý một lệnh, nên giả sử chúng ta có được tốc độ bus tối đa là 200MB/giây, thì thực sử, bộ xử lý chỉ thi hành được 25 triệu lệnh. Ngoài ra, lại có một vấn đề khác, đó là cache. Cache là một loại RAM đặc biệt được chứa bên trong CPU và xử lý với cùng tốc độ của CPU. Cache trong bộ xử lý StrongARM là 16K cho mã chương trình và 8K cho dữ liệu, cache trong XScale là 32K cho mã chương trình và 32K cho dữ liệu. Nếu dữ liệu và mã chương trình cần xử lý được chứa trọn trong cache, hệ thống sẽ có thể thi hành với tốc độ thật của CPU. Như vậy, tốc độ của ứng dụng có thể được thi hành sẽ có thể tăng từ 25 lên 206 triệu lệnh một giây, tuỳ theo chương trình và dữ liệu có vừa với kích thước cache không. Tốc độ của hệ thống cũng phụ thuộc vào nguồn cung cấp năng lượng, do đó, khi sử dụng Pocket PC, ta có thể nhận thấy sự khác biệt về tốc độ khi thực thi chương trình. Bây giờ, sử dụng các để so sánh về hiệu suất hoạt động giữa máy DesktopPC và Pocket PC. Các hệ thống Desktop PC hiện tại thường sử dụng bus 100-133 Mhz. Pentium IV có thể sử dụng DDR RAM hoặc RAM BUS (RD RAM) có tốc độ từ 200-800Mhz. Vì vậy, chỉ xét trên phuơng diện RAM, nếu sử dụng RAM 133Mhz, hiệu suất Desktop PC đã tăng 1/3 lần (25 lên 33 triệu lệnh một giây). Tốc độ CPU của Desktop cũng lớn hơn rất nhiều khi hiện tại đã đạt tới tốc độ trên 3Ghz dẫn đến hiệu suất toàn hệ thống cao hơn. Khi lập trình ứng dụng bản đồ trên Pocket PC, đặc điểm về bộ xử lý cũng như tốc độ của Pocket PC ảnh hưởng rất lớn đến tốc độ hiển thị, xử lý cũng như tìm kiếm thông tin GIS. Để giải quyết vấn đề này, ta cần có những giải pháp phù hợp để tăng hiệu năng của ứng dụng, giúp người sử dụng có thể sử dụng được chương trình với tốc độ chấp nhận được. 3.2 Tốc độ và các hỗ trợ khả năng hiển thị Đối với các ứng dụng bản đồ, một trong những vấn đề quan trọng nhất cần phải quan tâm, đó là hỗ trợ hiển thị của môi trường. 21 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC Tương tự trên môi trường Windows – phiên bản desktop, các đối tượng trực quan như văn bản, đồ hoạ được GDI (Graphics Device Interface) điều khiển. Với các hàm GDI này, ứng dụng có thể vẽ hoặc hiển thị đường thẳng, đường cong, các đường khép kín, văn bản và các bitmap. Màu và kiểu của các đối tượng này dựa trên các đối tượng đồ hoạ mà lập trình viên tạo ra và sử dụng. GDI trên Windows CE cũng sử dụng một ngữ cảnh thiết bị (device context ) để lưu trữ dữ liệu cần được hiển thị trên thiết bị. Các đối tượng đồ hoạ được lưu trữ trong device context ở môi trường Windows CE bao gồm một bút vẽ (pen) để vẽ nét, chổi vẽ (brush) để tô màu, font chữ để hiển thị chữ, bitmap phục vụ cho việc sao chép hoặc kéo, bảng màu (palette) để chỉ định màu vẽ, và vùng clipping. Windows CE hỗ trợ ngữ cảnh thiết bị máy in (printer device context) của máy in để vẽ lên máy in, ngữ cảnh thiết bị hiển thị (display device context) để vẽ lên thiết bị video, ngữ cảnh bộ nhớ (memory device context ) để vẽ lên bộ nhớ. Khi xây dựng ứng dụng bản đồ trên Pocket PC, cần chú ý tới việc chỉ được sử dụng các tính năng GDI được hỗ trợ trên môi trường này. Danh sách các tính năng được hỗ trợ được liệt kê trong bảng sau. Tính năng GDI Mô tả Font Raster và TrueType Các font True Type có thể kéo giãn hoặc quay được. Hỗ trợ sẵn 7 font Raster trong ROM. Windows CE chỉ hỗ trợ một loại font, cả raster lẫn TrueType trên 1 loại thiết bị xác định Bảng màu Hỗ trợ các độ sâu màu 1, 2, 4, 8, 16, 24, và 32 bits per pixel (bpp). Một bpp depth of 2 is unique to Windows CE. Các hàm dịch khối bit và thao tác theo vạch Cho phép quay, định cỡ và nối các bitmap Enables you to transform and combine bitmaps Pen và brush Hỗ trợ các loại dashed, wide, và solid pen, patterned 22 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC brush In Hỗ trợ in ấn đồ hoạ (graphics printing) Con trỏ Hỗ trợ đầy đủ về con trỏ, bao gồm cả con trỏ do người dùng định nghĩa. Các thao tác vẽ hình (Shape drawing) Hỗ trợ vẽ ellipse, polygon, rectangle, và round rectangle Bảng 3-1: Các tính năng GDI được hỗ trợ trên Windows CE 3.0 Ta nhận thấy, do cần phải thu gọn kiến trúc cũng như các hỗ trợ nhằm mục đích tối ưu tốc độ cho các thiết bị nhúng có tài nguyên giới hạn, Windows CE đã chỉ cung cấp một cách giới hạn các tính năng của GDI. Windows CE GDI không hỗ trợ các đặc tính: • Thay đổi toạ độ không gian, như SetMapMode, GetMapMode, SetViewportExt, và SetWindowExt. Tọa độ không gian sẽ tương ứng với không gian của thiết bị. • Các hàm World Transform API • Các hàm MoveTo và LineTo • Con trỏ có màu sắc, con trỏ động (animated) Và điều này cũng là một trong những lí do dẫn đến các thư viện đồ hoạ của MFC cũng không hỗ trợ rất nhiều hàm liên quan tới vấn đề hiển thị. Thử nhìn qua các hàm không được hỗ trợ hoặc hỗ trợ nhưng có thay đổi của CWnd, lớp đối tượng hiển thị chuẩn của MFC, trên môi trường Windows CE 3.0, ta đã thấy rất nhiều tính năng quan trọng cần phải sử dụng trong ứng dụng bản đồ không được hỗ trợ. Điều này sẽ gây khó khăn trong quá trình xây dựng chương trình. 23 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC ArrangeIconicWindows OnDeviceChange OnNcRButtonDown CancelToolTips OnDevModeChange OnNcRButtonUp ChangeClipboardChain OnDrawClipboard OnPaintClipboard CreateCaret OnDropFiles OnPaletteIsChanging CreateGrayCaret OnDSCNotify OnParentNotify DlgDirList OnEndSession OnQueryDragIcon DlgDirListComboBox OnEnterIdle OnQueryEndSession DlgDirSelect OnEnterMenuLoop OnQueryNewPalette DlgDirSelectComboBox OnExitMenuLoop OnQueryOpen DragAcceptFiles OnGetMinMaxInfo OnRButtonDblClk DrawMenuBar OnHScrollClipboard OnRButtonDown EnableScrollBar OnIconEraseBkgnd OnRButtonUp EnableToolTips OnInitMenu OnRegisteredMouseWheel FilterToolTipMessage OnMButtonDblClk OnSetCursor FlashWindow OnMButtonDown OnSizeClipboard GetClipboardViewer OnMButtonUp OnSizing GetDCEx OnMDIActivate OnSpoolerStatus GetDSCCursor OnMenuSelect OnStyleChanging GetLastActivePopup OnMouseActivate OnSysColorChange GetSystemMenu OnMouseWheel OnTimeChange GetUpdateRgn OnMoving OnToolHitTest GetWindowContextHelpIdOnNcActivate OnVScrollClipboard GetWindowPlacement OnNcCalcSize OnWindowPosChanging GetWindowRgn OnNcCreate SetClipboardViewer HiliteMenuItem OnNcHitTest SetMenu InvalidateRgn OnNcLButtonDblClk SetWindowContextHelpId IsZoomed OnNcLButtonDown SetWindowPlacement LockWindowUpdate OnNcLButtonUp SetWindowRgn OnActivateApp OnNcMButtonDblClkShowOwnedPopups OnAskCbFormatName OnNcMButtonDown ShowScrollBar OnChangeCbChain OnNcMButtonUp UnockWindowUpdate OnChildActivate OnNcMouseMove ValidateRgn OnCompacting OnNcPaint OnContextMenu OnNcRButtonDblClk Bảng 3-2: Các hàm thuộc CWnd không được hỗ trợ trên Windows CE 24 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC 3.3 Khả năng và hình thức lưu trữ Các Pocket PC thông thường có ROM ít nhất là 8MB, RAM ít nhất là 8MB. Các Pocket PC chuyên dụng có ROM ít nhất là 12MB, RAM ít nhất là 16MB. Tuy nhiên, yêu cầu về dung lượng của RAM và ROM tuỳ thuộc vào loại CPU sử dụng, những thành phần mà nhà sản xuất hỗ trợ trên Pocket PC và tuỳ thuộc vào loại Pocket PC. Do hạn chế về nguồn năng lượng pin và kích thước của thiết bị, Pocket PC không sử dụng các thiết bị lưu trữ như đĩa cứng hay đĩa mềm mà nó sử dụng một cơ chế gọi là Bộ lưu trữ đối tượng (Object store). Object store là một vùng RAM được người dùng định nghĩa, dùng để lưu trữ các tập tin, các thông tin registry và các database (gọi là Object Store dạng Storage). Vùng RAM còn lại dùng làm bộ nhớ cho các chương trình được thực thi (gọi là Object Store dạng Program). Object store vẫn lưu giữ được thông tin của các ứng dụng và dữ liệu ngay cả khi năng lượng cung cấp chính bị mất nhờ nguồn pin dự trữ. Có thể xem object store như là đĩa cứng trên thiết bị dùng Windows CE vì các end-user không biết về object store do Microsoft đã cung cấp trình WinCE Explorer để đọc nội dung của nó (tương tự như Microsoft Windows Expoler để đọc nội dung của đĩa cứng trên máy desktop PC) 3.3.1 Tập tin trên Windows CE Windows CE cung cấp một tập các hàm API cho phép lập trình viên truy xuất các tập tin cả trên ROM lẫn trên RAM. Điểm khác biệt chủ yếu đầu tiên mà ta cần lưu ý là object store trên Windows CE là việc thiếu các kí tự ổ đĩa. Windows CE sử dụng các thư mục dưới thư mục gốc cho việc cài đặt các thiết bị của người dùng. Ví dụ, nếu người dùng gắn một flash card vào máy, Windows CE sẽ tạo ra một thư mục /Storage Card 1. Cứ mỗi flash card được gắn vào, con số này sẽ tăng lên (/Storage Card 2,…) Đường dẫn tới tập tin được giới hạn bởi MAX_PATH (có thể dài tối đa 260 kí tự, giống như trên Windows) Tuy nhiên, trên Windows CE không có khái niệm thư mục hiện hành, ta phải truy xuất các tập tin bằng các đường dẫn dầy đủ của nó. 25 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC Trên Windows CE 2.0, các tập tin có kích thước tối đa là 4MB và số lượng tối đa trong object store là 65535. Trên Windows CE 3.0, kích thước tối đa cho một tập tin là 32MB, số lượng tối đa đối tượng lưu trữ trong object store là gần 4.000.000. Vì các tập tin có thể được lưu trữ trong cả RAM lẫn ROM, nên Windows CE cũng đã hỗ trợ một số thuộc tính tập tin như: FILE_ATTRIBUTE_NORMAL là thuộc tính mặc định của tập tin FILE_ATTRIBUTE_READONLY thiết lập thuộc tính chỉ đọc cho tập tin FILE_ATTRIBUTE_ARCHIVE thiết lập thuộc tính lưu trữ cho tập tin FILE_ATTRIBUTE_SYSTEM thiết lập thuộc tính hệ thống cho tập tin FILE_ATTRIBUTE_HIDDEN thiết lập thuộc tính ẩn cho tập tin FILE_ATTRIBUTE_INROM chỉ ra tập tin được lưu trữ trong ROM FILE_ATTRIBUTE_DIRECTORY chỉ ra tập tin là một thư mục FILE_ATTRIBUTE_TEMPORARY chỉ ra tập tin nằm trên một thiết bị do người dùng cài đặt như một PC card… 3.3.2 Cơ sở dữ liệu trên Windows CE Có thể xem Database trên Windows CE như một dạng tập tin đặc biệt, có tổ chức và cung cấp sẵn các thao tác. Giống như các cơ sở dữ liệu khác, Windows CE Database API giúp cho việc lưu trữ và tổ chức dữ liệu trở nên đơn giản hơn. Các ứng dụng internal như Contacts, Tasks… trên Windows CE là các ứng dụng sử dụng Database API để lưu trữ thông tin. Mỗi database là một tập các record chứa một hay nhiều thuộc tính thông tin và giá trị của nó. Database tạo bằng Database API có một số giới hạn: • Số thứ tự sắp xếp tối đa là 4 • Kích thước tối đa của thuộc tính là 64KB • Kích thước tối đa của record là 128KB • Database của Windows CE chỉ có một cấp 26 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC • Không hỗ trợ khoá (locking) database, chỉ cung cấp notification khi thay đổi xảy ra • Các record không được chứa các record khác hay chia xẻ giữa các database với nhau Các database phức tạp có quan hệ cũng không được hỗ trợ trên Pocket PC và Windows CE 3.0. Thay vào đó, Database API nên được dùng để lưu trữ các thông tin quan hệ đơn giản như danh sách mua hàng, hay thông tin liên lạc cá nhân… Mỗi thuộc tính của database được định nghĩa với một kiểu dữ liệu xác định. Các kiểu dữ liệu được hỗ trợ trên database của Windows CE gồm Thuộc tính Mô tả CEVT_BLOB Một khối nhớ, lưu trữ theo cấu trúc CEBLOB CEVT_FILETIME Cấu trúc FILETIME CEVT_I2 Số nguyên 16-bit có dấu CEVT_I4 Số nguyên 32-bit có dấu CEVT_LPWSTR Một chuỗi null-terminated CEVT_U12 Số nguyên 16-bit không dấu CEVT_U14 Số nguyên 32-bit không dấu CEVT_BOOL Giá trị luận lý (có từ Windows CE 2.1) CEVT_R8 Số thực double 64-bit có dấu (có từ Windows CE 2.1) Bảng 3-3: Các kiểu dữ liệu được hỗ trợ trên database của Windows CE Bắt đầu từ Windows CE 2.1, database có thể nằm trên các thiết bị ngoài như flash card. Người sử dụng có thể mount database để sử dụng trên thiết bị, Database trên windows CE hỗ trợ các thao tác: Tạo database, mở database, sắp xếp trên database, đọc dữ liệu từ database, ghi xuống database, tìm kiếm trên database. Sử dụng tập tin hay database là một vấn đề cần được xem xét khi tổ chức lưu trữ dữ liệu GIS trên Pocket PC. 27 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC 3.4 Cấp phát bộ nhớ Đối với ứng dụng bản đồ, một vấn đề thường gặp là phải cấp phát bộ nhớ nhiều lần. Việc sử dụng dư thừa hay sai sót trong cấp phát, giải phóng bộ nhớ có thể để lại hậu quả rất nghiêm trọng, đặc biệt là khi số lượng đỉnh của đồ thị là rất lớn. Trên môi trường Pocket PC, việc để lại những vùng nhớ dư thừa sẽ làm chậm toàn bộ hệ thống, đồng thời xảy ra những lỗi rất nghiêm trọng, do dung lượng bộ nhớ không nhiều. Windows CE sử dụng các hàm API liên quan tới bộ nhớ ảo để cấp phát bộ nhớ cho vùng heap và stack. Điểm lợi của sử dụng bộ nhớ ảo là bộ nhớ ảo không phân mảnh: Windows CE luôn cấp phát một số nguyên các trang. Vì Windows CE quản lý bộ nhớ ảo theo các khối 64KB, do đó khi chương trình không sử dụng hết vùng nhớ 64KB thì nên dùng một vùng nhớ heap để tránh lãng phí. 3.4.1 Các cơ chế sử dụng bộ nhớ • Local Heap Heap là một vùng không gian bộ nhớ ảo dự trữ mà Windows CE quản lý để cấp phát cho chương trình. Kích thước của heap khoảng 4bytes hay 8bytes, tùy thuộc loại CPU • Separate Heap Thay vì tăng thêm kích thước heap cục bộ, ta nên tạo một vài vùng heap nhỏ nhằm tăng tính hiệu quả. • Stack Stack là một vùng nhớ lưu trữ cho các biến được tham chiếu trong một hàm. Windows CE cấp phát bộ nhớ cho một biến từ stack và thu hồi bộ nhớ sau khi hàm hoàn tất. Khi một tiến trình hay tiểu trình bắt đầu, Windows CE cấp phát một trang bộ nhớ stack cho tiểu trình đó. Mỗi tiểu trình có một stack và mỗi stack có một vùng 2KB cuối cùng để điều khiển tràn stack. • Static data block Khổi dữ liệu tĩnh (Static data block) là một khối nhớ mà Windows CE dành cho chương trình. Khối này chứa chuỗi, buffer, và các giá trị tĩnh khác mà chương 28 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC trình sử dụng trong suốt quá trình thực thi. Ta có thể giảm kích thước của các khối dữ liệu bằng cách khai báo dữ liệu trong phần read/write với khai báo const. 3.4.2 Nhận biết tình trạng thiếu bộ nhớ Cho dù cấp phát bộ nhớ hiệu quả thế nào và chương trình có sử dụng bộ nhớ RAM hiệu quả thế nào, thiết bị Pocket PC vẫn có thể bị thiếu bộ nhớ. Ở mức độ lập trình, ta có thể biết được tình trạng thiếu bộ nhớ theo những cách sau: • Hàm Virtual Alloc trả về 0, cho biết cấp phát không thành công • LocalAlloc hoặc HeapAlloc trả về 0, cho biết việc tăng kích thước vùng heap không thành công • Windows CE trả về một lỗi stack cho chương trình, cho biết cấp phát stack không thành công. • Khi một chương trình có yêu cầu cấp phát bộ nhớ, Windows CE kiểm tra và lọc yêu cầu, nhằm tránh việc sử dụng tất cả bộ nhớ có sẵn cho một cấp phát lớn. Khi Windows CE bước vào tình trạng thiếu bộ nhớ, nó sẽ giảm giới hạn bộ nhớ tối đa cho chương trình • Windows CE gửi thông điệp WM_HIBERNATION tới các ứng dụng nhằm thông báo tình trạng thiếu bộ nhớ. 3.5 Tương tác giữa người sử dụng và thiết bị Người sử dụng tương tác với thiết bị thông qua một màn hình touch-screen LCD (màn hình cảm nhận). Không sử dụng bàn phím (keyboard) và chuột (mouse) thông thường, Pocket PC hỗ trợ nhập liệu thông qua một bàn phím logic, gọi là SIP (Soft Input Panel). Bàn phím logic này thực chất là một khung cửa sổ luôn tồn tại trên màn hình, mô tả và sắp xếp các phím tương tự trên máy PC thông thường. Người dùng sẽ giao tiếp với SIP thông qua ngón tay hoặc stylus (một cây viết vật lý, cho phép nhập liệu bằng cách viết trực tiếp lên màn hình) 29 KH OA C NT T – Đ H KH TN Chương 3 :Một số vấn đề khi xây dựng ứng dụng bản đồ trên Pocket PC Thay thế cho việc nhấn Enter hay nhấn đúp chuột, Pocket PC sử dụng cơ chế single-tapping (nhấn đơn) lên touch screen. Người dùng chỉ cần nhấn một lần lên một đối tượng hoặc liên kết, hệ điều hành sẽ mở đối tượng/liên kết tương ứng. Ngoài ra, để giao tiếp với ứng dụng, người dùng có thể nhấn-và-giữ (tap-and- hold). Đây là cơ chế có tác dụng tương tự như việc sử dụng context-menu bằng cách nhấn phải chuột trên PC. Khi người dùng nhấn-và-giữ trên một đối tượng, có thể một menu hoặc một tooltip sẽ hiện ra, tuỳ theo đối tượng đó xử lý như thế nào. Trong ứng dụng bản đồ, ta nhận thấy việc nghiên cứu và xử lý các cách tương tác trên là rất cần thiết, bởi trong dạng ứng dụng này, việc di chuyển, phóng to, thu nhỏ, tra cứu bản đồ là những hành động rất thường xuyên xảy ra. Bên cạnh đó, phải định nghĩa lại trong ứng dụng các hardware keys (phím vật lý) nhằm tận dụng các phím di chuyển sẵn có của thiết bị Pocket PC nhằm tăng tốc độ tương tác cho người dùng khi xem bản đồ. 30 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Chương 4 : Các giải pháp cho ứng dụng bản đồ trên Pocket PC 4.1 Yêu cầu chung Các ứng dụng liên quan tới hệ thống thông tin địa lý (Geography Information System – GIS) phát triển trên Pocket PC và hệ điều hành Windows CE gặp phải các vấn đề về tối ưu hoá bộ nhớ cũng như tốc độ ứng dụng do những vấn đề đã trình bày ở phần trên. Khi đưa ra các giải pháp cho ứng dụng bản đồ trên Pocket PC, cần phải • Bảo đảm việc tổ chức lưu trữ thông tin và dữ liệu tối ưu trên Object Store dạng Program • Bảo đảm lưu trữ ít nhất thông tin có thể trên Object Store dạng Storage • Bảo đảm được tốc độ khi xử lý tính toán để hiển thị và tìm kiếm, tra cứu thông tin. 4.2 Vấn đề tối ưu tốc độ hiển thị 4.2.1 Cơ chế xác định vùng vẽ Để hiển thị bản đồ cho người dùng quan sát, bất cứ một chương trình bản đồ nào cũng phải vẽ lên màn hình. Và phần hiển thị lên màn hình sẽ là phần mà người dùng đang muốn xem xét để có thông tin. Người dùng cũng có thể thay đổi vùng nhìn của bản đồ và sự thay đổi vùng nhìn của người dùng này sẽ kéo theo các thao tác vẽ lại bản đồ. Khi vẽ lại bản đồ nếu mọi thứ đều được vẽ thì có nghĩa là tất cả các đường, các tên đường, các địa điểm... nằm trên vùng nhìn thấy hoặc không nằm trên vùng nhìn thấy đều được vẽ lại. Điều này có thể không gây ra vấn đề kĩ thuật nào trên các máy tính để bàn Desktop nếu như kích thước bản đồ nằm trong kích thước cho phép của thiết bị (toạ độ từ -32768 đến 32767). Lý do giúp ta có thể vẽ lại toàn bộ bản đồ 31 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC mà vẫn làm người sử dụng chấp nhận được là nhờ vào tốc độ tính toán và hiển thị rất nhanh của các thế hệ máy tính để bản hiện nay. Tuy nhiên như đã đề cập ở trên, kích thước hiển thị nằm trong vùng giới hạn từ -32768 đến 32767, nên nếu một bản đồ có toạ độ nằm ngoài vùng giới hạn trên thì khi vẽ sẽ bị sai thông tin vì tràn số. Do lý do trên, ta cần áp dụng giải pháp nhằm tính toán lại các vùng cần vẽ. Giải pháp này giúp chương trình chỉ vẽ những đối tượng nào nằm trong vùng nhìn thấy, còn các đối tượng nằm ngoài vùng nhìn thấy sẽ được bỏ qua. Tuy nhiên với cách tiếp cận này cũng còn điểm hạn chế. Nếu một đối tượng nằm trong vùng nhìn thấy thì đối tượng đó sẽ được vẽ. Điều đó có nghĩa là đối tượng có một phần nằm trong vùng nhìn thấy và một phần nằm ngoài vùng nhìn thấy sẽ được vẽ. Đối tượng nằm hoàn toàn trong vùng nhìn thấy cũng sẽ được vẽ. Với đối tượng nằm hoàn toàn trong vùng nhìn thấy thì việc vẽ hoàn toàn đối tượng là hợp lý. Nhưng đối với đối tượng chỉ có một phần nằm trong vùng nhìn thấy thì việc vẽ toàn bộ đối tượng cần phải được cân nhắc. Trên máy tính để bản việc vẽ hoàn toàn một đối tượng chỉ có một phần nằm trong vùng nhìn thấy không ảnh hưởng gì nhiều đối với tốc độ vẽ và tốc độ tính toán. Nhưng đối với chương trình chạy trên PocketPC sẽ là một vấn đề đáng quan tâm. Có thể kiểm tra tốc độ hỗ trợ về việc vẽ đối tượng của Windows CE 3.0 bằng việc vẽ một số đối tượng cơ bản như đường thẳng, hình chữ nhật, hình đa giác. Thực hiện các phép tịnh tiến để thay đối vùng nhìn ta có thể cảm nhận được tốc độ của việc vẽ đối tượng rất rõ rệt. Chính vì hạn chế tốc độ vẽ trên Windows CE 3.0 cho nên việc vẽ một đối tượng cần được cân nhắc rất kĩ lưỡng. Với đối tượng chỉ có một phần nằm trong vùng nhìn thấy thì chỉ nên vẽ phần nhìn thấy của đối tượng, phần khuất của đối tượng không cần vẽ. Từ các phân tích trên ta có các vấn đề cần giải quyết như sau: Các đối tượng nào có thể nhìn thấy (nhìn thấy một phần hoặc toàn bộ) Đối với các đối tượng nhìn thấy một phần thì phải xác định phần nhìn thấy của đối tượng 32 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Có một số biện pháp để giải quyết vấn đề 4.2.1.1 Các đối tượng nào có thể nhìn thấy Việc trước tiên trong quá trình cải tiến tốc độ vẽ đó là xác định xem đối tượng nào có thể nhìn thấy. Ta xem xét vấn đề sau: Cho một điểm hỏi có thể nhìn thấy điểm này hay không ? Đối với các đối tượng là điểm thì chỉ cần các định xem điểm đó có nằm trong vùng nhìn thấy hay không. Cho một đường thẳng hỏi đường thẳng này có thể nhìn thấy hay không? Câu trả lời cho vấn đề này rất đơn giản. Ta chỉ việc xem đường thẳng trên có giao với vùng nhìn hay không. Nếu như đường thẳng có giao với vùng nhìn thì đường thẳng được xem là đối tượng có thể nhìn thấy. Ngược lại đường thẳng không thể nhìn thấy Hình 4-1: Đoạn thẳng giao vùng nhìn Một câu hỏi khác lại đặt ra, cho một cung gồm nhiều đoạn thẳng nối với nhau hỏi cung này có thể nhìn thấy hay không. Nhận xét: Cung có thể nhìn thấy nều như ta nhìn thấy toàn bộ cung hoặc một phần của cung. Nhìn thấy toàn bộ cung có nghĩa là tất cả các đoạn thẳng của cung đều nằm hoàn toàn trong vùng nhìn thấy. Nhìn thấy một phần của cung có nghĩa là nhìn thấy ít nhất một đoạn thẳng hoặc một phần đoạn thẳng của cung. 33 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Vì vậy để xác định xem cung có thể nhìn thấy hay không ta chỉ việc xác định kiểm tra tất cả các đoạn thẳng của cung. Nếu có đoạn thẳng nhìn thấy thì có nghĩa là cung nhìn thấy được. Nếu không nhìn thấy tất cả các đoạn thẳng của cung có nghĩa là cung không nhìn thấy được Hình 4-2: Cung giao vùng nhìn Đối với các đối tượng là các đường khép kín thì cũng tương tự như là một cung có điểm đầu trùng với điểm cuối. Như vậy ta có thể xác định được các đối tượng nhìn thấy theo cách phân tích trên. Tuy nhiên với cách này thì để xác định một cung có thể nhìn thấy hay không ta phải duyệt tất cả các đoạn thẳng của cung. Một phí tổn rất lớn nếu như ta duyệt nhiều cung. Do đó một cải tiến Heuristic được đưa ra là sử dụng hình chữ nhật bao. Nhận xét: Mỗi cung đều có một hình chữ nhật bao có góc trên trái (xmin,ymin) và góc dưới phải (xmax,ymax). xmin=min( tất cả các x của các đường của cung) ymin=min( tất cả các y của các đường của cung) xmax=max(tất cả các x của các đường của cung) 34 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC ymax=max(tất cả các y của các đường của cung) • Nếu hình chữ nhật bao này không giao với vùng nhìn thấy thì chắc chắn cung không nhìn thấy được. • Nếu như hình chữ nhật bao này giao với vùng nhìn thấy thì có thể xảy ra các trường hợp sau: o Có thể cung nhìn thấy được o Có thể cung không nhìn thấy được Như vậy, phạm vi các cung cần duyệt đã được thu hẹp. Chỉ các cung có hình chữ nhật bao giao với vùng nhìn thấy mới được xem xét nhằm vẽ lại trên màn hình. 4.2.1.2 Phân vùng cho các đối tượng. Bản đồ sẽ được chia ra thành nhiều phần bằng nhau. Mỗi phần là một hình chữ nhật. Trong mỗi hình chữ nhật ta sẽ xác định các đối tượng giao với hình chữ nhật đó. Khi cập nhật lại vùng vẽ ta chỉ cần xác định xem những hình chữ nhật nào giao với vùng vẽ. Sau đó vẽ các đối tượng của các hình chữ nhật. Với ý tưởng trên ta chỉ làm phép duyệt trên một số ít hình chữ nhật là ta có thể biết ngay các đối tượng cần vẽ, không phải duyệt các đối tượng. Do đó cải tiến tốc độ duyệt. Tuy nhiên việc cải tiến tốc độ này không nâng lên đáng kể. Khi ta chia bản đồ thành nhiều hình chữ nhật thì một đối tượng có thể thuộc nhiều hình chữ nhật khác nhau. Do đó khi duyệt có thể xảy ra hiện tượng trùng lắp. 4.2.1.3 Đánh giá Để xác định các hình chữ nhật và các đối tượng giao với nhìn chữ nhật thì cần có một chi phí nhất định ban đầu để tính xem đối tượng nào giao với hình chữ nhật nào. Để lưu trữ thông tin về các đối tượng của hình chữ nhật thì cần chi phí bộ nhớ. Chi phí này có thể không đáng kể trên các ứng dụng chạy trên các máy để bàn. Nhưng là rất đáng kể đối với các ứng dụng chạy trên PocketPC. Vì vậy ta có thể sử dụng giải pháp ban đầu là xác định vùng bao các cung mà không dùng giải pháp chia bản đồ. Điều này không làm giảm tốc độ vẽ. Hơn nữa với giải pháp xác định vùng bao các cung ta còn có thể cải tiến để tăng tốc độ duyệt. 35 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Nhận xét rằng: mỗi cung chỉ thuộc một con đường, mỗi con đường bao gồm nhiều cung. Như vậy thay vì duyệt tất cả các cung để so sánh vùng bao thì ta có thể duyệt tất cả các con đường. Sau đó ta mới duyệt tất cả các cung của con đường giao với vùng bao. Rõ ràng cách làm này tương tự như cách làm chia bản đồ ra làm nhiều phần bằng nhau. Vì các cung đều được đánh dấu vào một hình chữ nhật nào đó. Ở giải pháp chia bản đồ ra làm nhiều phần thì hình chữ nhật chia là bằng nhau đối với tất cả các phần. Ở giải pháp vẽ theo con đường thì các hình chữ nhật có thể thay đối kích thước tùy thuộc vào con đường. Điều này sẽ làm cho phép chia trở nên linh động hơn, đồng thời cũng tránh được sự trùng lắp thông tin. Tóm lại mô hình để xác định các đối tượng nhìn thấy như sau: Gọi MBR(o) là hình chữ nhật bao của đối tượng o P= { p các con đường \ MBR(p) ∩ MBR(vùng nhìn) } A={ a các cung ∈ P \ MBR(a) ∩ MBR(vùng nhìn) } L={ l các đoạn ∈ A \ l ∩ MBR(vùng nhìn) } 4.2.1.4 Xác định phần nhìn thấy của đối tượng Theo phân tích phần trên ta đã xác định được các đối tượng có thể nhìn thấy. Bây giờ ta tiến hành xem xét chi tiết đối tượng nào thực sự được nhìn thấy. Dựa vào mô hình trên ta có như sau P= { p các con đường \ MBR(p) ∩ MBR(vùng nhìn) } A={ a các cung ∈ P \ MBR(a) ∩ MBR(vùng nhìn) } L={ l các đoạn ∈ A \ l ∩ MBR(vùng nhìn) } Bây giờ ta xác định L bằng cách xây dựng một thuật toán để xác định phần giao của l với vùng nhìn. Ta có thể sử dụng thuật toán LiangBarsky cho việc xén đoạn thẳng trong một hình chữ nhật (tham khảo [ 1] ) Với các đối tượng là các đa giác ta sử dụng thuật toán xén đa giác Sutherland-Hodgeman (tham khảo [ 1] ) 36 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC 4.2.2 Cơ chế sử dụng bộ đệm Việc vẽ một đối tượng lên màn hình bao gồm các thao tác. • Điều chỉnh đối tượng theo tỉ lệ (zoom) • Tịnh tiến đối tượng từ vùng vẽ lên vùng hiển thị • Vẽ đối tượng Như vậy ta thấy việc chỉnh tỉ lệ sẽ được thực hiện lại mỗi khi thay đổi vùng vẽ, điều này sẽ làm mất một khoảng thời gian cho việc tính toán tỉ lệ (phải sử dụng phép chia). Giải pháp đưa ra là: Nếu như là lần đầu tiên vẽ thì ta thực hiện phép toán tỉ lệ trên đối tượng và đưa vào vùng nhớ tạm Đến lần thực hiện tiếp theo, vì đã thực hiện việc tỉ lệ (zoom) ở bước vẽ trước đó cho nên không cần thực hiện lại thao tác này. Ta chỉ cần truy xuất đến vùng nhớ đệm chứa thông tin đối tượng đã được tỉ lệ. Thông tin đó là các toạ độ hiển thị đã được thực hiện tỉ lệ (zoom). Điều này tiết kiệm được nhiều phép tính toán trên đối tượng, dẫn đến tiết kiệm được tổng thời gian tính toán nhằm hiển thị bản đồ. Sau cùng ta chỉ phải thực hiện việc tính tiến đối tượng từ vùng vẽ đến vùng hiển thị và vẽ đối tượng 37 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Đối tượng cần vẽ Đúng SaiVẽ lần đầu tiên ? Thực hiện thao tác tỉ lệ (zoom) Lấy thông tin đã tỉ lệ (zoom) từ vùng đệm Tịnh tiến đối tượng đến vùng vẽ Lưu vào vùng đệm Vẽ đối tượng Hình 4-3: Lưu đồ vẽ đối tượng 4.3 Tìm đường đi ngắn nhất 4.3.1 Các thuật toán tìm kiếm 4.3.1.1 Đặt vấn đề Đối với các ứng dụng GIS, một trong những vấn đề cơ bản cần được giải quyết là tìm đường đi giữa hai điểm trên bản đồ và các bài toán liên quan (tìm đường đi ngắn nhất, tìm đường đi với các ràng buộc có ghé qua hoặc phải tránh một số điểm, các bài toán phân phối như điều phối giao thông, giao hàng...). Các nghiên cứu về Trí tuệ nhân tạo và Lý thuyết đồ thị đã đặt những nền tảng hết sức vững chắc cho việc biểu diễn và giải quyết các bài toán như trên với nhiều thuật toán tìm kiếm khác nhau. Trong khuôn khổ luận văn, chúng em xin trình bày một số vấn đề liên quan đến 2 thuật toán tìm kiếm trên đồ thị phổ biến và thường được sử dụng trong các ứng dụng GIS là Dijkstra Moore (tìm đường cho các đồ thị đơn có trọng số của 38 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC các cung không âm) và A* (tìm đường heuristic trên đồ thị tổng quát) đối với môi trường Pocket PC và Windows CE 3.0. Trước khi xem xét hai thuật giải tìm đường này, ta có một số quy ước đối với bài toán tìm kiếm đường đi ngắn nhất trên đồ thị G: Kí hiệu Mô tả u0 Đỉnh xuất phát goal Đỉnh kết thúc close Tập các đỉnh đóng (các đỉnh đã được xem xét và được xác định chính xác đường đi ngắn nhất open Tập các đỉnh mở (các đỉnh còn lại) l[i,j] Trọng số của cung (i,j) d[i] Khoảng cách min từ i đến u0 v[i] Khoảng cách min được ước lượng từ i đến goal Bảng 4-1: Quy ước ký hiệu trong thuật toán tìm dường đi ngắn nhất Như vậy, nhiệm vụ của các thuật toán tìm đường là xác định được giá trị d[goal] – giá trị thể hiện đường đi ngắn nhất giữa hai đỉnh xuất phát và kết thúc trên đồ thị. 4.3.1.2 Tìm đường đi ngắn nhất bằng Dijkstra Moore Thuật toán Dijkstra Moore được trình bày như sau: d[i]= +∝ ∀i∈[1..n] close=[u0] open=[1..n]-[u0] k=u0 repeat {sửa đổi ước lượng min} ∀i∈open 39 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC d[i]=min {d[i],d[k]+l[k,i]} {mở rộng tập close} chọn k ∈ open sao cho ∀i∈open thoả điều kiện d[k] ≤ d[i] open=open-[k] close=close+[k] until goal ∈ close 4.3.1.3 Tìm đường đi ngắn nhất bằng A* Các thuật toán cổ điển như Dijkstra được xây dựng trên các mô hình thuần tuý lí thuyết, trong đó đồ thị được coi là tập hợp các đỉnh và cung nối giữa các đỉnh đó, ngoài ra, không có bất kì một thông tin bổ sung nào cho bài toán. Chúng chỉ tìm lời giải dựa trên việc duyệt lần lượt từ đỉnh này sang đỉnh khác mà không sử dụng “khả năng phán đoán học được” (heuristic). Thông tin heuristic, dù không chính xác và đảm bảo, nó làm tăng các cơ hội để việc tìm kiếm tiến tới đích nhanh hơn, tối ưu hoặc cả hai. tóm lại nó làm tăng tốc độ và tỉ lệ thành công. (Tham khảo [ 3] ) Đối với các bài toán tìm đường trên thực tế, đồ thị thường có số đỉnh lớn đến rất lớn, song các đồ thị này luôn cung cấp thêm các thông tin phụ giúp chúng ta định hướng tốt hơn trong quá trình tìm lời giải. Thuật giải A* áp dụng trong tìm đường là thuật giải dựa trên Dijkstra, với tư tưởng tìm đường dựa trên chiến lược tìm kiếm theo chiều rộng. d[i]= +∝ ∀i∈[1..n] close=[u0] open=[1..n]-[u0] k=u0 repeat {sửa đổi ước lượng min} ∀i∈open 40 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC d[i]=min {d[i],d[k]+l[k,i]} {mở rộng tập close} chọn k ∈ open sao cho ∀i∈open thoả điều kiện (d[k]+v[k]) ≤ (d[i]+v[i]) open=open-[k] close=close+[k] until goal ∈ close Theo chứng minh lý thuyết, nếu các trọng số của đồ thị G đều là dương (l[i,j]>0 ∀i, j) và v[i] đều là lượng giá dương thấp hơn đường đi ngắn nhất từ đỉnh i đến u0 (0<v[i]<d[i] ∀i), thì thuật toán A* luôn cho kết quả đúng và không bao giờ yêu cầu nhiều thời gian hơn thuật toán Dijkstra. Như vậy, ta nhận thấy, thứ nhất, thuật toán Dijkstra có thể được xem là trường hợp “suy biến” của A* trong trường hợp v[i]=0; thứ hai, nếu v[i] là ước lượng đúng thi thuật toán A* có độ phức tạp thời gian là tuyến tính. (Tham khảo [ 5] ) 4.3.2 Áp dụng Xây dựng hàm ước lượng trong thuật toán A* ứng dụng trong việc tìm kiếm lời giải của các bài toán là vấn đề rất đa dạng và được sử dụng tuỳ thuộc vào các bài toán khác nhau. Từ các nhận định và trình bày trên, do đặc điểm của môi trường cài đặt và áp dụng là Pocket PC và Windows CE 3.0, cũng như ứng dụng là một ứng dụng GIS, chúng em quyết định sử dụng thuật toán A* với hàm ước lượng được xây dựng dựa trên khoảng cách Euclide giữa hai điểm trên mặt phẳng. Thông tin heuristic này được sử dụng với mục đích cho rằng khoảng cách từ điểm đang xét tới đích càng gần thì điểm đang xét càng có nhiều khả năng được chọn là điểm kế tiếp. 41 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC 4.4 Tìm kiếm thông tin phi không gian Tìm kiếm thông tin về các con đường, quận huyện, địa danh, cơ quan, xí nghiệp... nhằm mục đích tra cứu, biết chi tiết các thông tin về đối tượng là một trong những yêu cầu cơ bản của một ứng dụng GIS. Có nhiều cách lưu trữ thông tin, thể hiện và cơ chế phục vụ người sử dụng tìm kiếm thông tin khác nhau. 4.4.1 Lưu trữ và biểu diễn thông tin Tìm kiếm thông tin phi không gian liên quan trực tiếp tới việc sử dụng các cấu trúc dữ liệu thích hợp để lưu trữ và biểu diễn các thông tin cần thiết. Nếu so sánh, thì có thể nói việc tìm kiếm thông tin này tương đối giống với việc tra cứu nghĩa của một từ trong từ điển. Tuy nhiên, khác với từ điển, đối với một ứng dụng GIS, một số thông tin cần tìm kiếm, hoặc có thể đã được lưu trữ sẵn, hoặc cũng có thể được phát sinh tại thời điểm tra cứu. Điều này dẫn đến việc phải tính toán nên chọn lựa hình thức cung cấp thông tin nào (lưu trữ trước hoặc phát sinh tại thời điểm tra cứu). Sau đó, dựa vào hình thức này mới quyết định cấu trúc dữ liệu thích hợp để biểu diễn trong ứng dụng. Việc chọn lựa này đặc biệt quan trọng trong môi trường Windows CE, với tài nguyên và tốc độ xử lý chậm. Xem xét trên một số thông tin phụ tiêu biểu ở đây, liên quan đến đường, bao gồm: tổng chiều dài con đường, đường này giao với những đường nào, đường này thuộc quận nào... 4.4.1.1 Lưu trữ thông tin trên Object Store Các thông tin phụ có thể được lưu trữ trong Object Store trước khi thực thi ứng dụng. Theo đó, để giải quyết vấn đề, sẽ phải qua các bước sau: • Nhận thông tin tra cứu từ người sử dụng • Tra cứu để tìm vị trí thông tin tương ứng dựa trên một ID duy nhất • Truy xuất Object Store để cung cấp cho người sử dụng Do Object Store là cơ chế sử dụng bộ nhớ RAM, nên việc tra cứu này nếu dựa trên các đối tượng file hoặc database có cấu trúc rõ ràng và dễ tra cứu thì chi phí thời gian bỏ ra không đáng kể so với cơ chế tìm kiếm trên bộ nhớ ngoài trên 42 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC môi truờng Windows desktop. Tuy nhiên, ta sẽ phải tốn thêm một vùng nhớ Object Store cho các thông tin cần được lưu trữ sẵn, trong khi khả năng lưu trữ của Pocket PC bị hạn chế. 4.4.1.2 Tính toán tại thời điểm tra cứu Các thông tin cần tra cứu sẽ được tính toán, kết xuất từ các thông tin khác liên quan đã được lưu trữ trước đó. Ví dụ, chiều dài con đường sẽ bằng tổng chiều dài của các cung và cung con thuộc con đường ấy. Để tính toán được giá trị cần thiết, phải sử dụng các phép toán so sánh đối với tất cả các cung tồn tại trong đồ thị để tìm các cung thuộc con đường tra cứu, sau đó là phép cộng số thực để ra được chiều dài. Có hai vấn đề ở đây: thứ nhất, nếu tính chiều dài cho tất cả các con đường, số phép tính là rất lớn. Tuy nhiên, ở đây, chỉ cần thiết tính chiều dài của một con đường đang được tra cứu, vì vậy có thể chấp nhận được; thứ hai, các thông tin liên quan đến quá trình tra cứu đã được tạo lập trước trong quá trình nạp dữ liệu hiển thị cho bản đồ từ các dữ liệu cần thiết. Nói cách khác, các thông tin này đã được biểu diễn trước đó theo một cấu trúc định sẵn trong bộ nhớ, có nghĩa là không cần tốn thêm không gian Object Store để lưu trữ. 4.4.2 Thể hiện và cơ chế tìm kiếm 4.4.2.1 Các hướng tiếp cận • Phương pháp tiếp cận thứ nhất: Hiển thị tất cả các đối tượng cần tìm kiếm(đường, quận huyện, địa danh, bệnh viện, công ty...) hoặc tra cứu trong một danh sách. Khi người dùng nhập vào tên một đối tượng, ứng dụng sẽ tìm kiếm gần đúng trong danh sách, tất cả các đối tượng liên quan (theo tên, tính chất) và làm tươi lại (refresh) danh sách với các đối tượng tìm thấy này. • Phương pháp tiếp cận thứ hai: Hiển thị tất cả các đối tượng cần tìm kiếm (đường, quận huyện, địa danh, bệnh viện, công ty...) hoặc tra cứu trong một danh sách. Khi người dùng nhập 43 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC vào tên một đối tượng, ứng dụng sẽ tìm kiếm đối tượng gần đúng nhất (theo tên) và đánh dấu chọn đối tượng này. Nếu chưa vừa ý, người dùng tiếp tục nhập thêm thông tin, và ứng dụng phản hồi theo cơ chế tương tự. 4.4.2.2 Đánh giá Phương pháp tiếp cận thứ nhất: Giải pháp kĩ thuật: • Xét trên khía cạnh gần đúng về tên, ứng dụng sẽ phải duyệt hết toàn bộ tên các đối tượng. Với mỗi tên này, phải duyệt để xem tên đối tượng tra cứu có phải là chuỗi con của tên đối tượng hiện thời không. Nếu đúng, cập nhật vào danh sách. • Xét trên khía cạnh gần đúng về tính chất, dựa trên tên được tra cứu để xác định tính chất của đối tượng (đường phố, bệnh viện...). Duyệt qua tất cả đối tượng, cập nhật các đối tượng có tính chất thích hợp vào danh sách. Ưu điểm: • Tìm kiếm được tất cả đối tượng liên quan Khuyết điểm: • Do phải tìm tất cả các đối tượng liên quan, nên tốc độ xử lý chậm, đặc biệt là đối với môi trường Windows CE. Phương pháp tiếp cận thứ hai: Giải pháp kĩ thuật: • Biểu diễn các thông tin tìm kiếm bằng các cấu trúc dữ liệu thích hợp. Với các thông tin do người dùng nhập vào, sử dụng các phép duyệt, tra cứu trên cấu trúc dữ liệu này để tìm ra đối tượng gần đúng nhất Ưu điểm: • Nhanh, sử dụng các phương pháp tìm kiếm trên các cấu trúc dữ liệu đã được nghiên cứu Khuyết điểm: • Cài đặt phức tạp hơn 44 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC • Không bảo đảm tìm được tất cả các đối tượng đúng tính chất của đối tượng cần tra cứu 4.5 Giải pháp tiếng Việt trên môi trường Pocket PC 4.5.1 Tiếng Việt Unicode Đầu thập niên 90, Tổ chức tiêu chuẩn quốc tế ISO đưa ra dự án thống nhất bảng mã trên toàn thế giới và gọi đó là dự án ISO-10646. Cùng lúc đó, Unicode - Hiệp hội các nhà phát triển phần mềm, được thành lập vào năm 1991 như 1 tổ chức phi lợi nhuận nhằm phát triển chuẩn Unicode, các thành viên của Unicode bao gồm các công ty hàng đầu của thế giới trong lĩnh vực phần mềm như Microsoft, Adobe, Aldus, Borland, Digital, GO, IBM, HP, Lotus, Metaphor, NeXT, Novell, Sun, Symantec, Taligent, Unisys, and WordPerfect... cũng đưa ra dự án Unicode với với tham vọng trên. Rất may mắn là sau đó, cả 2 tổ chức đã nhận ra không cần thiết phải đưa ra 2 dự án khác nhau và đã hợp sức để hoàn thành. Tuy nhiên, ISO vẫn gọi là ISO- 10646, còn Unicode thì vẫn gọi là Unicode. Unicode sử dụng 4 byte để biểu diễn 1 kí tự và có khả năng biễu diễn 231(khoảng 2 tỷ) kí tự. Unicode được chia ra thành nhiều mặt phẳng (plane) biểu diễn, mỗi mặt phẳng gồm 65536 kí tự, được đánh số từ 0. Unicode mới tìm được khoảng 1 triệu kí tự được sử dụng trong tất cả các ngôn ngữ trên thế giới, trong đó, có 65534 kí tự thông dụng nhất. Như vậy, để biểu diễn các kí tự này, chỉ cần mặt phẳng đầu tiên trong bảng mã Unicode là đủ biểu diễn. Mặt phẳng này gọi là BMP0 (Basic Multilingual Plane) Với 65.536 ký tự của BMP0, Unicode hầu như có thể mã hoá tất cả các ngôn ngữ trên thế giới. Ngoài ra với cơ chế mở rộng UTF-16 Unicode và chuẩn ISO 10646 còn cho phép mã hoá hơn 1 triệu ký tự mà không cần phải dùng đến mã điều khiển Escape. 45 KH OA C NT T – Đ H KH TN Chương 4 :Các giải pháp cho ứng dụng bản đồ trên Pocket PC Phiên bản mới nhất hiện nay là Unicode 2.0 (Bản 3.0 đang chuẩn bị phát hành) bao gồm các ngôn ngữ thuộc họ la-tinh, và Greek, Cyrillic, Armenian, Hebrew, Arabic, Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Thai, Lào, Georgian, Tibetan, Japanese Kana, toàn bộ tập kí tự Korean Hangul hiện đại, tập kí tự thống nhất tiếng Trung Quốc/ Nhật Bản/ Hàn Quốc (Chinese/Japanese/Korean-CJK). * Một số đặc điểm của Unicode: -Unicode về cơ bản không quy định việc bố trí các ký tự theo quy định sắp xếp của các ngôn ngữ, điều này cũng là hệ quả của việc tránh định nghĩa các ký tự dư thừa do phải tận dùng các ký tự dùng chung nên không thể bố trí các ký tự theo từng vùng riêng cho từng ngôn ngữ. Hơn nữa thực tế với nhiều ngôn ngữ người ta phải dùng những thuật toán riêng để sắp xếp chứ không thể sắp xếp theo thứ tự của chúng trong bảng chữ cái (tiếng Việt là 1 điển hình). Chính vì vậy bảng mã tiếng Việt trong Unicode có các ký tự Việt nằm rải rác ở nhiều nơi và không theo 1 trình tự sắp xếp nào. - Mỗi ký tự trong bảng mã Unicode đều có độ dài cố định là 16 bits, nhờ đó việc xử lý các xâu ký tự Unicode rất đơn giản không phức tạp như các giải pháp dùng chuỗi ký tự điều khiển, phải có những thuật toán tương đối phức tạp để nhận diện ký tự trong 1 chuỗi các Byte. Trong khi đó với Unicode mỗi ký tự có độ dài đúng 2 bytes nên có thể định vị rất dễ dàng các vị trí của ký tự trong chuỗi Byte cho trước. -Unicode t

Các file đính kèm theo tài liệu này:

  • pdfUnlock-9912064-9912616.pdf
Tài liệu liên quan