Với một chiếc smartphone nhỏ, gọn trong tay, người sử dụng có thể làm mọi điều mình thích, từ các chức năng cơ bản, truyền thống như nghe, gọi, nhắn tin,…đến các chức năng nâng cao như:
Trang 1TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH
Thuộc nhóm ngành khoa học: Công nghệ thông tin
Thành phố Hồ Chí Minh, tháng 3 năm 2014
Trang 2TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH
Thuộc nhóm ngành khoa học: Công nghệ thông tin
Dân tộc: Kinh
Lớp, khoa: lớp TH10A3, khoa Công Nghệ Thông Tin
Năm thứ: 4 /Số năm đào tạo: 4
Ngành học: Khoa học máy tính
Người hướng dẫn: ThS HỒ QUANG KHẢI
Thành phố Hồ Chí Minh, tháng 3 năm 2014
Trang 3TÓM TẮT CÔNG TRÌNH
Hiện nay, nhu cầu đi lại bằng xe buýt của người dân ngày càng tăng cao kéo theo
đó là nhu cần tìm các tuyến xe buýt, trạm dừng, đường đi cũng tăng lên đáng kể Tuy nhiên, với một bản đồ lưu thông xe buýt bằng giấy như hiện nay, việc tìm kiếm một tuyến
xe buýt gây rất nhiều khó khăn cho người dân trong việc đi lại, đặc biệt đối với học sinh, sinh viên, người dân mới đến thành phố Còn đối với người dân đã “quen” với việc sử dụng dịch vụ xe buýt thì nhu cầu cần tìm một lộ trình theo ý mình như thời gian đi nhanh nhất, ít tốn chi phí nhất, thời gian đi bộ ngắn nhất hoặc số lần chuyển tuyến ít nhất là một điều rất cần thiết Do đó, cần phải có một tiện ích hỗ trợ người dùng tìm đường đi bằng xe buýt theo nhiều tiêu chí giúp cho việc đi lại của người dân nhanh chóng và hiệu quả hơn
Những năm gần đây, ngành điện thoại di động phát triển vượt bậc Smartphone ra đời làm thay đổi nhận thức của con người về điện thoại di động Với một chiếc smartphone nhỏ, gọn trong tay, người sử dụng có thể làm mọi điều mình thích, từ các chức năng cơ bản, truyền thống như nghe, gọi, nhắn tin,…đến các chức năng nâng cao như: lướt web, xem phim, nghe nhạc, định vị GPS, xem bản đồ trực tuyến,…Song, số lượng các phần mềm hỗ trợ người dùng tìm đường đi bằng xe buýt là rất ít và còn nhiều hạn chế
Xuất phát từ thực tế đi lại và các giải pháp công nghệ hiện có, nhóm nghiên cứu đề tài quyết định xây dựng một ứng dụng tìm đường đi bằng xe buýt trên smartphone chạy
hệ điều hành Windows Phone 8, tối ưu theo bốn tiêu chí là thời gian đi nhanh nhất, ít tốn chi phí nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất Ứng dụng là sự kết hợp giữa dữ liệu về các tuyến xe buýt, trạm dừng với bản đồ Goolge Maps và truy xuất thông tin từ các cổng Google Maps API Web Services để tạo nên ứng dụng hoàn chỉnh kết hợp với giao diện đẹp, giúp cho việc đi lại của người dùng dễ dàng, nhanh chóng và hiệu quả
Đề tài được thực hiện trong khoảng thời gian từ tháng 11/2013 đến cuối tháng 03/2014 Đây là kết quả nghiên cứu của nhóm trong suốt quá trình tìm kiếm, thu thập dữ liệu các tuyến xe, trạm dừng với mục tiêu là xây dựng một ứng dụng tìm đường đi bằng
xe buýt theo nhiều tiêu chí, bên cạnh đó, ứng dụng cũng phải có chức năng cho phép người dùng tra cứu thông tin, tìm kiếm trạm dừng, định vị cá nhân,…
Tuy đã rất cố gắng, tìm hiểu, học hỏi để thực hiện đề tài, song do khả năng vận dụng còn hạn chế, thời gian thực hiện không nhiều, lượng kiến thức tiếp thu còn hẹp nên phần báo cáo và ứng dụng của nhóm còn nhiều thiếu sót Nhóm nghiên cứu đề tài xin ghi nhận tất cả ý kiến đóng góp từ quý Thầy (Cô), các bạn sinh viên,…để ứng dụng ngày càng hoàn thiện hơn
Nhóm nghiên cứu đề tài
Trang 4MỤC LỤC
TÓM TẮT CÔNG TRÌNH i
DANH MỤC CÁC BẢNG v
DANH MỤC HÌNH ẢNH vi
DANH MỤC CHỮ VIẾT TẮT viii
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI ix
THÔNG TIN VỀ SINH VIÊN CHỊU TRÁCH NHIỆM THỰC HIỆN ĐỀ TÀI xii
CHƯƠNG 1: TỔNG QUAN 1
1.1 Đặt vấn đề 1
1.1.1 Thực trạng giao thông hiện nay 1
1.1.2 Các giải pháp công nghệ hiện có 1
1.1.3 Lý do chọn đề tài 3
1.2 Mục tiêu đề tài 3
1.3 Phương pháp nghiên cứu 3
1.4 Đối tượng và phạm vi nghiên cứu 3
1.5 Đóng góp của đề tài 4
1.5.1 Đóng góp về mặt kinh tế - xã hội 4
1.5.2 Đóng góp về mặt khoa học 4
CHƯƠNG 2: NỘI DUNG NGHIÊN CỨU 5
2.1 Tổng quan về lập trình Windows Phone 8 5
2.1.1 Bố cục của một ứng dụng 5
2.1.2 Tìm hiểu XAML trong lập trình Windows Phone 5
2.1.3 Ngôn ngữ C# trong việc xây dựng ứng dụng trên Windows Phone 6
2.1.4 Tìm hiểu LINQ To SQL 12
2.2 Sử dụng GPS và A-GPS trên Windows Phone 14
2.2.1 Tổng quan về GPS 14
2.2.2 Tổng quan về A-GPS 15
2.2.3 Sử dụng GPS trên Windows Phone 16
2.3 Sử dụng Google Maps trong ứng dụng Windows Phone 8 19
2.3.1 Giới thiệu Control Maps trong Windows Phone 8 19
Trang 52.3.2 So sánh Bing Maps và Google Maps 20
2.3.3 Chuyển đổi Bing Maps sang Google Maps 21
2.4 Google Maps API Web Services 24
2.4.1 Cú pháp sử dụng 24
2.4.2 Xử lý kết quả trả về 25
2.4.3 Google Direction API Service 26
2.4.4 Google Geocoding API Service 31
2.4.5 Google Reverse Geocoding API Service 33
2.4.6 Google Place Autocomplete API Service 35
2.4.7 Google Place API Nearby Search Service 38
2.4.8 Google Place API Radar Search Service 38
2.4.9 Google Place Details API Service 41
2.5 Áp dụng công thức hình cầu của cosines (Spherical Law of Cosines) 43
2.5.1 Giới thiệu 43
2.5.2 Vận dụng 43
2.6 Xây dựng phương thức giải mã tọa độ 45
2.6.1 Tính cấp bách của vấn đề 45
2.6.2 Cơ sở của việc xây dựng phương thức giải mã 46
2.6.3 Phương thức giải mã tọa độ 50
CHƯƠNG 3: NỘI DUNG THỰC HIỆN ĐỀ TÀI 55
3.1 Giới thiệu ứng dụng 55
3.2 Tổ chức cơ sở dữ liệu 56
3.2.1 Dữ liệu cục bộ (Local Database) 56
3.2.2 Dữ liệu từ Google Maps API Web Services: 59
3.3 Hiện thực ứng dụng 59
3.3.1 Hiển thị danh sách tuyến xe lên trang tuyến xe 59
3.3.2 Hiển thị thông tin của tuyến xe lên trang thông tin 61
3.3.3 Hiển thị danh sách trạm dừng theo từng tuyến 62
3.3.4 Hiển thị lộ trình xe buýt lên bản đồ 65
3.3.5 Định vị cá nhân 69
3.3.6 Sử dụng pushpin trong ứng dụng 70
Trang 73.3.7 Chức năng tìm kiếm trạm dừng 75
3.3.8 Tìm đường đi bằng xe buýt 86
CHƯƠNG 4: KẾT LUẬN 100
4.1 Kết quả đạt được 100
4.2 Những hạn chế 100
4.3 Hướng phát triển 100
TÀI LIỆU THAM KHẢO 101
PHỤ LỤC 102
Trang 9v
DANH MỤC CÁC BẢNG
Bảng 2.1: Bảng mô tả một số kiểu dữ liệu đã được xây dựng sẵn 7
Bảng 2.2: Bảng tóm tắt các thuộc tính truy cập của một lớp trong C# 12
Bảng 2.3: Bảng so sánh A-GPS và GPS trên một số lĩnh vực 16
Bảng 2.4: Bảng so sánh GeoCoordinateWatcher class và Geolocator class 17
Bảng 3.1: Bảng TUYENXE 57
Bảng 3.2: Bảng TRAMDUNG 58
Bảng 3.3: Bảng LUOT 58
Bảng 3.4: Bảng LOTRINH 58
Bảng 3.5: Bảng các thuộc tính của pushpin 71
Trang 10DANH MỤC HÌNH ẢNH
Hình 2.1: Cách thức hoạt động của A-GPS 15
Hình 2.2: So sánh Bing Maps với Google Maps 22
Hình 2.3: Minh họa chức năng AutoComplete 35
Hình 2.4: Lược đồ xây dựng phương thức vẽ hình tròn từ một điểm và bán kính 44
Hình 2.5: Lược đồ 11 bước mã hóa thành phần points 47
Hình 2.6: Sơ đồ 11 bước giải mã tọa độ 51
Hình 2.7: Lược đồ xây dựng phương thức giải mã tọa độ 52
Hình 3.1: Sơ đồ chức năng của ứng dụng 55
Hình 3.2: Sơ đồ liên kết cơ sở dữ liệu của ứng dụng 56
Hình 3.3: Mô hình client – server của ứng dụng 59
Hình 3.4: Giao diện trang tuyến xe 59
Hình 3.5: Sơ đồ phân tích chức năng trang tuyến xe 61
Hình 3.6: Sơ đồ phân tích chức năng hiển thị thông tin tuyến xe 61
Hình 3.7: Sơ đồ phân tích chức năng hiển thị trạm dừng theo tuyến xe 62
Hình 3.8: Giao diện trang trạm dừng 63
Hình 3.9: Giao diện hiển thị danh sách trạm dừng lên bản đồ 64
Hình 3.10: Sơ đồ phân tích chức năng hiển thị lộ trình lên bản đồ 65
Hình 3.11: Sơ đồ xây dựng hàm vẽ lộ trình của tuyến xe buýt lên bản đồ 66
Hình 3.12: Vẽ lộ trình tuyến xe lên bản đồ 69
Hình 3.13: Chức năng định vị cá nhân 29
Hình 3.14: Hiển thị vị trí người dùng lên bản đồ 70
Hình 3.15: Các pushpin được sử dụng trong ứng dụng 71
Hình 3.16: Sơ đồ phân tích chức năng tìm kiếm trạm dừng theo mã trạm 75
Hình 3.17: Giao diện chức năng tìm kiếm trạm dừng theo mã trạm 78
Trang 11vii
Hình 3.18: Sơ đồ phân tích chức năng tìm kiếm trạm dừng từ một điểm với bán kính 79
Hình 3.19: Sơ đồ phân tích chức năng nhập địa chỉ tại hộp tìm kiếm 80
Hình 3.20: Xác định vị trí tìm trạm dừng 82
Hình 3.21: Xác định bán kính tìm kiếm 83
Hình 3.22: Kết quả tìm trạm dừng 86
Hình 3.23: Sơ đồ phân tích chức năng tìm đường 87
Trang 12DANH MỤC CHỮ VIẾT TẮT
LINQ Language Integrated Query
Trang 13ix
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC MỞ TP.HCM
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI
1 Thông tin chung:
- Tên đề tài: xây dựng ứng dụng tìm đường đi bằng xe buýt tối ưu theo nhiều tiêu chí trên điện thoại Windows Phone 8
- Sinh viên thực hiện:
1) Lê Hữu Tài
Lớp: TH10A3 Khoa: CNTT Năm thứ: 4 Số năm đào tạo: 4 2) Huỳnh Ngọc Huy
Lớp: TH10A4 Khoa: CNTT Năm thứ: 4 Số năm đào tạo: 4
- Người hướng dẫn: Ths Hồ Quang Khải
2 Mục tiêu đề tài:
Xây dựng một ứng dụng tìm đường đi bằng xe buýt trên smartphone chạy hệ điều hành Windows Phone 8 với các chức năng sau:
Xem thông tin các tuyến xe buýt và danh sách các trạm dừng trên từng tuyến
Hiển thị lộ trình của các tuyến xe lên Google Maps
Tìm kiếm trạm dừng theo hai cơ chế: tìm kiếm chính xác thông qua mã trạm hoặc tìm kiếm tương đối từ một điểm với bán kính chỉ định
Định vị GPS, cho phép hiển thị vị trí của người dùng lên Google Maps
Tìm đường đi bằng xe buýt tối ưu theo bốn tiêu chí: thời gian đi nhanh nhất, ít tốn chi phí nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất
3 Tính mới và sáng tạo:
Xây dựng thành công một ứng dụng hoàn chỉnh trên hệ điều hành Windows Phone
8 – phiên bản hệ điều hành Windows Phone mới nhất hiện nay của Microsoft
Chuyển đổi thành công bản đồ Bing Maps mặc định của Microsoft thành Google Maps vốn không được hỗ trợ cho Windows Phone
Sử dụng thành công việc truy xuất thông tin dữ liệu từ Google Maps API vốn không hỗ trợ cho các nhà lập trình Windows Phone bằng cách sử dụng các cổng Web Services
Chức năng tìm đường đi của ứng dụng tối ưu theo nhiều tiêu chí, giúp người dùng
có nhiều sự lựa chọn hơn so với các sản phẩm phần mềm hiện có
Trang 15x
4 Kết quả nghiên cứu:
Xây dựng thành công ứng dụng tìm đường đi bằng xe buýt trên hệ điều hành Windows Phone 8 với đầy đủ tính năng sau:
Định vị GPS: hiển thị vị trí người dùng lên bản đồ
Xem thông tin tuyến xe, danh sách trạm dừng kết hợp với việc hiển thị lộ trình của từng tuyến lên bản đồ
Tìm kiếm trạm dừng theo mã trạm, tìm kiếm trạm dừng từ một điểm với bán kính chỉ định
Chức năng tìm đường với nhiều tùy chọn phong phú: hiển thị tất cả kết quả tìm được hoặc tối ưu theo bốn tiêu chí: thời gian đi nhanh nhất, tốn chi phí ít nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất
5 Đóng góp về mặt kinh tế - xã hội, giáo dục và đào tạo, an ninh, quốc phòng và khả năng áp dụng của đề tài:
Ứng dụng giúp người dùng có cái nhìn bao quát và toàn diện thông tin của các tuyến xe, lộ trình di chuyển cũng như tất cả các trạm dừng mà tuyến xe sẽ đi qua
Ứng dụng giúp việc tìm đường đi bằng xe buýt của người dùng trở nên dễ dàng, nhanh chóng và hiệu quả Điều này có ý nghĩa rất lớn trong tình hình giao thông phức tạp như hiện nay, đặc biệt là đối với học sinh, sinh viên, người lao động mới đến thành phố sinh sống và học tập
Chức năng tìm đường của ứng dụng tối ưu theo nhiều tiêu chí giúp người dùng chủ động hơn, an tâm hơn khi sử dụng xe buýt là phương tiện để đi lại hằng ngày
Ứng dụng là tiện ích hỗ trợ hơn nữa việc “gắn kết” giữa người dùng với phương tiện xe buýt, góp phần vào chủ trương của thành phố trong việc hạn chế số lượng
xe gắn máy, khuyến khích người dân đi xe buýt nhằm giảm tình trạng ách tắc giao thông , kẹt xe thường xuyên vào giờ cao điểm như hiện nay
Ứng dụng chạy trên smartphone với giao diện đẹp, dễ sử dụng, độ chính xác cao
do đó hấp dẫn được người sử dụng, đáp ứng được yêu cầu mọi lúc, mọi nơi
Chức năng tìm đường của ứng dụng giúp người dùng có thể tìm đường đi trong phạm vi lãnh thổ đất nước, ở những nơi có sử dụng phương tiện đi lại bằng xe buýt CSDL của ứng dụng hiện chỉ phục vụ người dùng xem thông tin về các tuyến
xe trong phạm vi thành phố Hồ Chí Minh, nhưng có thể được mở rộng để lưu thông tin cho các tỉnh, thành trong cả nước
Trang 17xi
6 Công bố khoa học của sinh viên từ kết quả nghiên cứu của đề tài (ghi rõ tên tạp chí
nếu có) hoặc nhận xét, đánh giá của cơ sở đã áp dụng các kết quả nghiên cứu (nếu có):
Ngày tháng năm
Sinh viên chịu trách nhiệm chính
thực hiện đề tài
(ký, họ và tên)
Nhận xét của người hướng dẫn về những đóng góp khoa học của sinh viên thực hiện
đề tài (phần này do người hướng dẫn ghi):
Trang 19I SƠ LƯỢC VỀ SINH VIÊN:
Họ và tên: LÊ HỮU TÀI
Sinh ngày: 11 tháng 07 năm 1991
Nơi sinh: Tỉnh Long An
Lớp: TH10A3 Khóa: 2010-2014
Khoa: Công nghệ thông tin
Địa chỉ liên hệ: Ấp 4, xã Long Hậu, huyện Cần Giuộc, tỉnh Long An
Điện thoại: 01644636260 Email: lhtai91@gmail.com
II QUÁ TRÌNH HỌC TẬP (kê khai thành tích của sinh viên từ năm thứ 1 đến năm
Trang 23Trang 1
CHƯƠNG 1: TỔNG QUAN 1.1 Đặt vấn đề
1.1.1 Thực trạng giao thông hiện nay
Thành phố Hồ Chí Minh cùng với thủ đô Hà Nội và các thành phố lớn chính là động lực để phát triển cả về kinh tế, văn hóa, xã hội, thương mại, khoa học, giáo dục, v.v… cho đất nước Tuy nhiên, hệ thống giao thông tại đây rất phức tạp với kết cấu đường xá chằn chịt, gây khó khăn cho người dân trong việc đi lại Vấn nạn kẹt xe, tình trạng ách tách giao thông xảy ra thường xuyên vào giờ cao điểm gây bức xúc trong nhân dân Vấn đề trên đòi hỏi cần phải có một giải pháp để giải quyết bài toán về giao thông
Hằng năm, các thành phố lớn đón nhận hàng ngàn học sinh, sinh viên, công nhân, người dân từ nhiều tỉnh, thành trong cả nước về học tập, sinh sống và làm việc Số lượng
xe máy quá đông được xem là một trong những nguyên nhân gây nên tình trạng kẹt xe tại đây Do đó, để kéo giảm tình trạng ùn tắc giao thông đòi hỏi cần có một giải pháp hạn chế
số lượng xe gắn máy trên đường nhưng đồng thời phải bảo đảm không ảnh hưởng đến việc đi lại của người dân
Những năm qua, thành phố tập trung vào việc hoàn thiện và nâng cao chất lượng của loại hình đi lại bằng phương tiện xe buýt Thực tế hiện nay, nhu cầu đi lại bằng xe buýt của người dân ngày càng tăng cao kéo theo đó là nhu cầu tìm các tuyến xe buýt, trạm dừng, đường đi cũng tăng lên đáng kể
Tuy nhiên, bên cạnh những mặt đạt được, vẫn còn có nhiều hạn chế khiến phương tiện này chưa thật sự trở thành người bạn đồng hành của nhân dân trong việc đi lại hằng ngày Thông tin về các tuyến xe, trạm dừng chưa thật sự đáp ứng được yêu cầu đa dạng, mọi lúc, mọi nơi của người dùng Một bản đồ xe buýt bằng giấy với vô số các tuyến xe gây khó khăn cho người dân trong việc đi lại nhất là đối với học sinh, sinh viên, người dân mới đến thành phố Còn đối với người dân đã “quen” với việc sử dụng dịch vụ xe buýt thì nhu cầu cần tìm một lộ trình theo ý mình như thời gian đi nhanh nhất, ít tốn chi phí nhất, thời gian đi bộ ít nhất hoặc số tuyến đi ít nhất là một điều rất cần thiết
Thực trạng trên đòi hỏi cần phải có một giải pháp giúp người dân trong việc tìm kiếm thông tin các tuyến xe, trạm dừng và tìm đường đi bằng xe buýt theo nhiều tiêu chí một cách chính xác, nhanh chóng và hiệu quả
1.1.2 Các giải pháp công nghệ hiện có
Mặc dù có nhiều phương pháp, cách thức để hỗ trợ cho việc đi lại, song không phải phương pháp nào cũng mang lại hiệu quả tốt nhất Việc sử dụng bản đồ giao thông bằng giấy gây rất nhiều khó khăn cho người dân nhưng đôi khi lại không chính xác Trong khi
đó, nếu sử dụng bản đồ online thì phải cần đến máy tính bàn, laptop, máy tính bảng…những sản phẩm này mặc dù cho hiệu quả tốt nhưng lại không phù hợp khi giao thông vì quá cồng kềnh, lại kém an toàn cho người sử dụng Vấn đề đặt ra là cần phải có
Trang 24một thiết bị vừa gọn, nhẹ nhưng phải có khả năng hỗ trợ bản đồ, hỗ trợ việc tìm đường đi nhanh chóng, hiệu quả cho người sử dụng
Những năm gần đây, ngành điện thoại di động phát triển vượt bậc Smartphone ra đời làm thay đổi nhận thức của con người về điện thoại di động Với một chiếc smartphone nhỏ, gọn trong tay, người sử dụng có thể làm mọi điều mình thích, từ các chức năng cơ bản, truyền thống như nghe, gọi, nhắn tin,…đến các chức năng nâng cao như lướt web, xem phim, nghe nhạc, định vị GPS, xem bản đồ trực tuyến,… Smartphone dần dần trở thành người bạn đồng hành của con người trong xã hội hiện nay Do đó, việc xây dựng một phần mềm tìm đường đi trên điện thoại là giải pháp tối ưu nhất
Ngành công nghiệp smartphone hiện nay có năm nền tảng hệ điều hành chính là: Windows Phone, Symbian, iOS, Android, webOS gắn liền với những “gã khổng lồ” trong ngành công nghệ như: Microsoft, Apple, Google,… Thị trường phần mềm phát triển trên nền điện thoại di động ngày càng phong phú và đa dạng Tuy nhiên, số lượng các phần mềm hỗ trợ người dùng tìm đường đi bằng xe buýt tại Việt Nam lại rất khiêm tốn, đơn cử chỉ có một vài phần mềm như: BusMap, BUSITUS,… Do đó, việc xây dựng và phát triển một phần mềm tìm đường đi bằng xe buýt trên smartphone là một điều rất cần thiết
Trong năm nền tảng hệ điều hành trên, thì hệ điều hành Windows Phone 7 của tập đoàn hàng đầu thế giới – Microsoft – mặc dù là hệ điều hành ra đời sau cùng nhưng lại
có những tính năng thân thiện hơn với người dùng Với Windows Phone, Microsoft đã phát triển giao diện người dùng mới mang tên Metro – tích hợp khả năng liên kết với các phần cứng và phần mềm của hãng thứ ba một cách dễ dàng Đặc biệt, với phiên bản Windows Phone 8 tung ra thị trường vào ngày 29 tháng 10 năm 2012 được xem là sự kế thừa và phát huy hơn nữa so với Windows Phone 7
Phiên bản Windows Phone 8 đã thay thế lõi kiến trúc Windows CE trên Windows Phone 7 thành kernel củaWindows NT vốn được thiết kế choWindows 8, chính vì vậy làm cho ứng dụng dễ dàng kết nối (port) giữa hai hệ điều hành.Ngoài ra, Windows Phone
8 còn hỗ trợ CPU đa nhân, nhiều độ phân giải, tùy biến Start Screen, kèm phiên bản di động của Internet Explorer 10, tích hợp Nokia Maps, giao diện thân thiện hơn Việc lập trình trên Windows Phone nhìn chung là sử dụng ngôn ngữ C#, một trong những ngôn ngữ lập trình hiện đại và phổ biến nhất hiện nay, góp phần tạo thuận lợi cho các nhà phát triển Bên cạnh đó, các nhà phát triển có thể tạo nên các ứng dụng sinh động, hấp dẫn bằng việc lập trình dựa trên hai công nghệ là Silverlight và XNA
Song, có một thực tế là, người dùng Windows Phone 7 và 8 cho đến thời điểm hiện tại vẫn không thể truy cập Google Maps từ trình duyệt Web trên điện thoại của họ Đây được xem là một sự “thiệt thòi” của người dùng Windows Phone so với Android và iOS, bởi sự cạnh tranh trong kinh doanh giữa hai “gã khổng lồ” Microsoft và Google Các phần mềm tìm đường đi bằng xe buýt tại Việt Nam trên Windows Phone 8 là rất ít, đơn
cử chỉ có một vài phần mềm như: BusMap,…Do đó, việc xây dựng và phát triển một ứng dụng tìm đường đi bằng xe buýt trên Windows Phone 8 là rất cần thiết
Trang 251.1.3 Lý do chọn đề tài
Xuất phát từ yêu cầu cấp bách của thực tế đi lại và các giải pháp công nghệ hiện
có, nhóm nghiên cứu đề tài quyết định xây dựng một ứng dụng tìm đường đi bằng xe buýt trên smartphone chạy hệ điều hành Windows Phone 8, tối ưu theo bốn tiêu chí là thời gian
đi nhanh nhất, ít tốn chi phí nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất
1.2 Mục tiêu đề tài
Xây dựng một ứng dụng tìm đường đi bằng xe buýt trên smartphone chạy hệ điều hành Windows Phone 8 với tính năng sau:
Định vị GPS, giúp xác định vị trí người dùng và hiển thị lên bản đồ
Xem thông tin của từng tuyến xe, danh sách tất cả trạm dừng mà tuyến xe đi qua, đồng thời hiển thị lộ trình di chuyển của tuyến xe lên bản đồ Google Maps
Tìm kiếm trạm dừng theo hai cơ chế: tìm trạm dừng theo mã trạm và tìm trạm dừng từ một vị trí với bán kính tìm kiếm được chỉ định bởi người dùng
Chức năng tìm đường với nhiều tùy chọn phong phú: hiển thị tất cả kết quả tìm được hoặc tối ưu theo bốn tiêu chí: thời gian đi nhanh nhất, tốn chi phí ít nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất
1.3 Phương pháp nghiên cứu
Nghiên cứu lập trình xây dựng ứng dụng trên hệ điều hành Windows Phone 8
Nghiên cứu phương pháp đưa bản đồ Google Maps hiển thị thay cho bản đồ mặc định Bing Maps của Windows Phone
Nghiên cứu lập trình để xác định vị trí của người dùng điện thoại bằng công nghệ GPS
Nghiên cứu việc sử dụng Google Maps API thông qua các cổng Web Services
Nghiên cứu áp dụng các công thức hình cầu Cosines trong việc vẽ hình tròn lên bản đồ nhằm thể hiện phạm vi tìm kiếm
Nghiên cứu xây dựng phương thức giải mã tọa độ thành phần points trong polyline
từ kết quả truy vấn Google Direction API Service
Tìm hiểu, nghiên cứu lập trình để kết hợp dữ liệu local của ứng dụng với kết quả trả về từ Google Maps API Web Services và Google Maps nhằm xây dựng một ứng dụng tìm đường đi bằng xe buýt hoàn chỉnh
1.4 Đối tượng và phạm vi nghiên cứu
Ứng dụng của nhóm hướng đến tất cả mọi người đã, đang và sẽ sử dụng phương tiện đi lại bằng xe buýt, đặc biệt là học sinh, sinh viên, người lao động mới đến thành phố
Trang 26 Chức năng tìm trạm dừng từ một vị trí với bán kính chỉ định và chức năng tìm đường đi tối ưu theo nhiều tiêu chí của ứng dụng được áp dụng trong phạm vi toàn quốc
Các chức năng khác của ứng dụng như xem thông tin tuyến xe, xem danh sách trạm dừng, vẽ lộ trình di chuyển, tìm kiếm trạm dừng thông qua mã trạm được áp dụng đối với hơn 50 tuyến xe (từ tuyến 1 đến tuyến 50) tại thành phố Hồ Chí Minh Tuy nhiên, CSDL về xe buýt của ứng dụng có thể được hoàn thiện để lưu thông tin của tất cả tuyến xe tại thành phố Hồ Chí Minh cũng như có thể mở rộng
Chức năng tìm đường của ứng dụng tối ưu theo nhiều tiêu chí giúp người dùng chủ động hơn, an tâm hơn khi sử dụng xe buýt là phương tiện để đi lại hằng ngày
Ứng dụng là tiện ích hỗ trợ hơn nữa việc “gắn kết” giữa người dùng với phương tiện xe buýt, góp phần vào chủ trương của thành phố trong việc hạn chế số lượng
xe gắn máy, khuyến khích người dân đi xe buýt nhằm giảm tình trạng ách tắc giao thông , kẹt xe thường xuyên vào giờ cao điểm như hiện nay
Ứng dụng chạy trên smartphone với giao diện đẹp, dễ sử dụng, độ chính xác cao
do đó hấp dẫn được người sử dụng, đáp ứng được yêu cầu mọi lúc, mọi nơi
Hiển thị bản đồ Google Maps thay thế Bing Maps mặc định của Windows Phone
Sử dụng thành công Google Maps API Web Services trên nền Windows Phone
Xây dựng thành công phương thức giải mã tọa độ thành phần points trong polyline
Áp dụng thành công các công thức hình cầu Cosines trong việc vẽ hình tròn lên bản đồ nhằm thể hiện phạm vi tìm kiếm
Trang 27CHƯƠNG 2: NỘI DUNG NGHIÊN CỨU 2.1 Tổng quan về lập trình Windows Phone 8
2.1.1 Bố cục của một ứng dụng
Xét về tổng thể, ứng dụng Windows Phone 8 bao gồm 2 phần:
o Các trang xaml dùng để thiết kế giao diện ứng dụng
o Trang code behind (.cs) dùng để lập trình cho các chức năng của ứng dụng
Xét về thành phần chính, một ứng dụng Windows Phone 8 bao gồm:
o Thư mục reference: chứa các thư viện cần thiết cho việc sử dụng các lớp
o ApplicationIcon.png: hình ảnh đại diện cho ứng dụng khi được cài đặt trên điện thoại
o App.xaml: file cấu hình của ứng dụng Khi ứng dụng khởi chạy thì file App.xaml sẽ được “quét” trước để kiểm tra cấu hình của ứng dụng
o App.xaml.cs: trang code-behind chứa các đoạn mã của trang App.xaml
o Appmanifest.xml: file cấu hình cho ứng dụng trước khi xuất ra file xap (dùng
để cài đặt trên điện thoại)
o AssemblyInfo.cs: một file cấu hình khác của ứng dụng, chứa thông tin về tên và version
o Backgroung.png: ảnh nền của ứng dụng trên màn hình chính của điện thoại
o MainPage.xaml: đây chính là trang mặc định để xây dựng ứng dụng, ứng dụng cũng có thể tạo thêm nhiều trang hơn nữa tùy thuộc vào mục đích sử dụng
o MainPage.xaml.cs: đây là trang code-behind của trang MainPage.xaml, là nơi
xử lý các chức năng, sự kiện của trang MainPage.xaml
o SplashScreenImage.png: nếu ứng dụng phải mất thời gian để load dữ liệu thì ảnh này sẽ hiện ra, nhưng chỉ xuất hiện vào lần đầu khi chạy ứng dụng
o WMAppManifest.xml: là một file cấu hình khác chứa thông tin về tên, icon, trang mặc định sẽ bắt đầu của ứng dụng Đây cũng là file để người sử dụng bật các ID phục vụ cho các lớp
2.1.2 Tìm hiểu XAML trong lập trình Windows Phone
XAML là từ viết tắt của Extensible Application Markup Language, là ngôn ngữ
đánh dấu dùng để thể hiện các đối tượng trong NET, là một biến thể của XML
(Extensible Markup Language) XAML cho phép người dùng khởi tạo các đối tượng và
các thuộc tính cho từng đối tượng theo cơ chế mở thẻ/đóng thẻ, đồng thời còn cho phép tổ chức các đối tượng theo mô hình thứ bậc
Trang 28Trong Windows Phone, XAML được sử dụng trong việc tạo lập giao diện người dùng Có thể nói, XAML giúpquy trình làm việc giữa các cá nhân trong quá trình xây dựng và phát triển ứng dụng được đơn giản hơn do khả năng “tách biệt” phần thiết kế giao diện (designer) với phần lập trình logic (coder) cho ứng dụng
XAML cho phép người dùng thiết kế giao diện của ứng dụng Windows Phone trên
cả hai môi trường là Visual Studio và Expression Blend Bên cạnh đó, “sức mạnh” của XAML còn thể hiện trong việc binding cơ sở dữ liệu vào một thành phần (element) được chỉ định trong XAML
2.1.3 Ngôn ngữ C# trong việc xây dựng ứng dụng trên Windows Phone
2.1.3.1 Giới thiệu về C#
C# là ngôn ngữ lập trình hiện đại được xây dựng dựa trên nền tảng của hai ngôn ngữ lập trình mạnh nhất là C++ và Java C# được phát triển bởi đội ngũ các kỹ sư của Microsoft trong đó tâm điểm là Anders Hejlsberg và Scott Wiltamuth Những đặc tính của một ngôn ngữ lập trình hiện đại như việc xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng và bảo mật mã nguồn…đều có trong C#
C# ngôn ngữ lập trình đơn giản, với việc loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ lập trình trước đó như Java và C++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở ảo (virtual base class), do đó tạo thuận lợi hơn cho các nhà phát triển ứng dụng bằng C# C# đơn giản vì phát triển dựa trên nền tảng C/C++ nhưng được cải tiến để làm cho ngôn ngữ ngày càng dễ tiếp cận hơn Một trong những cải tiến đó là loại bỏ sự dư thừa, hoặc thêm những cú pháp mới Chẳng hạn như việc thay thế ba toán tử trong C++ là ::, , và -> bằng một toán tử duy nhất là (dot)
C# là ngôn ngữ lập trình hướng đối tượng C# hỗ trợ tất cả các đặc tính của một ngôn ngữ hướng đối tượng (Object-oriented language) bao gồm sự đóng gói (encapsulation), sự kế thừa (inheritance), và tính đa hình (polymorphism)
C# là ngôn ngữ mạnh mẽ nhưng cũng rất mềm dẻo C# chỉ bị giới hạn bởi khả năng sử dụng của người dùng Hiện nay, C# được sử dụng cho nhiều các dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình biên dịch cho các ngôn ngữ khác
C# là ngôn ngữ ít từ khóa, chỉ hơn 80 từ khóa và mười mấy kiểu dữ liệu Đó là một trong những lý do làm cho C# trở thành một trong những ngôn ngữ được sử dụng phổ biến nhất hiện nay
Trong Windows Phone, C# là ngôn ngữ lập trình chính, đóng vai trò chủ đạo trong việc xây dựng và phát triển ứng dụng
Trang 292.1.3.2 Nền tảng ngôn ngữ C#
2.1.3.2.1 Kiểu dữ liệu
Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch nhận biết kích thước và khả năng của đối tượng đó (chẳng hạn kiểu int có kích thước là 4 byte hay một đối tượng button có thể vẽ và phản ứng khi nhấn,…)
C# là một ngôn ngữ mạnh về kiểu dữ liệu Kiểu dữ liệu trong C# được phân chia theo hai góc độ sau:
Góc độ 1: kiểu dữ liệu được phân làm hai tập hợp đó là kiểu dữ liệu xây dựng sẵn
(built – in) mà ngôn ngữ cung cấp sẵn và kiểu dữ liệu do người lập trình tự định nghĩa (user – defined)
Góc độ 2: kiểu dữ liệu bao gồm kiểu dữ liệu giá trị (value) và kiểu dữ liệu tham
chiếu (reference) Việc phân chi này dựa trên sự khác nhau trong việc lưu kiểu dữ liệu giá trị và tham chiếu trong bộ nhớ Đối với một kiểu dữ liệu giá trị thì sẽ được lưu đúng kích thước thật trong bộ nhớ đã cấp phát là stack Trong khi đó thì địa chỉ của kiểu dữ liệu tham chiếu thì được lưu trong stack nhưng đối tượng thật sự thì lưu trong bộ nhớ heap Việc lưu đối tượng trong bộ nhớ heap rất có ích đối với các đối tượng có kích thước lớn
Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các đối tượng
và chuỗi Và tất cả các kiểu dữ liệu do người dùng định nghĩa ngoại trừ kiểu dữ liệu cấu trúc đều là kiểu dữ liệu tham chiếu
Bảng 2.1: Bảng mô tả một số kiểu dữ liệu đã được xây dựng sẵn
0-255
bool 1 Boolean Giá trị logic (true/false)
short 2 Int16 Số nguyên có dấu giá trị từ -32768
đến 32767
ushort 2 Uint16 Số nguyên không dấu từ 0 – 65535
đến 2.147.483.647
4.294.967.295
Trang 30decimal 8 Decimal
Có độ chính xác đến 28 con số, được dùng trong tính toán tài chính, kiểu này đòi hỏi phải có hậu tố “m” hay
“M” theo sau giá trị
Kiểu số nguyên có dấu có giá trị trong khoảng :
-9.223.370.036.854.775.808 đến 9.223.372.036.854.775.807
0xffffffffffffffff
2.1.3.2.2 Biến (variable)
Biến là đại lượng được dùng để lưu trữ thông tin về các đối tượng với giá trị cụ thể, xác định tại mỗi thời điểm trong chương trình Giá trị của biến có thể được thay đổi bằng phép gán (=)
Trong C#, cú pháp để khai báo biến có dạng như sau:
<tên kiểu><danh sách các biến>
Trong đó :
<tên kiểu> là một kiểu dữ liệu hợp lệ bất kỳ trong C#
<danh sách các biến> là một hay nhiều biến, được phân cách bằng dấu ‘,’
Trong trường hợp cần thiết, có thể khởi tạo giá trị trực tiếp cho biến trong câu lệnh
khai báo: <tên kiểu><tên biến> = <giá trị>;
Trang 31 Dùng từ khóa const: const <tên kiểu><tên hằng> = <giá trị>;
2.1.3.2.4 Các cấu trúc điều khiển
Hầu hết các thuật toán đều có thể cài đặt bằng 3 cấu trúc cơ bản sau:
Cấu trúc tuần tự: các câu lệnh được thực hiện theo thứ tự từ trên xuống và từ trái
sang phải
Cấu trúc rẽ nhánh và lựa chọn: cấu trúc này dùng để “dự đoán và đáp ứng” tất cả
các trường hợp có thể có của thuật toán, nhằm đảm bảo tính đúng đắn của chương trình
Cấu trúc lặp: lặp vòng quá trình thực thi câu lệnh Khi sử dụng cấu trúc lặp, phải
đảm bảo tính dừng cho vòng lặp, tránh trường hợp quá trình lặp diễn ra vô tận, không có điểm dừng
Trong C#, cấu trúc rẽ nhánh được hiện thực thông qua câu lệnh if…then…else… với cú pháp như sau:
If (<điều kiện>) <lệnh 1>;
[else <lệnh 2>;]
Trong đó:
<điều kiện> thường là một biểu thức logic
Phần else là không bắt buộc phải có Trường hợp câu lệnh if không có phần else được gọi là câu lệnh if “thiếu”
<lệnh 1>, <lệnh 2> có thể là câu lệnh đơn, hoặc câu lệnh ghép, hoặc câu lệnh điều khiển
Ý nghĩa: nếu <điều kiện> thỏa (giá trị là true) thì thực hiện <lệnh 1>, ngược lại thì thực hiện <lệnh 2> Như vậy, <lệnh 1>, <lệnh 2> được thực hiện thông qua giá trị đúng/sai của <điều kiện>
Câu lệnh if…else… có thể được mở rộng thành câu lệnh if… else… lồng nhau, tuy nhiên, về bản chất câu lệnh if…else là không thay đổi
Trong C#, cấu trúc lựa chọn được hiện thực thông qua câu lệnh switch…case… với cú pháp như sau:
switch (<biểu thức điều kiện>)
Trang 32switch(…) Việc sử dụng câu lệnh này, đòi hỏi cuối mỗi case phải có lệnh break nhằm đảm bảo tính đúng đắn cho chương trình
Nhóm nghiên cứu thấy rằng, việc sử dụng câu lệnh switch(…) là một trường hợp biến thể của của câu lênh if…else… Một câu lệnh switch(…) dù phức tạp đến đâu cũng đều có thể chuyển đổi thành công sang câu lệnh if…else… Nhưng, một câu lệnh if…else… chưa chắc có thể chuyển đổi thành công sang câu lệnh switch(…) Nguyên nhân của sự khác biệt đó là do câu lệnh switch(…) chỉ có thể xét điều kiện ở một biểu thức nhất định, sau đó so sánh giá trị của biểu thức đó với từng case cụ thể Trong khi đó, trong câu lệnh if…else… biểu thức điều kiện có thể được tùy biến (chẳng hạn câu lệnh if ban đầu xét điều kiện A, nhưng câu lệnh if sau có thể xét điều kiện B, v.v…)
Việc sử dụng câu lệnh switch(…) hoặc if…else… là tùy thuộc vào tình huống sử dụng Đối với trường hợp chỉ xét điều kiện trên một biểu thức và giá trị của biểu thức đó
có nhiều kết quả thì sự lựa chọn câu lệnh switch(…) trong trường hợp này là cần thiết
Trong C#, cấu trúc lặp được hiện thực thông qua 3 cấu trúc sau:
Cấu trúc lặp while(…) với cú pháp:
while (<điều kiện>) <lệnh>;
Trong đó:
o <điều kiện> là một biểu thức logic
o <lệnh> có thể là lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển Trong đó, có
ít nhất một câu lệnh trong <lệnh> có tác dụng làm thay đổi việc đánh giá lại
<điều kiện> sau mỗi lần lặp nhằm đảm báo tính dừng cho vòng lặp
Ý nghĩa: khi nào điều kiện còn thỏa thì còn thực hiện <lệnh>
o <điều kiện> thường là biểu thức logic
o <phần hiệu chỉnh> là một hay nhiều biểu thức gán (được phân cách bởi dấu ‘,’) có nhiệm vụ thay đổi trị của các biến ở <phần khởi tạo>
o <lệnh> có thể là câu lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển
Ý nghĩa: khi nào điều kiện còn thỏa thì còn thực hiện lệnh
Trong vòng lặp for(…) thì phần khởi tạo chỉ được thực hiện đúng một lần, <phần hiệu chỉnh> có nhiệm vụ làm thay đổi việc đánh giá lại <điều kiện> sau mỗi lần lặp nhằm đảm bảo tính dừng cho vòng lặp Vòng lặp for( ; ; ) <lệnh>; là vòng lặp vô hạn, không có điểm dừng
Trang 33o <điều kiện> thường là biểu thức logic
o <lệnh> có thể là câu lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển Trong
<lệnh> phải có ít nhất một câu lệnh làm thay đổi việc đánh giá lại điều kiện sau mỗi lần lặp nhằm đảo bảm tính dừng cho vòng lặp
Ý nghĩa: thực hiện <lệnh> cho đến khi <điều kiện> không còn thỏa
Nhóm nghiên cứu thấy rằng, việc sử dụng ba cấu trúc lặp trên có những điểm chung, điểm riêng sau:
Điểm chung:
o Đều lặp vòng thực thi một số câu lệnh thỏa điều kiện
o Trong các câu lệnh thực thi ở mỗi lần lặp, phải có it nhất một câu lệnh làm thay đổi lại việc đánh giá lại điều kiện lặp nhằm đảm bảo tính dừng cho vòng lặp
o Cấu trúc lặp while (…) và for (…) có thể được chuyển đổi cho nhau
Điểm riêng:
o Phần <lệnh> của vòng lặp do…while (…) luôn được thực hiện ít nhất một lần
do <điều kiện> được kiểm tra sau khi thực hiện lệnh
o Phần <lệnh> của vòng lặp while (…) và for (…) có thể không được thực hiện lần nào, do <điều kiện> được xét trước khi thực hiện lệnh
2.1.3.2.5 C# và lập trình hướng đối tượng
Lập trình hướng đối tượng về bản chất là tạo ra các kiểu dữ liệu mới Mỗi kiểu dữ liệu
đó được đóng gói với những thuộc tính và phương thức riêng đặc trưng cho kiểu dữ liệu
Trang 34Khi một đối tượng được khởi tạo thì phương thức thiết lập của đối tượng đó sẽ được gọi đầu tiên Phương thức thiết lập có thể là phương thức không tham số, hoặc có tham số hoặc cả hai
Trong việc xây dựng các class thì thuộc tính truy cập có ý nghĩa rất quan trọng, quyết định khả năng các phương thức của lớp cũng như các phương thức của lớp khác có thể nhìn thấy và sử dụng các biến thành viên hay những phương thức bên trong lớp đó ở mức
độ nào Danh sách các thuộc tính và giới hạn truy cập được thể hiện ở bảng sau:
Bảng 2.2: Bảng tóm tắt các thuộc tính truy cập của một lớp trong C#
Thuộc tính Giới hạn truy cập
public
Không hạn chế Những thuộc tính được đánh dấu là public được dùng ở bất kì phương thức nào của lớp bao gồm cả những lớp khác
private Thuộc tính trong lớp A được đánh dấu là private thì chỉ những
phương thức của A mới có quyền truy cập
protected
Thuộc tính trong lớp A được đánh dấu là protected thì chỉ có những phương thức bên trong lớp A và những phương thức dẫn xuất từ lớp A mới có quyền truy cập
internal
Thuộc tính trong lớp A được đánh dấu là internal thì có thể được truy cập bởi những phương thức của bất cứ lớp nào trong cùng khối hợp ngữ với A
protected internal
Thuộc tính trong lớp A được đánh dấu là protected internal thì được truy cập bởi các phương thức của lớp A, các phương thức của lớp dẫn xuất của A, và bất cứ lớp nào trong cùng khối hợp ngữ của A
2.1.4 Tìm hiểu LINQ To SQL
LINQ là viết tắt của từ Language Integrated Query, là ngôn ngữ tích hợp truy vấn,
chỉ có từ phiên bản Visual Studio 2008 và NET Framework 3.5 trở về sau
LINQ To SQL là một phần của LINQ cho phép mô hình hóa cơ sở dữ liệu (CSDL) thành các lớp NET, sau đó người dùng có thể truy vấn cũng như cập nhật CSDL bằng ngôn ngữ LINQ LINQ to SQL hỗ trợ đầy đủ transaction, view và các stored procedure (SP) Đồng thời, cũng cung cấp một cách dễ dàng để thêm khả năng kiểm tra tính hợp lệ của dữ liệu và các quy tắc vào trong mô hình dữ liệu
So với ADO.NET, LINQ cung cấp một cách tiếp cận mới, dễ hiểu trong việc lập trình với CSDL Việc sử dụng LINQ được kết hợp với file DataContext Đây là file chứa mô hình tổ chức CSDL, có được từ việc ánh xạ CSDL
Trang 35Trong Windows Phone, LINQ To SQL được sử dụng để lập trình với dữ liệu local (SQL Database) của ứng dụng
2.1.4.1 Lấy thông tin từ CSDL:
Cú pháp để lấy thông tin từ CSDL bằng ngôn ngữ LINQ như sau:
<DataContext name> db = new <DataContext name>();
var <tên biến 1> = from <nặc danh> in db.<tên bảng>
[where <điều kiện>]
select <nặc danh>; | select new { <nặc danh>.<tên field>[,…]};
Trong đó: tên biến 1 là danh sách các kết quả nhận được từ truy vấn, DataContext name là tên của file DataContext
2.1.4.2 Cập nhật thông tin CSDL:
Để cập nhật CSDL, trước tiên ta lấy thông tin của đối tượng cần cập nhật, thiết lập lại giá trị và ghi lại vàoCSDL thông qua hàm SubmitChanges()
<DataContext name> db = new <DataContext name>();
<tên bảng><tên biến> = db.<tên bảng>.Single(<điều kiện>);
<tên biến>.<thuộc tính cần thay đổi> = <giá trị thay đổi>;
[<tên biến>.<thuộc tính cần thay đổi> = <giá trị thay đổi>;….]
db.SubmitChanges()
Trong đó: điều kiện là biểu thức có dạng: <nặc danh>=><nặc danh>.<tên thuộc tính><phép so sánh><giá trị so sánh>
2.1.4.3 Thêm dữ liệu vào CSDL
Để thêm dữ liệu vào CSDL, trước tiên ta tạo ra một đối tượng thuộc một lớp (table) của CSDL Sau đó, gán các thông tin cho đối tượng, add đối tượng vào lớp và sử dụng hàm SubmitChanges() để lưu vào CSDL
<DataContext name> db = new <DataContext name>();
<TableName><tên đối tượng> = new <TableName>();
<tên đối tượng>.<tên thuộc tính 1> = <giá trị 1>;
[<tên đối tượng>.<tên thuộc tính 2> = <giá trị 2>; ……… ]
db.<TableNames>.Add(<tên đối tượng>);
db.SubmitChanges();
Trang 362.1.4.4 Xóa dữ liệu ra khỏi CSDL
Để xóa dữ liệu ra khỏi CSDL, ta cần phải xác định các đối tượng muốn xóa, sau đó remove đối tượng ra khỏi lớp chứa nó, và dùng hàm SubmitChanges() để lưu vào CSDL
<DataContext name> db = new <DataContext name>();
var <tên biến 1> = from <nặc danh> in db.<TableName>
[where <điều kiện>]
select <nặc danh>;
db.<TableNames>.DeleteAllOnSubmit(<tên biến 1>); db.SubmitChanges();
Trường hợp, chỉ có một đối tượng cần xóa, thì đối tượng đó có thể được xác định như
sau: <tên bảng><tên đối tượng> = db.<tên bảng>.Single(<điều kiện>);
2.1.4.5 Gọi một thủ tục
Để gọi một thủ tục, ta thực hiện như sau:
<DataContext name> db = new <DataContext name>();
var <tên biến> = db.<Tên thủ tục>( [<tham số 1> [, <tham số 2> ……….]]);
Trong đó: tên biến chứa kết quả có được từ thủ tục vừa gọi
2.2 Sử dụng GPS và A-GPS trên Windows Phone
2.2.1 Tổng quan về GPS
GPS là từ viết tắt của Global Positioning System có nghĩa là hệ thống định vị toàn
cầu, dùng để xác định vị trí trên trái đất thông qua các vệ tinh nhân tạo, do Bộ Quốc phòng Mỹ thiết kế, xây dựng, vận hành và quản lý
Phần kiểm soát: có chức năng kiểm soát các vệ tinh đi đúng hướng trên quỹ đạo
và thông tin thời gian chính xác Có tất cả 5 trạm kiểm soát được đặt rải rác trên trái đất, trong đó có 4 trạm hoạt động tự động và 1 trạm làm nhiệm vụ kiểm soát trung tâm Bốn trạm tự động nhận tín hiệu liên tục từ vệ tinh và gửi dữ liệu về trạm
Trang 37trung tâm Tại đây, dữ liệu sẽ được sửa lại cho đúng và kết hợp với 2 anten khác để gửi lại thông tin cho các vệ tinh
Phần sử dụng: là các thiết bị nhận tín hiệu vệ tinh GPS và người sử dụng các thiết
bị này
GPS hoạt động theo cơ chế sau:
Các vệ tinh GPS bay vòng quanh Trái Đất hai lần trong một ngày theo một quỹ đạo rất chính xác và phát tín hiệu có thông tin xuống Trái Đất Các máy thu GPS nhận thông tin này và bằng phép tính lượng giác tính được chính xác vị trí của người dùng Về bản chất, các máy thu GPS sẽ so sánh thời gian tín hiệu được phát đi từ vệ tinh với thời gian nhận được chúng Độ sai lệnh về thời gian này cho biết máy thu GPS cách vệ tinh bao xa Kết hợp với nhiều khoảng cách đo được từ nhiều vệ tinh, máy thu có thể tính được vị trí của người dùng và hiển thị lên bản đồ
2.2.2 Tổng quan về A-GPS
A-GPS là từ viết tắt của Assisted Global Positioning System, là hệ thống định vị sử
dụng thêm các thông tin trợ giúp thông tin GPS
Hầu hết các thiết bị cầm tay GPS hiện nay (như điện thoại di động, PDA,…) đều ứng dụng công nghệ A-GPS (Assisted GPS) Bởi vì, trong nhiều điều kiện thực tế, việc truyền dẫn tín hiệu GPS giữa vệ tinh và thiết bị nhận trên mặt đất hoạt động rất kém hoặc thậm chí không thể hoạt động, nhất là trong các thành phố lớn nhiều với nhà cao tầng hoặc ở trong không gian kín Và do đó, A-GPS chính là giải pháp cho vấn đề này
A-GPS hoạt động theo cơ chế sau :
Thay cho việc truyền tín hiệu đến vệ tinh, A-GPS kết nối tín hiệu qua một “trạm trung chuyển”, đó là một hệ thống máy chủ hỗ trợ Hệ thống trung gian này xác định vị trí của thiết bị so với các trạm thu phát sóng của các mạng điện thoại trung gian trong khu vực và
từ đó tính toán ra vị trí trên hệ thống GPS Có thể nói, nếu không có sự hỗ trợ của các trạm trung chuyển qua mạng điện thoại di động này, thì thiết bị A-GPS vẫn có thể nhận được tín hiệu từ vệ tinh nhưng không có khả năng giải mã vị trí
Hình 2.1: Cách thức hoạt động của A-GPS
Trang 38Có thể nói, nếu không có sự hỗ trợ của các trạm trung chuyển qua mạng điện thoại di động này, thiết bị A-GPS vẫn có thể nhận được tín hiệu từ vệ tinh nhưng không có khả năng giải mã vị trí
Nguồn lấy thông
tin
Tín hiệu từ các vệ tinh cùng với tín hiệu từ các cột BTS của nhà cung cấp dịch vụ mạng Tín hiệu từ các vệ tinh
Tốc độ
A-GPS xác định tọa độ nhanh hơn, do có kết nối với các cột BTS (trạm thu phát sóng di động), nhanh hơn kết nối với vệ tinh
Thường mất hàng phút để xác định tọa độ, vì phải mất chừng đó thời gian mới có thể kết nối đến được từ 4 vệ tinh trở lên Và thiết bị phải
ở khu vực thoáng, không bị che chắn
Mức độ tin cậy Tọa độ xác định bởi A-GPS thường có sai số nhiều hơn GPS
Tọa độ xác định bởi GPS thường có chính xác cao (sai lệch trong phạm vi 1m)
Chi phí
A-GPS có thể mất phí, vì phải
sử dụng sóng của nhà cung cấp dịch vụ mạng
GPS kết nối đến các vệ tinhcung cấp miễn phí
Các thiết bị dùng Điện thoại di động Các thiết bị định vị trên ô
tô, máy bay, tàu biển
2.2.3 Sử dụng GPS trên Windows Phone
Trên môi trường lập trình, Windows Phone 8 hỗ trợ việc lấy thông tin vị trí của điện thoại GPS thông qua hai lớp (class) sau:
GeoCoordinateWatcher class thuộc namespace System.Device.Location
Geolocator class thuộc namespace Windows.Devices.Geolocation
Hai class trên có những điểm chung, điểm riêng sau:
Trang 392.2.3.1 Điểm chung
Cả hai class trên đều hỗ trợ cho việc lấy thông tin vị trí của điện thoại GPS thông qua
cả hai cách:
Lấy thông tin vị trí của điện thoại tại thời điểm yêu cầu
Lấy thông tin vị trí của điện thoại một cách liên tục
2.2.3.2 Điểm riêng
Bảng 2.4: Bảng so sánh GeoCoordinateWatcher class và Geolocator class:
GeoCoordinateWatcher class Geolocator class Namespace System.Device.Location Windows.Devices.Geolocation
Nguồn gốc Có từ Windows Phone 7 Chỉ có ở Windows Phone 8
Khả năng truy xuất
- Thuộc tính Position chứa thông tin vị trí của điện thoại
- Hỗ trợ truy xuất thông tin ở chế độ nền (background)
- Không có phương thức start(), stop(), chỉ cần khai báo đối tượng thuộc lớp
- GetGeopostionAsync(): lấy thông tin vị trí của điện thoai
Từ kết quả so sánh trên, nhóm nghiên cứu đề tài quyết định chọn Geolocation class để lấy thông tin vị trí của điện thoại GPS, do khả năng tối ưu hơn của Geolocation so với GeoCoordinateWatcher
2.2.3.3 Sử dụng Geolocation class
Để sử dụng Geolocation class, ta cần phải:
Khai báo namespace Windows.Devices.Geolocation
Bật ID_CAP_LOCATION trong file WMAppManifest.xml của ứng dụng
Lớp Geolocation cung cấp cho người dùng truy xuất thông tin vị trí của điện thoại GPS thông qua hai cách sau:
Truy xuất thông tin vị trí tại thời điểm yêu cầu (single-shot location)
Truy xuất liên tục thông tin vị trí điện thoại (continuously location)
Trang 40Việc sử dụng cách truy xuất thông tin nào là tùy thuộc vào yêu cầu của từng ứng dụng
cụ thể Tuy nhiên, nhóm nghiên cứu thấy rằng đối với các ứng dụng chỉ yêu cầu thông tin GPS của điện thoại tại một thời điểm nào đó thì cách 1 là sự lựa chọn tốt nhất, còn đối với các ứng dụng yêu cầu cập nhật liên tục vị trí của điện thoại thì nên chọn cách 2, tuy nhiên việc sử dụng cách này sẽ tiêu tốn năng lượng pin của điện thoại nhiều hơn
2.2.3.3.1 Single-shot location
Để truy xuất thông tin vị trí tại một thời điểm, ta thực hiện các bước sau:
Bước 1: khởi tạo một đối tượng thuộc lớp Geolocation
Bước 2: Thiết lập thuộc tính tùy chọn DesiredAccuracyInMeters cho đối tượng
vừa tạo để xác định độ chính xác mong muốn (đơn vị mét) cho dữ liệu trả về từ việc xác định vị trí
Bước 3: Sử dụng phương thức bất đồng bộ GetPositionAsync() hoặc
GetPositionAsync(Timespan, Timespan) để lấy vị trí của điện thoại Các phương thức trên có thể sử dụng kết hợp với từ khóa await (sử dụng await đòi hỏi phương thức chứa nó phải khai báo async) phía trước để “chờ” các phương thức này hoàn tất nhằm gán thông tin kết quả cho đối tượng thuộc lớp GeoPosition
2.2.3.3.2 Continuously location
Để truy xuất liên tục thông tin vị trí của điện thoại, ta thực hiện các bước sau:
Bước 1: khởi tạo một đối tượng thuộc lớp Geolocation
Bước 2: thiết lập các thông số tùy chọn và khai báo các sự kiện cho đối tượng:
o DesiredAccuracy: bao gồm 2 thông số Default (mặc định) và High, dùng để
thiết lập độ chính xác cho việc truy xuất thông tin vị trí GPS, trong đó:
Default: sử dụng Wi-Fi hoặc các tháp tín hiệu di động để xác định vị trí tùy thuộc vào sự sẵn có của các nguồn
High: sử dụng bộ nhận GPS để xác định vị trí, cho độ chính xác cao hơn chế
độ mặc định (default), tuy nhiên có thể làm ảnh hưởng đến hiệu suất hoạt động của ứng dụng
o Movement Threshold: xác định khoảng cách tối thiểu tính bằng mét để phát
sinh sự kiện PositonChanged
Bước 3: Khai báo các sự kiện (event handle) StatusChanged và PositionChanged
cho đối tượng
o StatusChanged là sự kiện được phát sinh khi có sự thay đổi về tình trạng truy
xuất thông tin vị trí của điện thoại với các giá trị sau:
PositionStatus.Disable: cho biết ứng dụng không được phép sử dụng thông tin GPS hoặc GPS chưa được mở