t v n đ
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 khác, đóng vai trò quan trọng trong sự phát triển kinh tế, văn hóa và xã hội của đất nước Tuy nhiên, hệ thống giao thông tại đây rất phức tạp và không đồng bộ, gây khó khăn cho người dân trong việc di chuyển Tình trạng ùn tắc giao thông diễn ra thường xuyên vào giờ cao điểm, gây bức xúc trong cộng đồng Do đó, cần có những giải pháp hợp lý để giải quyết bài toán giao thông tại thành phố.
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 và người dân từ nhiều tỉnh, thành khác nhau đến học tập, sinh sống và làm việc Sự gia tăng số lượng xe máy được xem là một trong những nguyên nhân chính gây ra tình trạng kẹt xe tại đây Do đó, để giảm thiểu ùn tắc giao thông, cần có giải pháp hạn chế số lượng xe máy trên đường, đồng thời bảo đảm không ảnh hưởng đến việc di chuyển của người dân.
Trong thời gian qua, thành phố đã tập trung vào việc hoàn thiện và nâng cao chất lượng dịch vụ vận tải hành khách bằng xe buý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 kiếm các tuyến xe, trạm dừng và điểm đỗ cũng gia tăng đáng kể.
Mặc dù có những tiến bộ trong việc phát triển hệ thống giao thông công cộng, nhưng vẫn còn nhiều hạn chế ảnh hưởng đến việc di chuyển của người dân Thông tin về các tuyến xe và thời gian hoạt động chưa đáp ứng đầy đủ nhu cầu đa dạng và liên tục của người dùng Sự thiếu rõ ràng trong bảng thông báo tuyến xe gây khó khăn cho người dân, đặc biệt là học sinh, sinh viên và những người mới đến thành phố Đối với những người đã quen với việc sử dụng dịch vụ xe buýt, nhu cầu tìm kiếm lộ trình phù hợp với thời gian nhanh nhất, chi phí thấp nhất và thời gian di chuyển ngắn nhất trở nên cấp thiết.
Để hỗ trợ người dân trong việc tìm kiếm thông tin về các tuyến xe, trạm dừng và tìm đường đi bằng xe buýt một cách chính xác, nhanh chóng và hiệu quả, cần có một giải pháp đáp ứng các tiêu chí đa dạng.
Các gi i pháp công ngh hi n có
Mặc dù có nhiều phương pháp và cách thức định hướng cho việc di chuyển, 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 ra nhiều khó khăn cho người dân và đôi khi không chính xác Ngược lại, khi sử dụng bản đồ online trên các thiết bị như máy tính bàn, laptop hay máy tính bảng, sản phẩm này mặc dù hiệu quả nhưng lại không phù hợp cho giao thông do quá cồng kềnh và kém an toàn Vấn đề đặt ra là cần có một thiết bị vừa gọn nhẹ, vừa hỗ trợ bản đồ, giúp người sử dụng tìm đường một cách nhanh chóng và hiệu quả.
Trong những năm gần đây, ngành điện thoại di động đã phát triển vượt bậc, với smartphone trở thành một phần không thể thiếu trong cuộc sống của con người Nhờ vào smartphone, người dùng có thể thực hiện nhiều hoạt động từ cơ bản 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 và định vị GPS Smartphone đã trở thành bạn đồng hành quan trọng trong xã hội hiện đại Vì vậy, việc xây dựng một phần mềm tìm đường trên điện thoại di động là giải pháp tối ưu cho người dùng.
Ngành công nghiệp smartphone hiện nay chủ yếu bao gồm các hệ điều hành như Windows Phone, Symbian, iOS, Android và webOS, liên kết với những "gã khổng lồ" như Microsoft, Apple và Google Thị trường phần mềm phát triển trên nền tảng di động ngày càng phong phú và đa dạng Tuy nhiên, số lượng ứng dụng hỗ trợ người dùng tìm đường đi bằng xe buýt tại Việt Nam vẫn còn hạn chế, chỉ có một vài ứng dụng như BusMap và BUSITUS 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 smartphone là điều cần thiết.
Hệ điều hành Windows Phone 7 của Microsoft, mặc dù ra mắt sau cùng, đã mang đến những tính năng thân thiện với người dùng Microsoft đã phát triển giao diện người dùng mới mang tên Metro, giúp tích hợp dễ dàng với các ứng dụng và phần mềm của hãng Phiên bản Windows Phone 8, ra mắt vào ngày 29 tháng 10 năm 2012, được xem là sự kiện đáng chú ý và đã phát huy nhiều ưu điểm 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 bằng kernel của Windows NT, được thiết kế cho Windows 8 Điều này giúp người dùng dễ dàng kết nối (port) giữa hai hệ điều hành.
Windows Phone 8 hỗ trợ CPU đa nhân và nhiều định dạng, đi kèm với Start Screen tùy biến, phiên bản di động của Internet Explorer 10, và tích hợp Nokia Maps với giao diện thân thiện Lập trình trên Windows Phone chủ yếu 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, giúp các nhà phát triển tạo ra những ứng dụng độc đáo và hấp dẫn Ngoài ra, các nhà phát triển còn có thể tạo ra các ứng dụng sinh động thông qua việc lập trình dựa trên hai công nghệ Silverlight và XNA.
Người dùng Windows Phone 7 và 8 gặp khó khăn trong việc truy cập Google Maps qua trình duyệt trên điện thoại, điều này được xem là một thiếu sót lớn so với Android và iOS Sự cạnh tranh giữa Microsoft và Google trong lĩnh vực này đã dẫn đến việc thiếu hụt các ứng dụng tìm đường bằng xe buýt tại Việt Nam trên Windows Phone 8 Hiện tại chỉ có một số ít ứng dụng như BusMap, vì vậy việc phát triển một ứng dụng tìm đường bằng xe buýt cho Windows Phone 8 là rất cần thiết.
Lý do ch n đ tài
Xuất phát từ yêu cầu cấp bách của thực tiễn đời sống và các giải pháp công nghệ hiện đại, việc 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 là rất cần thiết Ứng dụng này sẽ giúp người dùng tối ưu hóa hành trình di chuyển với các tiêu chí như thời gian đi nhanh nhất, chi phí thấp nhất, thời gian chờ ít nhất và số chuyến đi ít nhất.
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:
S d ng b n đ Google maps hai ch đ là: online và offline
nh v GPS, giúp xác đnh v trí ng i dùng 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 của ứng dụng cung cấp nhiều tùy chọn phong phú, cho phép người dùng tìm kiếm lộ trình tối ưu dựa trên các tiêu chí như thời gian di chuyển nhanh nhất, chi phí thấp nhất, thời gian đi bộ ít nhất và số tuyến đi ít nhất.
Ph ng pháp th c hi n
Mobile applications are developed using Microsoft Visual Studio 2012, which requires the installation of the Windows Phone Software Development Kit Additionally, the user interface of the mobile application is designed with Microsoft Expression Blend, creating an attractive and user-friendly experience.
CSDL được xây dựng nhằm quản lý thông tin về lộ trình di chuyển của các tuyến xe buýt tại thành phố Hồ Chí Minh, sử dụng môi trường Microsoft SQL Server 2008 để đảm bảo tính toàn vẹn và ràng buộc cho dữ liệu.
Người dùng có thể truy xuất thông tin từ dịch vụ Google Maps API để tìm kiếm trạm dừng và tìm đường đi bằng xe buýt giữa hai điểm trên bản đồ Họ đã thành công trong việc chuyển đổi bản đồ Bing Maps sang bản đồ Google Maps, tạo thuận lợi cho người dùng trong việc sử dụng bản đồ trực tuyến trên Windows Phone.
Việc lập trình mạng bằng socket trong môi trường NET đã được sử dụng để xây dựng server chạy trên localhost, nhằm hiện thực hóa tính năng sử dụng bền vững ngay cả khi không có kết nối mạng.
T ng quan v l p trình Windows phone 8
Cài đ t môi tr ng
Windows Phone 8 development is supported by Microsoft Visual Studio 2012, along with the Windows Phone SDK (Software Development Kit), or alternatively, Microsoft Visual Studio 2013, which includes the integrated Windows Phone SDK.
Giao di n ng d ng còn đ c phát tri n trên Microsoft Expression Blend
C s d li u đ c xây d ng trên môi tr ng Microsoft SQL Server 2008.
B c c c a m t ng d ng
Windows Phone 8 bao gồm hai phần chính: các trang xaml để thiết kế giao diện người dùng và trang code behind (.cs) để 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:
AppManifest.xml là tệp cấu hình cho ứng dụng khi xuất ra file xap, dùng để cài đặt trên thiết bị di động AssemblyInfo.cs chứa thông tin về tên và phiên bản của ứng dụng WMAppManifest.xml là tệp cấu hình chứa thông tin về tên, biểu tượng và trang mặc định của ứng dụng, đồng thời định nghĩa các ID cần thiết cho các lớp Thư mục references chứa các thư viện cần thiết để sử dụng các lớp App.xaml là tệp cấu hình của ứng dụng, được "quét" khi ứng dụng khởi chạy để kiểm tra cấu hình App.xaml.cs là trang code-behind chứa mã lệnh cho App.xaml ApplicationIcon.png là biểu tượng đại diện cho ứng dụng khi cài đặt trên thiết bị di động, trong khi Background.png là hình nền của ứng dụng trên màn hình chính MainPage.xaml là trang mặc định được xây dựng cho ứng dụng, cho phép tạo thêm nhiều trang tùy thuộc vào mục đích sử dụng MainPage.xaml.cs là trang code-behind cho MainPage.xaml, xử lý các chức năng và sự kiện của trang này SplashScreenImage.png sẽ hiển thị nếu ứng dụng mất thời gian để tải dữ liệu, chỉ xuất hiện trong lần đầu khi khởi chạy ứng dụng.
Tìm hi u XAML trong l p trình Windows phone
XAML, viết tắt của Extensible Application Markup Language, là ngôn ngữ được sử dụng để định hình các đối tượng trong NET và là một biến thể của XML (Extensible Markup Language) Nó 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ở/đóng, đồng thời cũng cho phép tổ chức các đối tượng theo mô hình thừa kế.
Trong Windows Phone, XAML được sử dụng để tạo lập giao diện người dùng, giúp đơn giản hóa quy trình làm việc giữa các cá nhân trong phát triển ứng dụng XAML cho phép tách biệt phần thiết kế giao diện (designer) và phần lập trình logic (coder), từ đó nâng cao hiệu quả trong quá trình xây dựng và phát triển ứng dụng.
XAML cho phép người dùng thiết kế giao diện cho ứng dụng Windows Phone trong hai môi trường Visual Studio và Expression Blend Hơn nữa, sức mạnh của XAML còn thể hiện qua khả năng binding dữ liệu vào các thành phần được chỉ định trong XAML.
Ngôn ng C# trong vi c xây d ng ng d ng trên Windows phone
C# là một ngôn ngữ lập trình hiện đại được phát triển bởi Microsoft, với sự đóng góp chủ yếu từ Anders Hejlsberg và Scott Wiltamuth Ngôn ngữ này được xây dựng dựa trên nền tảng của C++ và Java, mang lại nhiều tính năng nổi bật như xử lý ngoại lệ, thu gom rác tự động, hỗ trợ kiểu dữ liệu mạnh và bảo mật mã nguồn.
C# là ngôn ngữ lập trình đơn giản, với nhiều tính năng phức tạp và hiện đại hơn so với các ngôn ngữ lập trình trước đó như Java và C++ Ngôn ngữ này hỗ trợ lập trình hướng đối tượng, bao gồm macro, template, đa kế thừa và lớp cơ sở ảo, giúp các nhà phát triển dễ dàng sử dụng C# được phát triển dựa trên nền tảng C/C++, nhưng có những cải tiến đáng kể khiến ngôn ngữ này ngày càng phổ biến Một trong những cải tiến đó là loại bỏ sự phức tạp trong cú pháp, ví dụ như thay thế ba toán tử trong C++ là ::, và -> bằng một toán tử duy nhất là
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à một ngôn ngữ lập trình mạnh mẽ và rất phổ biến hiện nay Nó được sử dụng rộng rãi trong nhiều dự án khác nhau, từ phát triển ứng dụng desktop, web, đến việc xây dựng các trình biên dịch cho các ngôn ngữ khác Sự linh hoạt và tính năng đa dạng của C# đã khiến nó trở thành lựa chọn ưa thích của nhiều lập trình viên.
C# là ngôn ngữ lập trình phổ biến với khoảng 80 từ khóa và nhiều kiểu dữ liệu khác nhau Sự đa dạng và tính linh hoạt này là một trong những lý do chính khiến C# trở thành một trong những ngôn ngữ được sử dụng rộng rãi 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
Kí hiệu dữ liệu là một tín hiệu đặc trưng cho kích thước và khả năng của dữ liệu đó, chẳng hạn như kiểu int có kích thước 4 byte hoặc một dữ liệu button có thể được phản hồi 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 đã đ c xây d ng s n (built – in) mà ngôn ng cung c p và ki u d li u do ng i l p trình t đnh ngh a (user – defined)
Góc độ thứ hai của 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 chia này dựa trên sự khác nhau trong cách lưu trữ kiểu dữ liệu giá trị và tham chiếu trong bộ nhớ Đối với kiểu dữ liệu giá trị, nó sẽ được lưu đúng kích thước thực tế trong bộ nhớ đã cấp phát là stack Trong khi đó, kiểu dữ liệu tham chiếu được lưu trong stack nhưng đối tượng thực tế sẽ được lưu trong bộ nhớ heap Việc lưu trữ đố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ị ngược trong các đối tượng và chuỗi Đồng thời, tất cả các kiểu dữ liệu do người dùng định nghĩa ngoài 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
Ki u C# S byte Ki u NET t ng ng Mô t byte 1 Byte S nguyên d ng không d u t 0-
Trong lập trình, các kiểu dữ liệu cơ bản bao gồm: char (2 byte) cho ký tự Unicode, bool (1 byte) cho giá trị logic true/false, sbyte (1 byte) cho số nguyên có dấu với giá trị từ -128 đến 127, short (2 byte) cho số nguyên có dấu với giá trị từ -32,768 đến 32,767, ushort (2 byte) cho số nguyên không dấu với giá trị từ 0 đến 65,535, int (4 byte) cho số nguyên có dấu với giá trị từ -2,147,483,648 đến 2,147,483,647, và uint (4 byte) cho số nguyên không dấu với giá trị từ 0 trở lên.
Ki u d u ch m đ ng, giá tr x p x t 3,4E-38 đ n 3,4E+38, v i 7 ch s có ngh a double 8 Double
Ki u d u ch m đ ng có đ chính xác g p đôi, giá tr x p x t 1,7E-308 đ n 1,7E+308, v i 15, 16 ch s có ngh a decimal 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 long 8 Int64
Ki u s nguyên có d u có giá tr trong kho ng :
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:
là m t ki u d li u h p l b t k trong C#
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: = ;
B n ch t c a h ng chính là bi n nh ng giá tr c a h ng s không thay đ i trong su t th i gian t n t i c a nó
Trong C#, khai báo h ng th ng đ c đ t trong ph n khai báo toàn c c đ u ch ng trình, ngay sau các khai báo ti n x lý Có hai cách đ khai báo h ng:
Dùng ch th ti n x lý: #define
Dùng t khóa const: const = ;
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 …else… v i cú pháp nh sau:
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”
Câu lệnh điều kiện trong lập trình bao gồm câu lệnh đơn, câu lệnh ghép và câu lệnh điều kiện Ý nghĩa của nó là nếu điều kiện được đặt ra là đúng (true), thì sẽ thực hiện câu lệnh thứ nhất; ngược lại, nếu điều kiện sai, sẽ thực hiện câu lệnh thứ hai Như vậy, các câu lệnh này được thực hiện dựa trên giá trị đúng hoặc 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 ()
Case : [; break; ] Case : [; break; ] ……
Case : [; break; ] [default: ; break; ]
Câu lệnh switch trong lập trình cho phép thực thi các câu lệnh tương ứng với giá trị của một biến Khi giá trị của biểu thức điều kiện trùng với giá trị của một case, các câu lệnh trong case đó sẽ được thực hiện cho đến khi gặp lệnh break, lúc này câu lệnh switch sẽ kết thúc Để đảm bảo tính chính xác cho chương trình, mỗi case cần phải có lệnh break đi kèm.
Câu lệnh switch(…) là một cấu trúc thay thế cho câu lệnh if…else…, cho phép chuyển đổi thành công giữa hai loại câu lệnh này Tuy nhiên, câu lệnh if…else… không thể chuyển đổi thành câu lệnh switch(…) Sự khác biệt chính nằm ở việc câu lệnh switch(…) chỉ có thể kiểm tra điều kiện của một biểu thức nhất định và so sánh giá trị của biểu thức đó với các case cụ thể Ngược lại, câu lệnh if…else… cho phép biểu thức điều kiện linh hoạt hơn, vì các câu lệnh if có thể kiểm tra nhiều điều kiện khác nhau như A, B, v.v
Câu lệnh switch( ) hoặc if else được sử dụng tùy thuộc vào tình huống cụ thể Đối với trường hợp cần kiểm tra đ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ả, việc lựa chọn câu lệnh switch( ) 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à một biểu thức logic, trong đó có thể là lệnh đơn, khối lệnh, hoặc câu lệnh điều kiện Ít nhất một câu lệnh trong khối lệnh sẽ ảnh hưởng đến việc đánh giá lại.
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
Cú pháp: for ( [] ; [] ; [] ) ;
Trong đó, phần khởi tạo là một hoặc nhiều biểu thức gán, được phân cách bởi dấu phẩy, có nhiệm vụ khởi tạo giá trị ban đầu cho các biến Điều kiện thường là biểu thức logic Phần hiệu chỉnh là một hoặc nhiều biểu thức gán, được phân cách bởi dấu phẩy, có nhiệm vụ thay đổi giá trị của các biến trong phần khởi tạo Lệnh có thể là câu lệnh đơn, câu lệnh lặp, hoặc câu lệnh điều kiện Ý nghĩa: khi nào điều kiện còn thỏa mãn thì còn thực hiện lệnh.
Trong vòng lặp for(…), phần khởi tạo được thực hiện đúng một lần, phần điều kiện 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 đúng cho vòng lặp Vòng lặp for( ; ; ) là vòng lặp vô hạn, không có điểm dừng.
Trong đó: o th ng là bi u th c logic o có th là câu l nh đ n, kh i l nh, ho c câu l nh đi u khi n Trong
Tìm hi u LINQ To SQL
LINQ là t vi t t t c a 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 thành các lớp NET, giúp người dùng truy vấn và cập nhật cơ sở dữ liệu bằng ngôn ngữ LINQ Nó hỗ trợ đầy đủ transaction, view và các stored procedure (SP), đồng thời cung cấp cách dễ dàng để kiểm tra tính hợp lệ của dữ liệu và các quy tắc 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
Hình 2.1: Mô hình ho t đ ng c a LINQ to SQL Trong 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
Cú pháp đ l y thông tin t CSDL b ng ngôn ng LINQ nh sau:
db = new (); var = from in db.
[where ] select ; | select new { .[,…]};
Trong đó: là danh sách các k t qu nh n đ c t truy v n,
là tên c a file DataContext
2.1.5.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ào CSDL thông qua hàm SubmitChanges()
db = new ();
= db..Single();
. = ;
[. = ;………….] db.SubmitChanges();
Trong đó: đi u ki n là bi u th c có d ng: =>.
2.1.5.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
db = new ();
= new ();
. = ;
[. = ; ……… ] db..Add(); db.SubmitChanges();
2.1.5.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
db = new (); var = from in db.
[where ] select ; db..DeleteAllOnSubmit(); 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: = db..Single();
2.1.5.5 G i m t th t c g i m t th t c, ta th c hi n nh sau:
db = new (); var = db.( [ [, ……….]]);
Trong đó: tên bi n ch a k t qu có đ c t th t c v a g i.
S d ng GPS và A-GPS trên Windows phone
T ng quan v GPS
GPS, hay Hệ thống Định vị Toàn cầu, là công nghệ được thiết kế để xác định vị trí trên trái đất thông qua các vệ tinh nhân tạo Hệ thống này do Bộ Quốc phòng Mỹ phát triển, xây dựng, vận hành và quản lý.
H th ng GPS bao g m 3 thành ph n chính:
Hệ thống GPS hoạt động dựa trên 24 vệ tinh, trong đó có 21 vệ tinh hoạt động và 3 vệ tinh dự phòng Các vệ tinh này cách nhau khoảng 12.000 dặm (1 dặm = 1,609 km) và di chuyển quanh Trái Đất, hoàn thành 2 vòng quỹ đạo trong khoảng thời gian gần 24 giờ Chúng bay với vận tốc 7.000 dặm mỗi giờ và được bố trí trên quỹ đạo sao cho các máy thu GPS có thể nhận tín hiệu từ ít nhất 4 vệ tinh tại bất kỳ thời điểm nào.
Phân hệ kiểm soát đóng vai trò quan trọng trong việc đảm bảo các vệ tinh di chuyển đúng hướng và cung cấp thông tin thời gian chính xác Hiện 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 Các 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 trung tâm Tại đây, dữ liệu sẽ được xử lý và kết hợp với 2 anten khác để truyền tả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 quay quanh Trái Đất trong một ngày theo một quỹ đạo nhất định và phát tín hiệu chứa 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, xác định chính xác vị trí của người dùng Bên cạnh đó, máy thu GPS 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 Sự chênh lệch 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 toán chính xác vị trí của người dùng và hiển thị lên bản đồ.
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
Các thiết bị cầm tay GPS hiện nay, như điện thoại di động và PDA, đều sử dụng công nghệ A-GPS (Assisted GPS) A-GPS giúp cải thiện khả năng định vị trong nhiều điều kiện thực tế, đặc biệt là ở những khu vực có tín hiệu GPS yếu, như trong thành phố đông đúc với nhiều nhà cao tầng hoặc trong không gian kín Do đó, A-GPS là giải pháp hiệu quả cho vấn đề này.
A-GPS ho t đ ng theo c ch sau :
A-GPS là công nghệ hỗ trợ định vị, sử dụng tín hiệu từ một "trạm trung gian" để xác định vị trí của thiết bị Hệ thống này xác định vị trí thông qua việc so sánh tín hiệu nhận được với các trạm thu phát sóng của các mạng di động trong khu vực, từ đó tính toán vị trí chính xác trên hệ thống GPS.
Hình 2.2: Cách th c ho t đ ng c a A-GPS
Nếu không có sự hỗ trợ của các trạm trung chuyển qua mạng di động, thiết bị A-GPS vẫn có khả năng nhận tín hiệu từ vệ tinh, nhưng sẽ gặp khó khăn trong việc giải mã vị trí chính xác.
B ng 2.3: B ng so sánh A-GPS và GPS trên m t s l nh v c
Tín hi u t các v tinh cùng v i tín hi u t các c t BTS (tr m thu phát sóng di đ ng) c a nhà cung c p d ch v m ng
A-GPS xác đnh t a đ nhanh h n, do có k t n i v i các c t BTS, 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)
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 tinh cung 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
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:
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
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 thông tin v trí T t Nhanh h n, t i u h n so v i
GeoCoordinateWatcher c đi m khác khi s d ng
- Không h tr truy xu t thông tin ch đ n n
- Cung c p ph ng th c start(), stop() đ b t đ u và k t thúc yêu c u 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 Trong ng d ng c a đ tài, vi c truy xu t thông tin v trí đi n tho i GPS đ c th c hi n thông qua Geolocator class
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)
Cách truy xuất thông tin phụ thuộc vào yêu cầu của từng người dùng Đối với những người cần thông tin GPS tại một điểm cụ thể, lựa chọn tốt nhất là sử dụng cách 1 Trong khi đó, nếu người dùng yêu cầu cập nhật liên tục vị trí của địa điểm, cách 2 sẽ là lựa chọn phù hợp, mặc dù 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 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í
Phương thức GetPositionAsync() và GetPositionAsync(Timespan, Timespan) được sử dụng để lấy vị trí của địa điểm Các phương thức này có thể được kết hợp với từ khóa await, yêu cầu phương thức chứa nó phải được khai báo là async Điều này cho phép các phương thức hoàn tất và 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 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: DesiredAccuracy bao gồm 2 thông số Default (mặc định) và High, được sử dụng để thiết lập độ chính xác trong việc truy xuất thông tin vị trí GPS.
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
Hệ thống GPS cung cấp độ chính xác cao trong việc xác định vị trí, vượt trội hơn so với các phương pháp mặc định Tuy nhiên, độ chính xác này có thể bị ảnh hưởng bởi các yếu tố tác động đến hiệu suất hoạt động của người dùng Để khắc phục, ngưỡng di chuyển được thiết lập nhằm xác định khoảng cách tối thiểu tính bằng mét để kích hoạt sự kiện PositonChanged.
B c 3: Khai báo các s ki n (event handle) StatusChanged và PositionChanged cho đ i t ng
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
PositionStatus.Initializing: đang chu n b cho vi c truy xu t thông tin v trí đi n tho i
PositionStatus.Nodata: không truy xu t đ c thông tin v trí
PositionStatus.Ready: truy xu t thành công, có d li u tr v
PositionStatus.NotAvailable: c nh báo này không xu t hi n trong ng d ng Windows phone, ch xu t hi n trong ng d ng Windows desktop khi yêu c u ph n c ng không đáp ng đ c
PositionChanged là s ki n đ c phát sinh khi có s thay đ i v v trí c a thi t b GPS, trong s ki n này tham s PositionChangedEventArgs ch a các thông tin liên quan v v trí c a thi t b
S d ng Google maps trong ng d ng Windows phone 8
Gi i thi u control Maps trong Windows phone 8
Trong môi tr ng l p trình, Windows phone 8 h tr hai đi u khi n Maps:
i u khi n Maps có t h đi u hành Windows phone 7
i u khi n Maps m i, vi t l i t Bing maps c a Windows phone 7
Hai đi u khi n Maps có nh ng đi m chung, đi m riêng sau:
D li u c a c hai đi u khi n Maps này là không nhi u, gây khó kh n cho ng i dùng trong vi c tìm đ ng đi
Để cải thiện trải nghiệm người dùng trên Windows Phone, cần có giải pháp chuyển đổi các điều kiện Map thành các bản đồ có dữ liệu phong phú và đa dạng hơn, nhằm tạo thuận lợi cho việc sử dụng.
Bing Maps trên Windows Phone 7 cho phép người dùng tùy chỉnh lớp cơ sở (Base Layer) để chuyển đổi sang bản đồ tùy chỉnh (Custom Maps) phù hợp với mục đích sử dụng của họ.
Khi Maps trên Windows Phone 8 được cải tiến từ Bing Maps của Windows Phone 7, nó dựa trên Nokia’s Here Maps nhưng không cho phép người dùng tùy chỉnh cài đặt cơ bản Do đó, người dùng không thể chuyển đổi hoặc điều chỉnh Maps này theo yêu cầu cá nhân của mình.
Vì v y, ng d ng đã ch n đi u khi n Bing maps có t Windows phone 7 đ hi n th b n đ , do kh n ng m r ng c a Bing maps trong vi c chuy n đ i sang m t đi u khi n Maps khác.
So sánh Bing maps và Google maps
Hiện nay, có rất nhiều hãng phần mềm phát triển công nghệ bản đồ trên các thiết bị di động, trong đó nổi bật nhất là Google Maps của Google, được sử dụng rộng rãi và phổ biến trên hầu hết các nền tảng tìm kiếm và thiết bị di động Các dịch vụ khác như Bing Maps của Microsoft, Yahoo! Maps của Yahoo, và Nokia Maps cũng có mặt, nhưng dữ liệu của Bing Maps không phong phú, gây khó khăn trong việc tìm đường Windows Phone cũng cung cấp tính năng Maps, nhưng không thể so sánh với độ phổ biến và độ tin cậy của Google Maps.
Vì th c n ph i thay th b n đ truy n th ng đ c tích h p s n trên Window phone
- Bing maps b ng b n đ Google maps đ ng d ng t o ra có th ch y t t và đáp ng đ y đ nhu c u tìm đ ng đi c a ng i s d ng
Hình 2.3: So sánh Bing maps v i Google maps.
Chuy n đ i Bing maps sang Google maps
Để sử dụng Maps trên Windows Phone, người lập trình cần đăng ký miễn phí mã khóa (key) cho nhà phát triển tại https://www.bingmapsportal.com Mã khóa này được khai báo trong thuộc tính CredentialsProvider của thành phần Map.
Việc sử dụng bản đồ luôn đòi hỏi người dùng phải có thao tác thu nhỏ và quan sát toàn cảnh, nhưng cũng cần có khả năng phóng to để xem chi tiết một khu vực cụ thể Để cải thiện trải nghiệm người dùng, Map cung cấp tính năng zoom, có thể điều chỉnh thông qua thuộc tính ZoomBarVisibility, giúp lập trình viên tiết kiệm thời gian xử lý thao tác này.
Khi tải bản đồ, hàm GetUri(int x, y, zoomLevel) được sử dụng để xác định vị trí và mức độ phóng to của bản đồ, trong đó x và y là tọa độ vĩ độ và kinh độ, còn zoomLevel là mức phóng to Hàm này trả về một đường dẫn chứa hình ảnh bản đồ với kích thước 256x256 pixel Do đó, để chuyển đổi từ Bing Maps sang Google Maps, cần điều chỉnh hàm GetUri(int x, y, zoomLevel) sao cho phù hợp với mục đích sử dụng.
Trong trường hợp chuyển đổi từ Bing Maps sang Google Maps, việc sử dụng hàm GetUri(int x, int y, int zoomLevel) là cần thiết Hàm này hoạt động trên server của Google để lấy file nhị phân phù hợp với các thông số x, y và zoomLevel, thay vì sử dụng server của Microsoft.
Google đã cung c p d ch v l y nh b n đ Google maps đ a ch : http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}
Khi hàm GetUri gửi yêu cầu đến máy chủ của Google, file nhị phân từ Google Maps sẽ được trả về và hiển thị trên Bing Maps cho người sử dụng Do đó, việc người dùng sử dụng Bing Maps thực chất là dựa vào dữ liệu từ Google Maps.
Trong trường hợp offline, để hiển thị bản đồ Google Maps, hàm GetUri sẽ truyền đến server của ứng dụng Server này sẽ nhận yêu cầu từ hàm GetUri, tìm kiếm trong nguồn dữ liệu Google Maps đã được nạp trước đó, và xác định file chứa các thông số x, y, zoomLevel Cuối cùng, server sẽ trả về thông tin cho Bing Maps để hiển thị cho người sử dụng.
Google Maps phụ thuộc vào người dùng thông qua hai cách: nạp trực tiếp trong quá trình xây dựng ứng dụng hoặc cho phép tải về tại thời điểm người dùng yêu cầu Hiện nay, có nhiều công cụ cho phép tải bản đồ Google Maps về máy tính PC như Google Maps Tile Investigator và Google Maps Downloader Tuy nhiên, việc sử dụng các công cụ này gặp phải nhiều hạn chế.
H u h t ch cho phép t i b n đ t i m t v trí kèm v i m t m c đ zoom nh t đnh
zoom c a b n đ trong tr ng h p s d ng ph n m m ch a có b n quy n (key) là d i 13
Việc sử dụng Google Maps trên máy tính gặp nhiều khó khăn, thậm chí có thể không sử dụng được các công cụ cần thiết để tải bản đồ Để sử dụng Google Maps offline, người dùng cần đảm bảo tính liên tục của các khu vực với các mức độ zoom khác nhau Do đó, cần có giải pháp khác để tải bản đồ Google Maps về máy tính một cách hiệu quả.
Trong quá trình sử dụng Google Maps qua trình duyệt Internet Explorer, các tệp tin của bản đồ sẽ được lưu vào thư mục Temporary Internet Files Mỗi tệp tin này sẽ bao gồm thông tin như tên tệp, tọa độ x, y và mức độ zoom thông qua hàm GetUri Do đó, khi truy cập vào Google Maps và điều chỉnh mức độ zoom, toàn bộ bản đồ sẽ được sao chép vào thư mục này.
Vi c s d ng trình duy t Internet Explorer đem đ n r t nhi u l i ích sau:
Không c n ph i cài đ t, Internet Explorer đ c tích h p kèm theo h đi u hành Windows
Ti t ki m r t nhi u th i gian, công s c trong vi c t i b n đ Google maps
Ngu n nh b n đ đ m b o đ c tính liên t c c a c khu v c v i đ y đ các m c đ zoom khác nhau tùy theo m c đích s d ng
Các b c đ m th m c Temporary Internet Files nh sau:
Để truy cập vào lịch sử duyệt web trên Internet Explorer, người dùng cần vào Tools, chọn Internet Options, sau đó tìm đến mục Browsing history và chọn Setting để xem các file đã lưu Trong trường hợp xây dựng server, server này được thiết lập để hỗ trợ người dùng trong môi trường offline, sử dụng localhost để kết nối với người dùng Khi hàm GetUri gửi yêu cầu, server sẽ tiếp nhận và tìm file phù hợp để trả về cho Bing Maps, hiển thị cho người dùng Hơn nữa, việc này giúp người dùng có thể làm việc ngay cả khi không có kết nối internet, với hàm GetUri gửi yêu cầu đến server của người dùng Phần xây dựng server hỗ trợ offline sẽ được trình bày chi tiết hơn trong phần sau của báo cáo.
L p trình client – server trên NET
T ng quan v l p trình client – server
Socket là một thành phần của API (Application Programming Interface) cung cấp các phương thức để giao tiếp qua mạng Trong môi trường NET, hệ thống cung cấp hai namespace là System.Net và System.Net.Sockets, chứa các lớp hỗ trợ cho việc lập trình mạng với socket.
Stream socket là một giao thức TCP (Transmission Control Protocol) cho phép truyền dữ liệu giữa hai quá trình đã được thiết lập kết nối Giao thức này đảm bảo rằng dữ liệu được truyền đến đích một cách đáng tin cậy, chính xác và theo thứ tự, nhờ vào cơ chế quản lý lưu thông trên mạng và các phương pháp kiểm tra lỗi.
Datagram socket hoạt động trên giao thức UDP (User Datagram Protocol), cho phép truyền dữ liệu mà không yêu cầu thiết lập kết nối giữa hai quá trình Mặc dù giao thức UDP không đảm bảo tính chính xác, thứ tự và độ tin cậy của dữ liệu, nhưng nhờ vào việc không yêu cầu thiết lập kết nối, nó cho phép truyền tải dữ liệu nhanh hơn so với giao thức TCP Điều này làm cho UDP trở thành lựa chọn lý tưởng cho các ứng dụng như chat và game.
Trong ph m vi đ tài này, em ch xét vi c xây d ng ng d ng client – server ch đ có k t n i (TCP) đ phù h p v i yêu c u s d ng
Port là một công cụ quan trọng, giúp xác định duy nhất một tiến trình trên một máy trong mạng Mỗi ứng dụng trên server sẽ được đính kèm một số port nhất định, có nghĩa là server sẽ "đối" với port nào Khi client muốn giao tiếp với server, họ phải gửi yêu cầu đến đúng port tương ứng của server.
2.4.1.3 Mô hình client – server theo giao th c TCP
M t ng d ng client – server theo giao th c TCP ho t đ ng theo c ch sau:
Máy chủ (server) có nhiệm vụ lắng nghe và chờ đợi kết nối từ client thông qua nhiều địa chỉ IP và cổng đã được quy định Khi client gửi yêu cầu đến server, máy chủ sẽ nhận dữ liệu từ client, xử lý thông tin và gửi trả kết quả cho client.
- Client: là ng d ng đ c “ph c v ”, khi c n truy xu t d li u t server, client s g i yêu c u và ch đ i k t qu t server
Hình 2.4: Mô hình chung c a m t ng d ng client-server có k t n i (TCP)
Quá trình trên đ c hi n th c thông qua các giai đo n sau:
- Giai đo n 1: server t o socket, gán s hi u c ng (port) và “ch ” k t n i t client
- bind(): gán s hi u (port) cho socket
- listen(): server l ng nghe k t n i t client trên đa ch IP c a server và s hi u port
- Giai đo n 2: client t o Socket, g i yêu c u k t n i đ n server
Trong giao tiếp mạng, phía Client sử dụng hàm socket() để tạo socket và hàm connect() để yêu cầu kết nối đến server thông qua địa chỉ IP và cổng Phía Server sử dụng hàm accept() để chấp nhận kết nối từ Client, từ đó thiết lập một kênh giao tiếp cho phép Client và Server trao đổi thông tin.
- Giai đo n 3: client và server trao đ i thông tin v i nhau o Phía Server:
Sau khi nhận yêu cầu kết nối từ client, server sẽ thực hiện lệnh read() và "nghìn" cho đến khi nhận được yêu cầu (Request Message) từ client gửi đến Sau đó, server sẽ phân tích và thực hiện yêu cầu, kết quả sẽ được trả về client bằng lệnh write().
Sau khi g i yêu c u đ n server b ng l nh write(), client ch đ i k t qu (Reply Message) t server b ng l nh read()
Trong giai đoạn này, việc trao đổi thông tin giữa client và server phải tuân theo giao thức của ngôn ngữ Các lệnh read() và write() của client và server có thể thực hiện nhiều lần tùy vào từng ngôn ngữ cụ thể.
- Giai đo n 4: k t thúc phiên làm vi c
Kênh o s b xóa khi client và server đóng Socket b ng l nh close().
Xây d ng Server h tr s d ng b n đ offline
h tr cho vi c s d ng b n đ offline, server s đ c xây d ng kèm v i ng d ng và có các đ c đi m sau:
- Port: 33321 (giá tr tùy ch n)
Client ( ng d ng): hàm GetUri (int x, int y, int zoomLevel) s g i yêu c u
HTTP đ n server t i đa ch : http://127.0.0.1:33321/Maps/x=" + x + "&y=" + y + "&z=" + zoomLevel + ".png " Trong đó: o Maps: là th m c ch a ngu n nh đ c l u trong ng d ng o x, y, zoomLevel: là các thông s c a hàm GetUri
Server đóng vai trò quan trọng trong việc xử lý yêu cầu từ client Khi nhận yêu cầu kết nối, nếu đó là yêu cầu truy xuất thông tin (HTTP GET), server sẽ tìm kiếm trong nguồn dữ liệu Google Maps đã được lưu trữ để tìm ra file chứa các thông số x, y, zoomLevel của hàm GetUri, sau đó trả về cho Bing Maps để hiển thị cho người dùng.
Hình 2.5: Mô hình ho t đ ng c a server h tr s d ng b n đ offline
B n tin yêu c u HTTP bao g m các thông tin sau:
Bản tin yêu cầu HTTP theo mã định dạng ASCII bao gồm ba thành phần chính: dòng yêu cầu (như GET, POST, HEAD), các dòng header và kết thúc thông điệp Bản tin yêu cầu HTTP từ client có thể kèm theo các thông tin mà client muốn trao đổi với server Trong hàm GetUri, các thông số x, y và zoomLevel chỉ ra rằng client muốn truy xuất file nh trong thư mục Maps của server.
Hình 2.6: C u trúc c a m t b n tin yêu c u HTTP
HTTP bao gồm 3 thành phần chính: dòng trạng thái (chứa mã trạng thái), các dòng tiêu đề và dữ liệu trả về cho client Mã trạng thái được ghi tại dòng đầu tiên trong thông điệp trả về từ server cho client trong các trường hợp nhất định.
Trong môi tr ng l p trình Windows phone trên Net, vi c xây d ng server đ c hi n th c thông qua đ i t ng thu c l p StreamSocketListener (thu c namespace
Windows.Networking.Sockets) L p StreamSocketListener cung c p thu c tính
Hàm BindServiceNameAsync(string name) gán một siêu cổng cho server và xử lý sự kiện ConnectionReceived để tiếp nhận kết nối từ client Trong sự kiện ConnectionReceived, chúng ta có thể xây dựng các phương thức kiểm tra bận tín hiệu yêu cầu từ HTTP client, cũng như phản hồi kết quả về client.
Hình 2.7: C u trúc c a m t b n tin tr l i HTTP
Hình 2.8: Danh m c tr ng thái trong thông đi p server g i client
T ng quan v Web service
Gi i thi u v Web service
Web service là công nghệ cho phép client truy cập dữ liệu từ một ứng dụng web Nó sử dụng XML và HTTP, trong đó XML đóng vai trò mã hóa và giải mã dữ liệu, còn SOAP được dùng để truyền tải thông tin Web service không phụ thuộc vào nền tảng nào, cho phép truyền tải dữ liệu giữa các ngôn ngữ lập trình và các nền tảng khác nhau.
Hình 2.9: Ki n trúc Web service
SOAP, hay Simple Object Access Protocol, là một tiêu chuẩn W3C cho phép giao tiếp sử dụng ngôn ngữ XML để định nghĩa dữ liệu và truyền tải thông tin dưới dạng văn bản thuần (plain text) qua giao thức HTTP Đây là phương thức mà các dịch vụ web sử dụng để truyền tải dữ liệu Nhờ vào việc sử dụng XML, SOAP trở thành một giao thức độc lập với nền tảng, cho phép hoạt động trên bất kỳ ngôn ngữ lập trình nào và có khả năng hoạt động “xuyên qua” tường lửa (firewall).
M t thông đi p SOAP đ c chia làm hai thành ph n là header và body Ph n header ch ra đ a ch c a Web service, host, content-type, content-length t ng t nh m t thông đi p HTTP
Web service là giải pháp hữu ích cho việc giao tiếp giữa client và server trong các ứng dụng phân tán, phục vụ hàng trăm, hàng nghìn người dùng từ nhiều địa điểm khác nhau.
Trong ng d ng c a đ tài khóa lu n t t nghi p này, Web service đ c s d ng đ l u tr và truy n t i ngu n nh Google maps, ph c v khi ng i dùng có nhu c u download b n đ v đi n tho i đ s d ng offline.
Xây d ng Web service
Trên môi tr ng Net, xét v m t l p trình, m t Web service đ c xây d ng theo cú pháp sau:
YourMethod([]) là phương thức thực hiện chức năng của Web service, cho phép lập trình viên thêm các tham số vào Web service để truy xuất dữ liệu Những tham số này sẽ được đặt trong thư mục gốc của Web service, thường là thư mục App_Data Web service có thể được xuất bản trên localhost hoặc trên môi trường mạng Internet.
[WebMethod] public YourMethod([])
Google maps API Web services
Cú pháp s d ng
Trên n n Windows phone, vi c s d ng Google maps API đ c th c hi n thông qua các c ng Web services nh m truy v n d li u c a Google Các d ch v này đ c thi t k đ s d ng k t h p v i m t b n đ
Các d ch v Web services s d ng các yêu c u HTTP đ n đ ng d n (URL) c th , qua các thông s URL nh đ i s cho các d ch v K t qu tr v là m t t p tin theo cú pháp XML ho c JSON
Cú pháp đ s d ng Google maps API Web services có d ng: http://maps.googleapis.com/maps/api/service/output?parameters
Service: đ i di n cho tên c a m t d ch v c th (ch ng h n: geocode, direction,…)
Output: đ i di n cho lo i t p tin tr v c a k t qu truy v n (có th là t p tin theo đnh d ng XML ho c JSON)
Parameters: đ i di n cho các thông s (b t bu c và tùy ch n) kèm theo t ng service c th
The Google Maps API Web services can be accessed by users via HTTPS using the following syntax: `https://maps.googleapis.com/maps/api/service/output?parameters`.
HTTPS đ c khuy n khích cho các ng d ng bao g m các d li u ng i dùng nh y c m, ch ng h n nh v trí c a ng i dùng đ c g i đi nh là m t tham s trong yêu c u.
X lý k t qu tr v
Sau khi g i yêu c u thông qua Web service, thì h th ng server c a Google s tr v t p tin k t qu theo đnh d ng XML ho c JSON
XML và JSON đều là các định dạng tệp dùng để trao đổi dữ liệu, và việc lựa chọn giữa chúng phụ thuộc vào tình huống sử dụng cụ thể Đối với cùng một dữ liệu, tệp JSON có dung lượng nhỏ hơn, thời gian truyền tải nhanh hơn và dễ phân tích hơn so với XML Những đặc tính này của JSON rất phù hợp cho việc nhắn tin và phân tích kết quả trong các ứng dụng di động.
T p tin JSON là m t v n b n thu n (không có đnh d ng: màu s c, c ch ,…) theo mô hình phân c p (c u trúc cây) bao g m m t t p h p các ph n t con theo cú pháp JavaScript:
D li u bao g m m t c p tên và giá tr
D li u phân cách v i nhau b ng d u ph y
Ví d : { “first name” : “Tài” , “last name” : “Lê H u” }
Các đ i t ng “con” n m trong d u ngo c vuông ‘[]’ c a đ i t ng “cha”
{ “sinhvien”: [{“first name” : “Tài” , “last name” : “Lê H u” } ,
{ “first name” : “Huy” , “last name” : “Hu nh Ng c” } ]
Cú pháp s d ng các thành ph n c a t p tin JSON nh sau:
[“Tên thành ph n cha”][“Tên thành ph n con”]…
Ví d : trong t p tin JSON (t m g i là JSON_Result) tr v sau khi th c hi n truy v n Google Geocoding (tìm đa ch t t a đ ) có th l y đ c k t qu đa ch , ta th c hi n sau l nh sau:
JSON_Result["results"].ElementAt(0)["formatted_address"]
Do k t qu tr v có th ch a nhi u result, nên ElementAt(0): l y ph n t result đ u tiên
T p tin JSON tr v t Google maps API Web services bao g m hai thành ph n:
Status : cho bi t tình tr ng c a yêu c u
Results (trong Google Geocoding, Reverse Geocoding), routes (trong Google Direction), predictions (trong Google Autocomplete): ch a các k t qu tr v sau khi yêu c u
Các "status" có th ch a các giá tr sau:
"OK": ch ra r ng không có l i x y ra, có k t qu tr v
"ZERO_RESULTS": không có l i x y ra, nh ng không có k t qu tr v
"OVER_QUERY_LIMIT": ch ra r ng đang v t h n m c s l n yêu c u
"REQUEST_DENIED" ch ra r ng yêu c u đã b t ch i, có th là vì thi u m t thông s sensor
"INVALID_REQUEST": th ng ch ra r ng các truy v n (address ho c lat/lng) sai, ho c thi u
“UNKNOWN_ERROR”: ch ra r ng yêu c u không th th c hi n đ c do l i máy ch Yêu c u có th thành công n u c g ng th l i các l n sau.
Google Direction API Service
Google Direction API là một dịch vụ giúp tính toán hành trình di chuyển giữa các địa điểm thông qua yêu cầu HTTP Dịch vụ này hỗ trợ nhiều loại hình vận tải, bao gồm: đi lại bằng phương tiện công cộng (xe buýt), lái xe (xe hơi, xe taxi), lái xe đạp và đi bộ Để sử dụng dịch vụ này, người dùng cần cung cấp điểm bắt đầu và điểm kết thúc của lộ trình, có thể là một địa chỉ cụ thể (ví dụ: "37 Ngô Tất Tố, HCM, Việt Nam") hoặc tọa độ địa lý (vĩ độ, kinh độ).
N u ng d ng s d ng tài kho n mi n phí đ truy v n d li u c a Google, thì s có gi i h n sau:
2.500 yêu c u truy v n Google Direction m i ngày
Ch đ c phép s d ng t i đa 8 đi m chuy n h ng (waypoints) trong m i yêu c u
Tr ng h p, Google maps API dành cho ng i s d ng có tr phí s có gi i h n s d ng Google Direction cao h n:
Cho phép 23 đi m chuy n h ng trong m i l n yêu c u
Tuy nhiên, m i l n yêu c u s d ng Google Direcion s đ c tính là 4 yêu c u, các đi m chuy n h ng (waypoints) không đ c dùng cho h ng d n tìm đ ng đi b ng xe buýt
Khi m t yêu c u Direction API đ c g i đi có d ng nh sau: http://maps.googleapis.com/maps/api/directions/output?parameters
Bên c nh đó, đ s d ng Direction API trên HTTPS, ta s d ng cú pháp: https://maps.googleapis.com/maps/api/directions/output?parameters
Trong đó: output có th là JSON ho c XML
Ng i s d ng có th truy n nhi u tham s trong yêu c u, các tham s cách nhau b i kí t “&” Danh sách các tham s và giá tr đ c li t kê nh sau:
Các tham s b t bu c ph i có trong yêu c u:
Origin ( i m xu t phát): a ch d ng chu i ho c giá tr c a v đ / kinh đ mà t đó có th tính toán h ng di chuy n Khi đa ch là m t chu i, các d ch v
Directions s mã hóa chu i và chuy n đ i nó thành m t v đ / kinh đ đ tính toán h ng di chuy n
Điểm đến (destination) là một chuỗi dịch vụ có giá trị trong một vùng địa lý hoặc kinh tế, từ đó có thể tính toán hướng di chuyển Khi điểm đến được xác định là một chuỗi, các dịch vụ sẽ mã hóa chuỗi và chuyển đổi nó thành một vùng địa lý hoặc kinh tế cụ thể để tính toán hướng di chuyển.
Sensor: Cho bi t li u có hay không yêu c u tìm h ng di chuy n đ n t m t thi t b c m ng v trí Giá tr này ph i là true hay false
Chế độ di chuyển (mode) trong ứng dụng được xác định là "driving" khi người dùng chọn phương thức lái xe Ngoài ra, có thể lựa chọn các phương thức khác như đi bộ, đạp xe hoặc sử dụng phương tiện công cộng (transit) Nếu chọn "transit", người dùng cần xác định thêm tham số thời gian như departure_time (thời gian xuất phát) hoặc arrival_time (thời gian đến) để có kết quả chính xác.
Waypoints là các điểm dừng quan trọng trong lộ trình, giúp thay đổi lộ trình bằng cách xác định các vị trí mà hành trình bắt buộc phải đi qua Một waypoint được xác định thông qua tọa độ địa lý đã được mã hóa Chúng hỗ trợ cho các phương tiện như lái xe, đi bộ và đạp xe, nhưng không áp dụng cho các phương thức di chuyển bằng xe buýt.
Khi di chuyển, bạn nên tránh những tuyến đường có thu phí và các cao tốc Điều này giúp tiết kiệm chi phí và tránh các khu vực đông đúc, từ đó tạo ra trải nghiệm lái xe thoải mái hơn.
Region: Các mã vùng, mi n qu c gia g m hai kí t
Units: Xác đ nh các đ n v h th ng đ s d ng khi hi n th k t qu
Departure_time: Xác đ nh th i gian mong mu n kh i hành theo giây tính t n a đêm ngày 01/01/1970 (theo chu n gi qu c t UTC) cho đ n th i đi m yêu c u
Arrival_time: xác đnh th i gian mong mu n đ n m t đa đi m nào đó theo giây tính t n a đêm ngày đêm ngày 01/01/1970 (theo chu n gi qu c t UTC)
Tr ng h p ng i dùng yêu c u truy v n m t transit direction, thì ph i khai báo m t trong hai thông s tùy ch n là departure_time ho c arrival_time
K t qu tr v t t p tin JSON g m 2 thành ph n:
Status: cho bi t tình tr ng k t qu sau khi th c thi yêu c u
Routes: danh sách các l trình đi t đi m xu t phát đ n đi m k t thúc
M i “route” đ i di n cho m t l trình tìm th y bao g m 2 thành ph n chính:
Legs [] là danh sách các leg, mỗi leg đại diện cho một đoạn đường trong lộ trình Trong trường hợp yêu cầu truy vấn là hướng transit, Legs [] sẽ chứa phần leg đại diện cho đoạn đường từ điểm bắt đầu đến điểm kết thúc của hành trình.
Overview_polyline: ch a thành ph n points (đ i di n cho m t dãy các t a đ đã đ c mã hóa c a l trình đi t đi m b t đ u đ n đi m k t thúc)
M i “leg” bao g m các thành ph n sau:
Steps []: ch a danh sách các step (m i step đ i di n cho t ng đo n đ ng trong con đ ng leg)
Khoảng cách là một yếu tố quan trọng trong việc xác định độ dài của leg Khoảng cách được chia thành hai thành phần chính: giá trị (được tính bằng mét) và văn bản (mô tả khoảng cách kèm theo đơn vị mà người dùng có thể hiểu được).
Duration: th i gian đi cho m i leg Duration g m 2 thành ph n: giá tr c a th i gian tính theo giây) và text (th i gian kèm theo đ n v mà ng i dùng có th hi u đ c)
Departure_time: th i gian kh i hành c a leg (ch có trong yêu c u transit direction)
Arrival_time: th i gian k t thúc c a leg (ch có trong yêu c u transit direction)
Start_address: đ a ch đi m b t đ u c a leg
End_address: đa ch đi m k t thúc c a leg
Start_location: đa ch đi m b t đ u c a leg theo t a đ (lat/lng)
End_location: đ a ch đi m k t thúc c a leg theo t a đ (lat.lng)
M i “step” ch a các thành ph n chính sau:
Html_instructions: ch d n đ ng đi cho step
Start_location: đa ch đi m b t đ u c a leg theo t a đ (lat/lng)
End_location: đ a ch đi m k t thúc c a leg theo t a đ (lat.lng)
Distance: kho ng cách c a m i step (g m 2 thành ph n: value và text)
Duration: th i gian đi cho m i step (g m 2 thành ph n: value và text)
Chế độ di chuyển (travel_mode) được xác định cho hình thức vận tải, với hai giá trị chính là "WALKING" và "TRANSIT" Nếu travel_mode là "WALKING", mỗi bước sẽ bao gồm một danh sách các bước phụ Ngược lại, nếu travel_mode là "TRANSIT", mỗi bước sẽ chứa thông tin chi tiết về chuyến đi, bao gồm các thành phần như: Departure_stop và Arrival_stop để xác định vị trí điểm xuất phát và kết thúc, với thông tin về tên và tọa độ (vĩ độ, kinh độ) của trạm dừng Thời gian khởi hành và kết thúc được thể hiện qua Arrival_time và Departure_time, bao gồm giá trị và mô tả thời gian Cuối cùng, thông tin về tuyến xe sẽ được cung cấp trong thành phần Line, với tên tuyến xe cần đi.
Google Geocoding API Service
Geocoding là quá trình chuy n đ i đa ch v t a đ đ a lý (v đ , kinh đ )
Dùng cho tài kho n mi n phí là 2500 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M t yêu c u Geocoding API có d ng nh sau: http://maps.googleapis.com/maps/api/geocode/output?parameters
Và, đ s d ng trên HTTPS là: https://maps.googleapis.com/maps/api/geocode/output?parameters
Trong đó: output có th là JSON ho c XML
Ng i s d ng có th truy n nhi u tham s trong yêu c u, các tham s cách nhau b i kí t “&” Danh sách các tham s và giá tr đ c li t kê nh sau:
Các tham s b t bu c ph i có trong yêu c u:
Sensor: Cho bi t li u có hay không yêu c u tìm t a đ đ n t m t thi t b c m ng v trí Giá tr này ph i là true hay false
Language: ngôn ng k t qu tr v , đ c kí hi u b i hai kí t
Region: Các mã vùng, mi n qu c gia g m hai kí t
Components: Các b l c thành ph n, cách nhau b ng m t d u ( | ) M i b l c thành ph n g m m t component:value
T p tin JSON tr v g m 2 thành ph n là status và results Trong đó, thành ph n
Type []: danh sách các lo i đa ch
Formatted_address: tên đa ch đ c ch đnh đ tìm t a đ đa lý
Geometry: ch a thành ph n location (lat/lng) cho bi t thông tin v t a đ đa lý tìm đ c t đa ch
Google Reverse Geocoding API Service
Reverse Geocoding là API chuy n đ i t a đ đa lý (v đ , kinh đ ) v đa ch
Dùng cho tài kho n mi n phí là 2500 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M t yêu c u Reverse Geocoding có d ng nh sau: http://maps.googleapis.com/maps/api/geocode/output?parameters
Và, đ s d ng trên HTTPS là: https://maps.googleapis.com/maps/api/geocode/output?parameters
Trong đó: output có th là JSON ho c XML
Ng i s d ng có th truy n nhi u tham s trong yêu c u, các tham s cách nhau b i kí t “&” Danh sách các tham s và giá tr đ c li t kê nh sau:
Các tham s b t bu c ph i có trong yêu c u:
Sensor: Cho bi t li u có hay không yêu c u tìm đa ch đ n t m t thi t b c m ng v trí Giá tr này ph i là true hay false
Language: ngôn ng k t qu tr v , đ c kí hi u b i hai kí t
Result_type: Cho bi t lo i k t qu đa ch tr v , ch ng h n country, postal_code ho c street_address (m c đnh)
T p tin JSON tr v g m 2 thành ph n là status và results Trong đó, thành ph n
Type []: danh sách các lo i đa ch
Formatted_address: tên đa ch tìm đ c t t a đ đa lý
Geometry: ch a thành ph n location (lat/lng) cho bi t thông tin v t a đ đa lý c n tìm đa ch
Google Place Autocomplete API Service
Google Places Autocomplete là dịch vụ tìm kiếm gợi ý từ khóa, sử dụng Google Place API Để sử dụng dịch vụ này, bạn cần có một Place API key, và quá trình đăng ký cũng như nhận key hoàn toàn miễn phí từ Google.
Hình 2.10: Minh h a ch c n ng autocomplete
Các b c đ ti n hành đ ng ký và nh n key nh sau:
Truy cập trang https://code.google.com/apis/console và đăng nhập bằng tài khoản Gmail Sau khi truy cập thành công, người dùng có thể tạo một dự án API Project mới hoặc sử dụng dự án hiện có theo nhu cầu Để kích hoạt API, hãy vào menu bên trái, chọn Services, sau đó chọn Status, bật Place API và truy cập API.
Key c a ng i dùng s đ c li t kê ph n Simple API access
Dùng cho tài kho n mi n phí là 1000 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M t yêu c u Google Place API có d ng nh sau: https://maps.googleapis.com/maps/api/place/autocomplete/output?parameters Trong đó: output có th là XML ho c JSON
Google Place API đòi h i giao th c ph i là HTTPS (không ch p nh n HTTP)
Các tham s b t bu c ph i có trong yêu c u:
Sensor: Cho bi t li u có hay không yêu c u tìm đa ch đ n t m t thi t b c m ng v trí Giá tr này ph i là true hay false
Key: Google Place API key
Radius: ch đ nh bán kính tìm ki m
Language: Ngôn ng c a k t qu tr v
Types: lo i k t qu tr v (geocode: k t qu tr v là m t đ a ch (string) ng v i t khóa tìm ki m có th hi u đ c, ho c establishment: đ a ch kinh doanh)
Trong JSON trả về, có hai thành phần chính là "status" và "predictions" Thành phần "predictions" bao gồm một danh sách tối đa 5 địa chỉ gợi ý, phù hợp với từ khóa tìm kiếm.
Description: ch a đa ch liên quan đ n đ n t khóa tìm ki m
Reference: tham chi u đ có nhi u thông tin h n v đa ch tìm th y.
Google Place API Nearby Search Service
Google Place API Nearby Search cho phép ng i dùng tìm ki m các đa đi m trong ph m vi khu v c ch đ nh, thu c b Google Place API
Dùng cho tài kho n mi n phí là 1000 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M t yêu c u Google Place API có d ng nh sau: https://maps.googleapis.com/maps/api/nearbysearch/output?parameters
Trong đó: output có th là XML ho c JSON
Google Place API đòi h i giao th c ph i là HTTPS (không ch p nh n HTTP)
Các tham s b t bu c ph i có trong yêu c u:
Location: v trí (v đ , kinh đ ) đ t đó tìm ki m
Radius: bán kính tìm ki m (mét) t v trí location, bán kính t i đa tìm ki m là
Key: Google Place API key
Language: ngôn ng c a k t qu tr v
Types: lo i đa đi m tìm ki m (ch ng h n: airport, bus_station, cafe, …)
Name: ch đnh k t qu tìm ki m ch a thông tin có liên quan đ n giá tr c a tham s “name”
Kết quả trả về từ JSON trong Google Place Nearby Search bao gồm hai thành phần chính: status và results Trong đó, thành phần "results" chứa danh sách các kết quả tìm được Tuy nhiên, số lượng kết quả tối đa cho mỗi lần truy vấn chỉ là 20, điều này khiến dịch vụ này không đáp ứng được nhu cầu của người dùng.
Google Place API Radar Search Service
Google Place API Radar Search cho phép ng i dùng tìm ki m các đ a đi m trong ph m vi khu v c ch đnh, thu c b Google Place API v i k t qu t i đa lên đ n 200 cho m i l n truy v n
Tham s và k t qu tr v c a Service này gi ng v i Google Place API Nearby Search Service
Dùng cho tài kho n mi n phí là 1000 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M i l n truy v n đ n Google Place API Radar Search đ c tính là 5 yêu c u
M t yêu c u Google Place API Radar Search Service có d ng nh sau: https://maps.googleapis.com/maps/api/radarsearch/output?parameters
Trong đó: output có th là XML ho c JSON
Google Place API đòi h i giao th c ph i là HTTPS (không ch p nh n HTTP)
Các tham s b t bu c ph i có trong yêu c u:
Location: v trí (v đ , kinh đ ) đ t đó tìm ki m
Radius: bán kính tìm ki m (mét) t v trí location, bán kính t i đa tìm ki m là
Key: Google Place API key
Language: ngôn ng c a k t qu tr v
Types: lo i đa đi m tìm ki m (ch ng h n: airport, bus_station, cafe, …)
Name: ch đnh k t qu tìm ki m ch a thông tin có liên quan đ n giá tr c a tham s “name”
T p tin JSON tr v g m 2 thành ph n chính là status và results Trong đó, thành ph n “results” bao g m m t danh sách các k t qu tìm đ c v i các thành ph n chính sau:
Geometry: ch a thành ph n location cho bi t v trí đa lý c a t ng k t qu
Reference: thành ph n tham chi u đ bi t nhi u thông tin h n v k t qu tìm th y.
Google Place Details API Service
Google Place Details API Service cho phép ng i dùng truy v n thông tin c a thành ph n reference tr v t Google Place Search Service
Dùng cho tài kho n mi n phí là 1000 yêu c u m i ngày
Dùng cho tài kho n có tr phí là 100000 yêu c u m i ngày
M t yêu c u Google Place Details API Service có d ng nh sau: https://maps.googleapis.com/maps/api/place/details/output?parameters
Trong đó: output có th là XML ho c JSON
Google Place API đòi h i giao th c ph i là HTTPS (không ch p nh n HTTP)
Các tham s b t bu c ph i có trong yêu c u:
Reference: thành ph n reference c a k t qu truy v n t Google Place Search
Các tham s tùy ch n chính:
Language: ngôn ng c a k t qu tr v
Trong JSON, hai thành phần chính là "status" và "results" Thành phần "results" chứa tất cả thông tin liên quan đến đa chỉ mục tham chiếu, trong đó có thành phần quan trọng "name" để xác định tên của đa chỉ mục tham chiếu.
Áp d ng công th c hình c u c a cosines (Spherical Law of Cosines)
Gi i thi u
Các công th c hình c u c a cosines có r t nhi u ng d ng trong th c t , trong đó có vi c xác đnh m t đi m d i d ng v đ , kinh đ t m t đi m v i kho ng cách d trên b m t trái đ t
Để xác định tọa độ điểm B (lat2, lng2) dựa trên tọa độ điểm A (lat1, lng1) và khoảng cách d giữa hai điểm, ta sử dụng công thức: lat2 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + ) Trong đó, R là bán kính trái đất Công thức này cho phép tính toán vị trí điểm B trên bề mặt trái đất một cách chính xác.
Math cos (lat1 )* Math sin (d / R)* Math cos ( brng) ); lng2 = lng1 + Math atan2 (Math sin (brng)* Math sin (d / R)* Math cos (lat1), Math cos (d / R) - Math sin (lat1)* Math sin (lat2));
R là bán kính trái đ t (x p x 6371 km)
brng là s đo góc c a đi m B so v i ph ng B c c a đi m A
n v s d ng trong công th c là radian
Hiện nay, JavaScript sử dụng chuẩn IEEE 754 64-bit, cho phép cung cấp 15 chữ số chính xác, giúp các công thức tính khoảng cách của cosines đạt độ chính xác cao (có thể tính toán khoảng cách giữa hai điểm cách nhau 1 mét) Điều này lý giải vì sao các công thức tính khoảng cách của cosines được áp dụng thay cho công thức Haversine trong việc tính toán khoảng cách giữa hai điểm trên bề mặt trái đất.
V n d ng
Hiện nay, nhiều người dùng đang sử dụng bản đồ hình tròn để thể hiện thông tin tìm kiếm, giúp người dùng có cái nhìn trực quan và sinh động hơn về các kết quả tìm kiếm.
Trong Windows Phone, Bing Maps Silverlight Control không hỗ trợ việc vẽ hình tròn từ một điểm trung tâm với bán kính xác định Thay vào đó, Windows Phone chỉ cung cấp MapPolygon để vẽ các hình đa giác, điều này có nghĩa là để tạo một hình tròn, lập trình viên phải cung cấp ít nhất 360 điểm trên đường tròn Sau đó, Windows Phone sẽ kết nối 360 điểm này lại với nhau để tạo thành hình tròn.
Như vậy, phương thức để mô tả một hình tròn từ một điểm với bán kính xác định, Windows Phone đã mở ra cơ hội cho các lập trình viên Xuất phát từ thực tế đó, yêu cầu cần thiết là phải xây dựng một phương thức đáp ứng yêu cầu trên, trong đó việc sử dụng các công thức hình học của cosines được xem là “chìa khóa” để giải quyết vấn đề này.
Để xác định 360 điểm trên đường tròn, cần biết khoảng cách từ tâm hình tròn là d và góc đo (brng) của điểm đó so với phương Bắc của tâm hình tròn Góc này sẽ dao động từ 0° đến 360° Điều này phù hợp với công thức xác định một điểm trên đường tròn bằng cách sử dụng khoảng cách d và góc brng thông qua hàm cosines, cụ thể là hàm GetDestinationFromCenterPoint Khi tìm ra 360 điểm trên đường tròn, ta sẽ lặp lại 360 lần, mỗi lần cung cấp thông số gồm tọa độ tâm hình tròn (theo đơn vị radian), bán kính hình tròn (mét) và góc brng (radian) để tính toán vị trí (vĩ độ, kinh độ) của điểm cần tìm.
Hình 2.11: 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
K t thúc vòng l p, ta có đ c 360 đi m c n xác đnh Ti p theo, ta s d ng đ i t ng MapPolygon n i các đi m này l i đ t o ra m t hình tròn
L c đ trên là c s đ xây d ng ph ng th c v hình tròn t m t đi m v i bán kính ch đnh trên b n đ nh m th hi n ph m vi tìm ki m
GetDestinationFromCenterPoint (latA, lngA, d, brng) latB = Math.Asin (Math.Sin(latA)*
Math.Cos(d) + Math.Cos (latA) * Math.Sin(d)
* Math.Cos(brng)); lngB = lngA + Math.Atan2 (Math.Sin(brng) *
Math.Sin(d) * Math.Cos (latA) , Math.Cos(d) – Math.Sin(latA) * Math.Sin(latA))
- Add t a đ (latB, lngB) vào MapPolygon
Ghi chú: latA, lngA là t a đ c a tâm hình tròn; latB, lngB là t a đ c a đi m c n tìm; brng là s đo góc; R là bán kính c a Trái t, d là t l c a bán kính hình tròn / R (mét)
Xây d ng ph ng th c gi i mã t a đ
Tính c p bách c a v n đ
M t trong nh ng thành ph n quan tr ng t k t qu tr v c a Google Direction API Web Service (d ch v tìm ki m đ ng đi c a Google) đó thành ph n points trong polylines
Thành phần điểm trong polylines bao gồm danh sách tất cả các tọa độ (vĩ độ, kinh độ) từ điểm bắt đầu đến điểm kết thúc, là yếu tố quan trọng trong lập trình di chuyển trên bản đồ Tuy nhiên, Google đã mã hóa thành phần này và không cung cấp phương thức giải mã Do đó, để sử dụng, lập trình viên phải thực hiện giải mã.
Trong môi trường NET, đặc biệt là khi phát triển ứng dụng trên Windows Phone, lập trình viên cần tạo danh sách các điểm bắt đầu và kết thúc để di chuyển giữa hai địa điểm Thành phần points đóng vai trò quan trọng trong việc xác định đường đi Tuy nhiên, hệ thống không hỗ trợ việc lập trình bất kỳ phương thức nào để giải mã thành phần points trong polyline của Google Direction API Do đó, yêu cầu cấp bách là cần xây dựng một phương thức giải mã thành phần này dựa trên danh sách các tọa độ trả về.
C s c a vi c xây d ng ph ng th c gi i mã
Vi c xây d ng ph ng th c gi i mã đ c xây d ng trên hai c s sau:
M t là, qui lu t mã hóa thành ph n points c a Google Direction API Service
Hai là, các phép toán trên bit
2.8.2.1 Quy lu t mã hóa points c a Google Direction API
Thành phần points trong danh sách tọa độ bao gồm vị trí bắt đầu và kết thúc, có thể lên đến hàng triệu tọa độ khác nhau Việc mã hóa thành phần points là rất cần thiết để quản lý và sử dụng hiệu quả các tọa độ này.
Khi thành ph n points đ c mã hóa s mang đ n r t các l i ích sau:
Làm gi m dung l ng truy n file
Th i gian truy n t i file nhanh h n, b o m t h n
ng th i,vi c mã hóa file ph i đ m b o tính đúng đ n, không thi u, không th a d li u
Thành phần điểm được mã hóa dựa trên giải thuật base64, kèm theo một số tùy chỉnh Mỗi giá trị trước khi chuyển đổi thành ký tự trong bảng mã ASCII sẽ được cộng thêm 63, tương ứng với ký tự ‘?’ trong bảng ASCII.
Giải thích về Base64 là một phương thức được sử dụng phổ biến trong việc chuyển đổi các dữ liệu nhị phân sang dạng plain text để truyền qua giao thức mail Chuẩn Base64 bao gồm một tập hợp các ký tự theo đúng trình tự: từ A đến Z, từ a đến z, từ 0 đến 9, cùng với hai ký tự đặc biệt là dấu cộng (+) và dấu gạch chéo (/).
Hình 2.12: L c đ 11 b c mã hóa thành ph n points
T ng c ng có 64 ký t bi u di n cho 64 giá tr t 0 đ n 63 Nh v y, ký t t A đ n Z bi u di n cho các giá tr t 0 đ n 25, t a đ n z bi u di n cho giá tr t 26 đ n 51, t 0 đ n
Mã hóa giá trị trong hệ thống Google sử dụng quy trình gồm 11 bước, với các biểu diễn giá trị từ 52 đến 61, 62 và 63 Mỗi ký tự được mã hóa theo tiêu chuẩn ASCII sử dụng 8 bit, trong khi ký tự theo chuẩn base64 chỉ sử dụng 6 bit.
L n l t nhóm các kh i 5 bít t ph i sang trái
Chuy n đ i giá tr (h th p phân sang h nh phân)
Giá tr là s âm: thì đ o bít
Nhân giá tr cho 10 5 , làm tròn k t qu
Giá tr d ng: chuy n đ i bình th ng t th p phân sang nh phân
D ch chuy n sang trái 1 bit
Giá tr âm: chuy n đ i t th p phân sang nh phân theo ph ng pháp bù 2 t các kh i 5 bit theo th t ng c
Ho c (OR) t ng kh i bit v i 0x20
Chuy n t nh phân sang th p phân
C ng thêm 63 cho m i giá tr Chuy n giá tr sang kí t ASCII
2.8.2.2 Các phép toán trên bit
Các phép toán trên bit (bitwise operation) là các phép toán thực hiện tính toán theo từng bit trên một hoặc hai chuỗi bit, hoặc trên các số nhị phân Đối với nhiều loại máy tính, việc thực hiện các phép toán trên bit thường nhanh hơn so với các phép toán cộng, trừ, nhân, chia.
Phép toán AND trên bit có đ c đi m sau: o Khác v i phép toán AND logic (&&) o Kí hi u: &
Phép toán này liên quan đến hai toán hạng có kiểu dữ liệu giống nhau Các toán hạng được chuyển đổi từ số nguyên (thập phân) sang nhị phân, sau đó thực hiện thao tác và tổng bit với nhau.
Phép toán AND trên bit được sử dụng để xác định giá trị của bit cuối cùng bên phải trong chuỗi bit Để thực hiện phép toán này, ta lấy chuỗi bit và thực hiện AND với 1 Ví dụ, nếu chuỗi bit là 10101 và chúng ta không biết bit cuối cùng là 1 hay 0, ta tiến hành AND với 1 Nếu kết quả là 1, thì bit cuối cùng là 1; nếu kết quả là 0, thì bit cuối cùng là 0.
Toán tử thao tác trên bit OR là một toán tử hai ngôi, thực hiện phép toán trên từng bit của hai chuỗi bit có cùng độ dài Kết quả trả về là một chuỗi bit mới cũng có cùng độ dài với hai chuỗi bit ban đầu Trên mỗi cặp bit tương ứng của hai toán hạng, toán tử OR sẽ trả về 1 nếu ít nhất một trong hai bit là 1; trong tất cả các trường hợp còn lại, kết quả sẽ là 0.
Kí hi u: | (trong C, C++, Java, C#) ho c or (trong Pascal)
Phép toán OR thường được áp dụng để bật bit trong một chuỗi bit Chẳng hạn, với chuỗi bit 0101, nếu muốn bật bit đầu tiên bên trái, ta thực hiện phép toán tương ứng.
= 1 101 (bit cu i cùng bên trái đ ã đ c b t thành 1)
Kí hi u: ~ (trong C, C++, Java, C#) ho c not (trong Pascal)
Toán t thao tác bit NOT còn đ c g i là toán t l y ph n bù (complement) là m t toán t m t ngôi có nhi m v ph đ nh lu n lí t ng bit c a toán h ng c a nó - t c đ o
0 thành 1 và ng c l i Ví d , th c hi n phép toán NOT v i s nh phân 0111:
Khi thực hiện phép dịch trái trên chuỗi bit, số bit 0 sẽ được thêm vào bên phải tương ứng với số bit đã dịch Ví dụ, nếu chuỗi bit 1010 được dịch trái với số bit dịch là 2, thì kết quả sẽ là 101000.
Kí hi u: >> Ý ngh a: d ch ph i bao nhiêu bit thì bên trái c a chu i bit đó s đ c b b y nhiêu bit
Ví d , th c hi n phép d ch ph i chu i bit 1010 v i s bit d ch chuy n là 2:
Ph ng th c gi i mã t a đ
Xây d ng ph ng th c gi i mã t a đ là quá trình chuy n đ i 11 b c mã hóa c a Google theo th t ng c (t d i lên)
T vi c nghiên c u 11 b c mã hóa c a Google và các phép tính thao tác trên bit, em th y r ng:
Trong quy trình mã hóa thập phân, bước 4 và 5 liên quan đến việc thêm một bit vào bên phải chuỗi bit để biểu thị giá trị âm Bit này hoạt động như một tín hiệu cho biết giá trị là âm hay dương.
Khi thực hiện phép toán OR giữa 5 bit và giá trị 0x20 (32 trong hệ thập phân, tương đương 0010 0000 trong hệ nhị phân), ta thêm một bit 1 vào bên trái chuỗi bit, tạo thành một chuỗi 6 bit mới Để quay về giá trị ban đầu, cần phải loại bỏ bit đầu tiên bên trái của chuỗi bit mới, điều này có thể thực hiện bằng cách AND chuỗi bit đó với giá trị 31 (011111 trong hệ nhị phân).
Trên c s đó, em đã xây d ng 11 b c gi i mã t ng đ ng nh sau:
Chiu mã hóa Chiu gii mã
L y giá tr nhân 10 5 , làm tròn k t qu
Chuy n đ i giá tr (h th p phân sang h nh phân).
Giá tr d ng: chuy n đ i bình th ng t th p phân sang nh phân
Giá tr âm: chuy n đ i t th p phân sang nh phân theo ph ng pháp bù 2
D ch chuy n sang trái 1 bit
Giá tr là s âm: thì đ o bít
L n l t nhóm các kh i 5 bít t ph i sang trái t các kh i 5 bit theo th t ng c
Ho c (OR) t ng kh i bit v i 0x20
Chuy n t nh phân sang th p phân
C ng thêm 63 cho m i giá tr Chuy n giá tr sang kí t ASCII
9 c giá tr đ ã mã hóa Chia giá tr cho 10 5 , làm tròn k t qu
Chuy n đ i t nh phân sang th p phân
D ch chuy n sang ph i 1 bit Chu i bít đ i di n s âm: đ o bit
L n l t nhóm các kh i 8 bít t ph i sang trái t các kh i 5 bit theo th t ng c AND t ng kh i 6 bit v i giá tr 31
Chuy n t th p phân sang nh phân
Chuy n kí t ASCII sang th p phân
Trong dịch vụ Google Direction API, các điểm trong polyline không chỉ chứa tọa độ mà còn bao gồm các ký tự điều kiện (ASCII từ 32 trở lên) Những ký tự này hoạt động như các cờ (flag) để đánh dấu sự kết thúc của một lần mã hóa tọa độ hoặc để chỉ ra bắt đầu mã hóa cho tọa độ tiếp theo Quá trình mã hóa bắt đầu từ tọa độ đầu tiên, sau đó Google sẽ mã hóa phần offset (hiệu số giữa tọa độ tiếp theo và tọa độ trước đó) thay vì mã hóa trực tiếp tọa độ Do đó, sau khi giải mã tọa độ đầu tiên, tọa độ tiếp theo sẽ được tính toán dựa trên giá trị đã mã hóa.
V đ (ho c kinh đ ) th n = v đ (ho c kinh đ ) th (n-1) + offset
L c đ xây d ng ph ng th c mã hóa thành ph n points trong polyline:
Hình 2.7: L c đ xây d ng ph ng th c gi i mã t a đ
Sai sum = 0 shifter = 0 next5bits = (int) point[index] - 63 sum |= (next5bits & 31) = 32
&& index < point.Length index> = point.Length sum& 1
= =1 vido += (~sum >> 1) /10 5 vido += (sum >> 1)/10 5 sum = 0 shifter = 0 next5bits = (int) point[index] - 63 sum |= (next5bits & 31) = 32
&& index < point.Length index> = point.Length sum& 1
Chuy n chu i mã hóa sang m ng kí t (point). index< point.Length kinhdo += (sum >> 1)/10 5
K t thúc úng úng Sai úng
- Gi i thích ý ngh a l c đ xây d ng ph ng th c gi i mã t a đ :
point: m ng các ph n t ki u char, m i ph n t c a point là kí t c n gi i mã
index: là bi n dùng đ duy t qua các ph n t c a m ng
shifter: s l ng các bit d ch chuy n
next5bits: giá tr th p phân c a kí t đã đ c mã hóa – 63 (hi n th c b c th 2 c a quy trình gi i mã)
sum: đ i di n cho chu i bit c a giá tr (v đ ho c kinh đ ) c n gi i mã
next5bits & 31: hi n th c b c th 4 c a quy trình gi i mã
sum |= (next5bits & 31) > 1: d ch chu i bit qua ph i m t bit tr c khi chuy n sang h th p phân (hi n th c b c 8 trong quy trình gi i mã)
~sum >> 1: đ o chu i bit và d ch chuy n qua ph i m t bit tr c khi chuy n sang h th p phân (đ i v i các chu i bit đ i đi n cho s âm)
vido (ho c kinhdo) += (sum >> 1)/10 5 (ho c vido (ho c kinhdo += (~sum >> 1)/10 5 ) đ i di n cho v đ và kinh đ c a m t t a đ sau khi đã đ c mã hóa (v đ (ho c kinh đ ) th n = v đ (ho c kinh đ ) th (n-1) + offset)
L c đ th hi n vòng l p qua t t c các ph n t c a m ng kí t point cho đ n khi xác đnh đ c v đ c a m t đi m, sau đó ti p t c l p đ xác đnh kinh đ Và c th , ti p t c cho đ n khi cu i vòng l p
Quá trình lập ký tự kết thúc khi gặp ký tự điều kiện (có mã ASCII < 32), báo hiệu kết thúc quá trình mã hóa một giá trị (và kết thúc) Ngoài ra, nếu index >= point.Length, không còn phần tử nào để mã hóa, quá trình giải mã cũng sẽ kết thúc.
L c đ trên chính là c s đ d ng ph ng th c gi i mã t a đ vi t b ng ngôn ng C# v i đ u vào là m t chu i ký t đã đ c mã hóa và đ u ra là danh sách các t a đ đã đ c gi i mã
Hình 3.1: S đ ch c n ng c a ng d ng
CH NG 3: XÂY D NG NG D NG
Gi i thi u ng d ng
BusInfo là một ứng dụng di động được phát triển trên nền tảng Windows Phone 8, sử dụng các API của Google Maps để cung cấp thông tin về các tuyến xe buýt, trạm dừng và lộ trình trong khu vực thành phố Hồ Chí Minh Ứng dụng này không chỉ giúp người dùng tìm kiếm thông tin về xe buýt mà còn cho phép đánh giá cá nhân, tìm kiếm trạm dừng và lộ trình trên toàn quốc BusInfo là công cụ hữu ích cho những ai có nhu cầu di chuyển bằng xe buýt, đặc biệt là khách du lịch, học sinh, sinh viên và người lao động mới đến thành phố.
Xét về mặt giao diện, ứng dụng BusInfo được xây dựng bằng Pivot Control, bao gồm nhiều trang, mỗi trang là một Pivot Item Người sử dụng có thể dễ dàng chuyển đổi qua lại giữa các trang, từ đó có thể nhìn thấy một phần tiêu đề của trang tiếp theo, giúp người dùng thân thiện hơn với ứng dụng Ứng dụng BusInfo bao gồm các trang sau:
Trang ch : cho phép ng i dùng chuy n sang trang tuy n xe đ ng th i còn cho phép ng i dùng ch n l t đi ho c l t v cho t ng tuy n
Trang tuy n xe: cho phép ng i dùng ch n tuy n xe c n tra c u thông tin
Trang bản đồ Google Maps hiển thị bản đồ kèm lộ trình di chuyển của tuyến xe đã chọn Người dùng còn có thể sử dụng các chức năng như phóng to, thu nhỏ, hiển thị chế độ giao thông và vệ tinh Ngoài ra, trang còn hỗ trợ tìm địa điểm, tìm trạm, hiển thị trạm dừng và định vị cá nhân.
Trang b n đ Trang tr m d ng Trang tìm tr m Trang k t qu
Tìm tr m d ng t m t v trí ho c ch n m t tr m d ng
Tr m d ng nh v cá nhân Phóng to, thu nh …
Trang ch Trang tuy n xe
Trang thông tin: trang ch a thông tin v tuy n xe đã ch n
Trang tr m d ng: hi n th t t c tr m d ng c a tuy n xe đã ch n
Trang tìm tr m: cho phép tìm ki m tr m d ng theo hai cách (tìm ki m thông qua mã tr m ho c tìm ki m t m t v trí v i bán kính ch đnh)
Trang k t qu : ch a thông tin v k t qu c a ch c n ng tìm tr m ho c tìm đ ng.
Trang download: cho phép download b n đ đ s d ng offline.
T ch c c s d li u
D li u c c b (Local Database)
Để nâng cao trải nghiệm người dùng, việc xây dựng cơ sở dữ liệu địa phương là điều cần thiết Cơ sở dữ liệu này cho phép truy xuất thông tin về các tuyến xe và trạm dừng một cách nhanh chóng và hiệu quả, đáp ứng kịp thời nhu cầu của người dùng Với dữ liệu ổn định và ít thay đổi, người dùng có thể dễ dàng tiếp cận thông tin cần thiết mỗi khi cần.
Hình 3.2: S đ liên k t c s d li u c a ng d ng
B ng TUYENXE cung cấp thông tin quản lý tuyến xe, trong đó mỗi tuyến xe được gán một ID duy nhất để phân biệt với các tuyến khác Các thuộc tính của từng tuyến xe được mô tả chi tiết trong bảng sau.
STT Thu c tính Miêu t Ki u d li u Tham chi u
1 MATUYEN (PK) Mã tuy n xe int
2 TENTUYEN Tên tuy n xe nvarchar(100)
3 LUOTDI L t đi (thông tin l t đi c a t ng tuy n xe) nvarchar(1000)
4 LUOTVE L t v (thông tin l t v c a t ng tuy n xe) nvarchar(1000)
5 CULY C ly (quãng đ ng đi c a t ng tuy n xe) varchar(20)
6 LOAIHINH Lo i hình (có tr giá hay không tr giá) nvarchar(100)
7 SOCHUYEN S chuy n đi trong ngày int
8 GIANCACH Giãn cách (kho ng th i gian ho t đ ng gi a hai tuy n xe) nvarchar(20)
9 TGKHOIHANHLDI Th i gian kh i hành l t đi varchar(10)
10 TGKETTHUCLDI Th i gian k t thúc l t đi varchar(10)
11 TGKHOIHANHLVE Th i gian kh i hành l t v varchar(10)
12 TGKETTHUCLVE Th i gian k t thúc l t v varchar(10)
14 TOADOXPHATLDI T a đ xu t phát l t đi nvarchar(60)
18 GIAVE_NGAND Giá vé (đ n v ngàn đ ng) tinyint
19 TOADOMAHOALDI T a đ mã hóa l t đi nvarchar(500)
B ng TRAMDUNG: l u thông tin qu n lý t t c tr m d ng, m i tr m d ng có m t id duy nh t đ phân bi t v i tr m d ng khác Thông tin qu n lý tr m d ng đ c đ c t trong b ng sau:
STT Thu c tính Miêu t Ki u d li u Tham chi u
1 MATRAM (PK) Mã tr m d ng varchar(10)
2 TENTRAM Tên tr m d ng varchar(100)
3 TOADO T a đ trên b n đ c a tr m d ng varchar(50)
B ng LUOT: l u thông tin l t đi, l t v c a t ng tuy n xe
STT Thu c tính Miêu t Ki u d li u Tham chi u
2 TENLUOT Tên l t (l t đi ho c l t v c a tuy n xe) varchar(10)
Bảng LOTRINH cung cấp thông tin quản lý lộ trình di chuyển của các tuyến xe, cho biết chi tiết về từng tuyến xe, lộ trình đi hoặc lộ trình về, cùng với các trạm dừng mà tuyến xe đi qua Mỗi trạm dừng trong bảng đều được xác định rõ ràng, bao gồm cả trạm cuối trong danh sách các trạm dừng mà tuyến xe phục vụ Thông tin quản lý lộ trình được trình bày trong bảng dưới đây.
STT Thu c tính Miêu t Ki u d li u Tham chi u
1 MATUYEN (PK, FK) Mã tuy n xe int TUYENXE
2 MATRAM (PK, FK) Mã tr m d ng varchar(10) TRAMDUNG
3 MALUOT (PK, FK) Mã l t varchar(1) LUOT
Tr m th (cho bi t tr m d ng th m y trong danh sách tr m d ng) tinyint
D li u t Google Maps API Web Services
ng d ng BusInfo đóng vai trò nh m t client truy xu t c s d li u c a Google thông qua các c ng Web services theo c ch sau:
The BusInfo application utilizes a client-server model to access various services, including the Google Direction API Service for route navigation, Google Place Radar Search Service for locating nearby places, Google Geocode Service for retrieving address details, Google Reverse Geocode Service for obtaining geographic coordinates from addresses, Google Place Details Service for finding specific place names based on Google Place Radar Search results, and Google Place Autocomplete Service for suggesting search terms.
Hi n th c ng d ng
Giao di n trang ch
T i giao di n trang ch , ng d ng cho phép ng i dùng chuy n sang trang tuy n xe đ ch n mã tuy n và ch n l t (đi hay v ) cho tuy n xe đã ch n
Hình 3.4: Giao di n trang ch tr c và sau khi ch n tuy n xe
Hình 3.5: Giao di n trang tuy n xe
Hi n th danh sách tuy n xe lên trang tuy n xe
Trong danh sách tất cả tùy chọn xe, chúng ta sẽ sử dụng điều khiển ListBox để hiển thị dữ liệu từ bảng tùy chọn xe trong cơ sở dữ liệu Tuy nhiên, ListBox mặc định chỉ hiển thị giá trị của một thuộc tính (DisplayMemberPath) Vì vậy, để khắc phục vấn đề này, tôi đã tìm hiểu và sử dụng "sức mạnh" của XAML trong việc khai báo ListBox và ListBoxItems.
Trong bài viết này, chúng tôi trình bày cách sử dụng hai TextBlock bên trong ListBox để hiển thị thông tin về các tuyến xe TextBlock đầu tiên hiển thị mã tuyến xe, trong khi TextBlock thứ hai hiển thị tên tuyến xe Điều này giúp người sử dụng dễ dàng lựa chọn tuyến xe phù hợp.
Giá tr tr v khi truy xu t m t ph n t c a ListBox là mã tuy n xe đã ch n ng th i, h th ng s l u thông tin mã tuy n xe đã ch n vào bi n ShareInfo.matuyen, b t c
ShareInfo.chontuyen = true đ báo hi u ng i dùng đã ch n m t tuy n xe, sau đó quay v trang ch
C ch s d ng tính n ng nh sau:
Hình 3.6: S đ phân tích ch c n ng trang tuy n xe
Trang ch Trang tuy n xe
Trang ch (hi n th mã tuy n đ ã ch n) ShareInfo: chontuyen=true, l u matuyen
Hi n th thông tin c a tuy n xe lên trang thông tin
C ch s d ng c a ch c n ng này nh sau:
Hình 3.7: S đ phân tích ch c n ng hi n th thông tin tuy n xe
Giao di n trang thông tin tr c và sau khi ch n tuy n xe nh sau:
Hình 3.8: Giao di n trang thông tin tr c và sau khi ch n tuy n xe
Trang tuy n xe ã ch n tuy n
ShareInfo: chontuyen=true, l u matuyen Ch a thông tin v tuy n xe
Hi n th danh sách tr m d ng theo t ng tuy n
Ch c n ng này đ c th c hi n t i hai trang:
Tính năng “Trạm dừng” trên bản đồ cho phép người dùng tạo các điểm dừng (pushpin) để xác định vị trí trên bản đồ Mỗi pushpin cung cấp thông tin chi tiết về mã trạm, địa chỉ và danh sách các tuyến xe đi qua trạm dừng đó.
Trang kết quả hiển thị danh sách tất cả các trạm đo đạc, bao gồm thông tin về mã trạm, tên trạm và thứ hạng của trạm trong danh sách các trạm đo đạc.
C ch s d ng ch c n ng này nh sau:
Hình 3.9: S đ phân tích ch c n ng hi n th tr m d ng theo tuy n xe
Phương thức sử dụng ngôn ngữ LINQ để truy xuất dữ liệu nhằm lấy thông tin về trạm dừng liên quan đến tuyến xe và mã lộ đã chọn Thông tin về trạm dừng bao gồm mã trạm, tên trạm và trạm thứ (được biết đến trong danh sách trạm dừng) Kết quả của phép truy vấn này trả về biến chứa danh sách tất cả các trạm dừng tìm thấy Mục tiêu của phương thức là hiển thị thông tin trạm dừng trên trang trạm dừng thông qua điều khiển ListBox Để thực hiện điều này, ListBox cần được gán một nguồn dữ liệu có kiểu danh sách (thông qua thuộc tính ItemsSource).
DataContext là một phần quan trọng trong việc quản lý dữ liệu, trong khi anonymous type là một kiểu dữ liệu không xác định, được tạo ra từ danh sách các trường động Để làm việc với các trường này, cần xây dựng một lớp (class) để chứa thông tin của các trường tìm thấy Lớp này sẽ được sử dụng để gán nguồn dữ liệu cho ListBox Thông tin trong lớp sẽ bao gồm mã trường, tên trường, tài đ và trường thể.
Hình 3.10: Giao di n trang tr m d ng
Trang tuy n xe ã ch n tuy n
Danh sách các tr m d ng
ShareInfo: chontuyen=true, l u matuyen Tr m d ng
V pushpin lên b n đ MessageBox thông tin tr m d ng
Hình 3.11: Giao di n hi n th danh sách tr m d ng lên b n đ
Khi người dùng chọn nút "Trầm dương", nền của nút sẽ chuyển sang màu đen và các pushpin sẽ được hiển thị Khi người dùng chọn lại nút, nền sẽ chuyển sang màu xanh và các pushpin sẽ biến mất Quá trình này lặp đi lặp lại, tạo ra nhiều lần hiển thị các pushpin và nền khác nhau, làm tăng tính hấp dẫn cho người sử dụng.
Khi ng i dùng ch n m t tr m, ng d ng s hi n th m t messagebox cho bi t thông tin v tr m d ng mà ng i dùng đã ch n
Hi n th l trình xe buýt lên b n đ
C ch s d ng tính n ng này nh sau:
Hình 3.12 trình bày quá trình phân tích chức năng hiện tại của lộ trình xe buýt, cho thấy cách thức mà người dùng truy xuất thông tin từ các tuyến xe TOADOMAHOALDI hoặc TOADOMAHOALVE Giá trị của các tuyến này được lưu trữ trong cơ sở dữ liệu, bao gồm danh sách tất cả các điểm dừng bắt đầu và kết thúc của tuyến xe, và đã được mã hóa để đảm bảo tính chính xác.
Các giá trị này được thu thập bằng cách sử dụng dịch vụ Google Direction Service với các địa điểm là điểm đầu, điểm kết thúc của lộ trình và thời gian khởi hành của tuyến xe Kết quả trả về từ Google Direction Service là một tập tin JSON, sau đó được phân rã để truy xuất thành phần points trong polyline đưa vào cơ sở dữ liệu Nếu muốn sử dụng các giá trị này để lộ trình di chuyển của tuyến xe, ta sẽ sử dụng hàm DecodePolylinePoints đã được xây dựng trên cơ sở lý thuyết chồng 2 để mã hóa tọa độ, sau đó dùng hàm Draw để vẽ lộ trình di chuyển của tuyến xe lên bản đồ.
S đ phân tích ph ng th c v l trình c a tuy n xe lên b n đ nh sau:
Hình 3.13: S đ xây d ng hàm v l trình c a tuy n xe buýt lên b n đ
Trang tuy n xe ã ch n tuy n
V l trình tuy n xe lên b n đ Không có k t qu
Sau khi chọn tuyến xe, người dùng có thể tra cứu qua trang bản đồ để xem lộ trình di chuyển của tuyến xe đã chọn Hệ thống sẽ tập trung vào điểm bắt đầu của lộ trình, bên cạnh đó, người dùng có thể thực hiện các chức năng của bản đồ như phóng to, thu nhỏ để xem chi tiết hoặc bao quát toàn bộ lộ trình di chuyển của tuyến xe.
Hình 3.14: Giao di n hi n th l trình di chuy n c a tuy n xe lên b n đ
nh v cá nhân
Tính năng này cho phép người dùng tương tác với bảng điều khiển bằng cách nhập chữ "Tôi" Khi đó, một biểu tượng pushpin sẽ xuất hiện trên bảng, thể hiện vị trí của người dùng Nếu người dùng nhấp vào biểu tượng pushpin, một thông báo (MessageBox) sẽ hiện lên để thông báo địa chỉ của người dùng Nhờ vậy, chức năng cá nhân được kích hoạt mỗi khi có yêu cầu truy xuất từ phía người dùng.
Hình 3.15: Hi n th v trí ng i dùng lên b n đ
Ch c n ng tìm ki m tr m d ng
Tìm kiếm trạm dừng là một yếu tố quan trọng trong các ứng dụng tìm đường bằng xe buýt hiện nay Việc xác định vị trí trạm dừng có thể được thực hiện thông qua hai cách khác nhau.
Tìm kiếm trầm dừa theo mã trầm cho phép người dùng tìm kiếm chính xác loại trầm mà họ yêu cầu Tính năng này hỗ trợ chức năng autocomplete, hiển thị mã trầm gợi ý, giúp người dùng dễ dàng hơn trong việc sử dụng.
Tính năng tìm kiếm trạm di động theo vị trí và bán kính cho phép người dùng dễ dàng xác định vị trí trạm di động trong một phạm vi cụ thể Tính năng này rất hữu ích trong nhiều trường hợp, giúp người dùng nhanh chóng tìm kiếm trạm di động gần nhất với tâm điểm đã chỉ định.
3.3.7.1 Tìm ki m tr m d ng d a theo mã tr m
Chức năng này được sử dụng tại trang tìm kiếm, và có thể hoạt động ngay cả khi người dùng không có kết nối internet, do nguồn dữ liệu được lưu trữ trong Local Database Khi kích hoạt chức năng, nguồn dữ liệu về mã trạm được gán cho một AutoCompleteBox (nơi người dùng nhập mã trạm cần tìm) Khi người dùng nhập một từ khóa vào AutoCompleteBox, một popup sẽ hiển thị danh sách các mã trạm gợi ý mà người dùng có thể chọn Bên cạnh đó, các thông tin liên quan đến mã trạm cũng được hiển thị bên cạnh Chức năng “hiển thị lên bản đồ” sẽ cho phép hiển thị trạm cần tra cứu lên Google Maps.
S đ s d ng ch c n ng nh sau:
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 ng d ng đ c kích ho t
MessageBox thông tin tr m d ng
Popup g i ý mã tr m Thông tin tr m d ng
Hình ch c n ng tìm ki m tr m d ng thông qua mã tr m
Hình 3.17: Giao di n ch c n ng tìm ki m tr m d ng theo mã tr m
3.3.7.2 Tìm ki m tr m d ng t m t v trí v i bán kính ch đnh
Chức năng này được thực hiện tại trang bản đồ, cho phép người dùng nhập vào một vị trí và một bán kính Sau đó, hệ thống sẽ tiến hành xử lý để trả về danh sách các trạm dịch vụ tìm thấy.
V trí trung tâm đ c xác đ nh b ng hai cách:
Nh p đa ch vào h p tìm ki m: ch c n ng này đ c h tr kèm v i ch c n ng
“Tìm” đ tìm các đ a ch liên quan đ n t khóa c n nh p, giúp ng i s d ng ti t ki m đ c th i gian c ng nh h n ch các sai sót liên quan đ n vi c nh p đa ch
ánh d u tr c ti p trên b n đ : cho phép ng i dùng linh đ ng h n trong vi c xác đnh v trí tìm ki m
C hai cách xác đ nh v trí tìm ki m có s t ng quan h tr l n nhau Khi ng i dùng nh p vào đ a ch trên h p tìm ki m thì đ a ch đó c ng s đ c đánh d u trên b n đ
Khi người dùng đánh dấu một điểm trên bản đồ, địa điểm đó sẽ được hiển thị trên hộp tìm kiếm Người dùng cũng có thể di chuyển vị trí đã đánh dấu để xác định lại vị trí tìm kiếm Ngoài ra, người dùng có thể nhập bán kính tìm kiếm tối đa là 2000 mét theo hai cách khác nhau.
Nh p tr c ti p trong textbox
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
Di chuy n thanh bán kính
Cách xác định bán kính có mối quan hệ với nhau, khi người dùng nhập giá trị vào textbox, thanh bán kính sẽ hiển thị tương ứng Ngược lại, khi di chuyển thanh bán kính, giá trị sẽ được cập nhật trong textbox.
Sau khi xác định vị trí và bán kính tìm kiếm, người dùng sẽ truy cập dịch vụ Google Place Radar Search Service, cho phép tìm kiếm lên đến 200 kết quả Tuy nhiên, kết quả trả về không có thành phần chứa tên kết quả, vì vậy người dùng cần truy cập dịch vụ Google Place Details Service để lấy thông tin tên của kết quả Đồng thời, người dùng cũng có thể vẽ một vòng tròn trên bản đồ để xác định phạm vi tìm kiếm dựa trên kết quả nghiên cứu cơ sở lý thuyết chống 2.
S đ phân tích ch c n ng tìm ki m tr m d ng nh sau:
Xác đ nh v trí ánh d u trên b n đ
Google Radar Search Service Server (Google)
Thêm vào danh sách tr m d ng
V vòng tròn trên b n đ i = 0 i =1
3.3.7.2.1 Ch n v trí tìm tr m d ng
Nhập địa chỉ tìm kiếm cho phép người dùng nhập vị trí cần tìm Sau khi nhấn nút “Tìm”, hệ thống sẽ tìm vị trí của địa chỉ và hiển thị trên bản đồ Nếu có nhiều địa chỉ được tìm thấy, người dùng sẽ thấy một popup để chọn địa chỉ trước khi hiển thị trên bản đồ Trong trường hợp chỉ có một địa chỉ duy nhất, địa chỉ đó sẽ được hiển thị trực tiếp trên bản đồ Ngược lại, nếu địa chỉ không tồn tại, người dùng sẽ nhận được thông báo không tìm thấy vị trí yêu cầu.
Ch c n ng này c a ng d ng s d ng Google Place AutoComplete Service đ tìm các v trí g n gi ng v i đ a ch do ng i dùng nh p và Google Geocode Service đ tìm t a đ t đa ch
S đ phân tích ch c n ng nh p đa ch t i h p tìm ki m nh sau:
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
Popup xác nh n v trí S ph n Status ? JSON t >1 ánh d u v trí trên b n đ
Google Geocode Service Server (Google) JSON o Giao di n ng d ng khi th c hi n ch c n ng nh p đ a ch vào h p tìm ki m:
Hình 3.20: Xác đ nh v trí tìm tr m d ng
Người dùng có thể đánh dấu vị trí tìm kiếm trên bản đồ bằng cách nhấn và giữ (hold) trên màn hình Khi thực hiện thao tác này, vị trí được đánh dấu sẽ hiển thị trên hộp tìm kiếm cùng với tên của đa chỉ tại điểm mà người dùng đã đánh dấu Để thay đổi vị trí, người dùng chỉ cần nhấn và di chuyển vị trí đó trên bản đồ.
Chức năng này sử dụng dịch vụ Google Reverse Geocode để xác định địa điểm chính xác Khi người dùng kích hoạt chức năng tìm kiếm trên trang bản đồ, một khai báo sự kiện sẽ được thêm vào như sau: googlemap.Hold += new EventHandler.
(googlemap_Hold);
Khi b ch n ch c n ng tìm tr m, s ki n hold c a b n đ s đ c thu h i googlemap.Hold -= googlemap_Hold;
Trong s ki n hold c a googlemap, ta s xây d ng các ph ng th c c n thi t đ hi n th c đ c tính n ng trên
Bán kính tìm kiếm được xác định qua hai phương pháp: nhập trực tiếp vào ô textbox hoặc kéo thả trên thanh bán kính Hai phương pháp này có mối quan hệ logic với nhau Sau khi xác định bán kính, nếu đã có vị trí tìm kiếm, người dùng sẽ thấy một hình tròn xuất hiện, xác định phạm vi tìm kiếm trên bản đồ.
K t qu tr v c a vi c tìm ki m tr m d ng s đ c th hi n hai d ng sau:
T i trang b n đ : các tr m d ng tìm th y s đ c đánh d u (pushpin) trên b n đ giúp ng i dùng d dàng quan sát h n
T i trang k t qu : t t c tr m d ng tìm th y s đ c hi n th trong m t listbox đ ng th i ng d ng còn th hi n s tr m d ng tìm th y
Hình 3.21: Giao di n hi n th k t qu tìm tr m d ng
Tìm đ ng đ i b ng xe buýt
Chức năng này được thực hiện tại trang web, cho phép người dùng nhập vào điểm bắt đầu và điểm kết thúc, sau đó hệ thống sẽ xử lý và tìm đường đi phù hợp bằng xe buýt giữa hai điểm đó.
M c đnh, ng d ng s tr v t t c các l trình tìm th y ho c có th đ c t i u theo 4 tiêu chí sau:
Th i gian đi nhanh nh t
Vi c xác đnh đi m đ u ho c đi m k t thúc đ c th c hi n b ng hai cách:
Nh p đa ch t i h p tìm ki m
Bên c nh đó, ng d ng cho phép ng i dùng có th di chuy n các đi m b t đ u ho c đi m k t thúc trên b n đ đ xác đnh l i v trí ho c chuy n đ i qua l i gi a đi m b t đ u và k t thúc
Sau khi cung cấp điểm bắt đầu và kết thúc, người dùng sử dụng dịch vụ Google Direction để tìm lộ trình di chuyển Kết quả trả về là một tệp tin JSON, trong đó chứa các thông tin liên quan đến vị trí đích kết hợp với việc sử dụng phương thức giải mã để chuyển đổi thành phần points trong polyline phục vụ cho việc vạch lộ trình lên bản đồ Tiếp theo, từ danh sách các kết quả trả về, chúng tôi xây dựng các phương thức tìm lộ trình phù hợp với tiêu chí mà người dùng đã chọn.
Để tối ưu hóa việc xử lý thông tin, tôi đã xây dựng một lớp (Routes.cs) để lưu trữ các thông tin cần thiết từ tệp JSON Thay vì phải phân rã tệp JSON nhiều lần, người dùng chỉ cần truy xuất thông tin thông qua lớp Routes.cs, giúp tiết kiệm thời gian và tăng hiệu quả xử lý.
S đ phân tích ch c n ng tìm đ ng đi b ng xe buýt nh sau: i m b t đ u i m k t thúc
Nh p đa ch ánh d u trên b n đ
Nh p đa ch ánh d u trên b n đ
Không tìm th y l trình i = 0 i