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

0947XÂ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

101 2 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 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
Tác giả Lê Hữu Tài
Người hướng dẫn Th.S. H. Quang Khải, Th.S. Phan T. Phúc
Trường học Trường Đại Học Mở Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại khóa luận tốt nghiệp
Năm xuất bản 2014
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 101
Dung lượng 3,34 MB

Cấu trúc

  • 1.1 t v n đ (12)
    • 1.1.1 Th c tr ng giao thông hi n nay (12)
    • 1.1.2 Các gi i pháp công ngh hi n có (12)
    • 1.1.3 Lý do ch n đ tài (14)
  • 1.2 M c tiêu đ tài (14)
  • 1.3 Ph ng pháp th c hi n (14)
  • 2.1 T ng quan v l p trình Windows phone 8 (15)
    • 2.1.1 Cài đ t môi tr ng (15)
    • 2.1.2 B c c c a m t ng d ng (15)
    • 2.1.3 Tìm hi u XAML trong l p trình Windows phone (16)
    • 2.1.4 Ngôn ng C# trong vi c xây d ng ng d ng trên Windows phone (16)
    • 2.1.5 Tìm hi u LINQ To SQL (23)
  • 2.2 S d ng GPS và A-GPS trên Windows phone (26)
    • 2.2.1 T ng quan v GPS (26)
    • 2.2.2 T ng quan v A-GPS (26)
    • 2.2.3 S d ng GPS trên Windows phone (28)
  • 2.3 S d ng Google maps trong ng d ng Windows phone 8 (31)
    • 2.3.1 Gi i thi u control Maps trong Windows phone 8 (31)
    • 2.3.2 So sánh Bing maps và Google maps (31)
    • 2.3.3 Chuy n đ i Bing maps sang Google maps (33)
  • 2.4 L p trình client – server trên .NET (35)
    • 2.4.1 T ng quan v l p trình client – server (35)
    • 2.4.2 Xây d ng Server h tr s d ng b n đ offline (38)
  • 2.5 T ng quan v Web service (41)
    • 2.5.1 Gi i thi u v Web service (41)
    • 2.5.2 Xây d ng Web service (42)
  • 2.6 Google maps API Web services (43)
    • 2.6.1 Cú pháp s d ng (43)
    • 2.6.2 X lý k t qu tr v (43)
    • 2.6.3 Google Direction API Service (45)
    • 2.6.4 Google Geocoding API Service (48)
    • 2.6.5 Google Reverse Geocoding API Service (49)
    • 2.6.6 Google Place Autocomplete API Service (50)
    • 2.6.7 Google Place API Nearby Search Service (52)
    • 2.6.8 Google Place API Radar Search Service (53)
    • 2.6.9 Google Place Details API Service (54)
  • 2.7 Áp d ng công th c hình c u c a cosines (Spherical Law of Cosines) (55)
    • 2.7.1 Gi i thi u (55)
    • 2.7.2 V n d ng (55)
  • 2.8 Xây d ng ph ng th c gi i mã t a đ (57)
    • 2.8.1 Tính c p bách c a v n đ (57)
    • 2.8.2 C s c a vi c xây d ng ph ng th c gi i mã (57)
    • 2.8.3 Ph ng th c gi i mã t a đ (61)
  • 3.1 Gi i thi u ng d ng (65)
  • 3.2 T ch c c s d li u (66)
    • 3.2.1 D li u c c b (Local Database) (66)
    • 3.2.2 D li u t Google Maps API Web Services (69)
  • 3.3 Hi n th c ng d ng (70)
    • 3.3.1 Giao di n trang ch (70)
    • 3.3.2 Hi n th danh sách tuy n xe lên trang tuy n xe (71)
    • 3.3.3 Hi n th thông tin c a tuy n xe lên trang thông tin (72)
    • 3.3.4 Hi n th danh sách tr m d ng theo t ng tuy n (73)
    • 3.3.5 Hi n th l trình xe buýt lên b n đ (75)
    • 3.3.6 nh v cá nhân (77)
    • 3.3.7 Ch c n ng tìm ki m tr m d ng (78)
    • 3.3.8 Tìm đ ng đ i b ng xe buýt (84)
    • 3.3.9 Xây d ng trang download b n đ (92)
    • 3.3.10 S d ng pushpin trong ng d ng (93)
    • 3.3.11 Xây d ng màn hình ch ti n trình th c hi n (95)
  • 4.1 K t qu đ t đ c (96)
  • 4.2 Nh ng h n ch (96)
  • 4.3 H ng phát tri n (96)

Nội dung

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, xã hội, thương mại, khoa học và giáo dục của đất nước Tuy nhiên, hệ thống giao thông tại đây rất phức tạp và kém chất lượng, 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 thường xuyên diễn ra, đặc biệt vào giờ cao điểm, gây bức xúc trong cộng đồng Do đó, cần phải có những giải pháp hiệu quả để giải quyết vấn đề giao thông hiện nay.

Hằng năm, các thành phố lớn đón nhận hàng ngàn học sinh, sinh viên và công nhân từ nhiều tỉnh thành khác nhau, dẫn đến tình trạng đông đúc xe máy 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 ùn tắc giao thông Để cải thiện tình hình, cần có cá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 những năm gần đây, 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 dịch vụ đi lại bằng phương tiện xe buýt Thực tế cho thấy, 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 đến cũng tăng lên đá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, vẫn còn nhiều hạn chế ảnh hưởng đến việc đi lại của người dân Thông tin về các tuyến xe buýt và thời gian di chuyển chưa đáp ứng đủ yêu cầu đa dạng và kịp thời của người dùng Việc thiếu bảng thông tin rõ ràng về các tuyến xe buýt gây khó khăn, đặc biệt cho học sinh, sinh viên và những người mới đến thành phố Những người dân đã quen sử dụng dịch vụ xe buýt thường cần tì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, điều này trở thành yêu cầu thiết yếu trong việc cải thiện trải nghiệm đi lại của họ.

Hệ thống trên đòi hỏi cần phải có một giải pháp giúp người dân dễ dàng tìm kiếm thông tin về các tuyến xe, trạm dừng và lộ trình đ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ả.

Các gi i pháp công ngh hi n có

Mặc dù có nhiều phương pháp hỗ trợ việc đi lại, 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 khó khăn cho người dân và đôi khi không chính xác Ngược lại, 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 có hiệu quả nhưng không phù hợp cho giao thông do quá cồng kềnh và kém an toàn Do đó, cần có một thiết bị nhỏ gọn, nhưng phải có khả năng hỗ trợ bản đồ và giúp người dùng tìm đường nhanh chóng, hiệu quả.

Trong những năm gần đây, ngành di động đã phát triển vượt bậc, với smartphone trở thành một phần thiết yếu trong cuộc sống hàng ngày của con người Smartphone không chỉ giúp người dùng thực hiện các chức năng cơ bản như gọi điện, nhắn tin mà còn cung cấp nhiều tính năng nâng cao như lướt web, xem phim, nghe nhạc, định vị GPS và nhiều ứng dụng khác Điều này khiến smartphone trở thành "bạn đồng hành" không thể thiếu 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 di động là giải pháp tối ưu để đáp ứng nhu cầu ngày càng cao của người dùng.

Ngành công nghiệp smartphone hiện nay chủ yếu sử dụng các hệ điều hành như Windows Phone, Symbian, iOS, Android và webOS, với sự góp mặt của 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 các ứng dụng hỗ trợ tìm đường bằng xe buýt tại Việt Nam còn khá khiêm tốn, 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 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, như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 quan trọng, nâng cấp và phát huy nhiều hơn so với Windows Phone 7.

Phiên bản Windows Phone 8 đã chuyển đổi từ lõi kiến trúc Windows CE trên Windows Phone 7 sang kernel của Windows NT, được thiết kế cho Windows 8 Điều này đã tạo điều kiện thuận lợi cho người dùng trong việc kết nối giữa hai hệ điều hành.

Windows Phone 8 hỗ trợ CPU đa nhân và nhiều định dạng khác nhau, cùng với giao diện Start Screen tùy biến và phiên bản di động của Internet Explorer 10 Hệ điều hành này tích hợp Nokia Maps và có giao diện thân thiện với người dùng Việc 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 các ứng dụng chất lượng Ngoài ra, các nhà phát triển cũng có thể xây dựng các ứng dụng sinh động và hấp dẫn thông qua việc lập trình 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 trên thiết bị của họ, điều này tạo ra một "thiệt thòi" so với người dùng Android và iOS Sự cạnh tranh giữa Microsoft và Google trong lĩnh vực này đã dẫn đến việc các ứng dụng tìm đường bằng xe buýt tại Việt Nam trên Windows Phone 8 rất hạn chế, chỉ có một vài ứng dụng như BusMap Do đó, 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, 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 đã được phát triển Ứng dụng này được thiết kế dựa trên các tiêu chí như thời gian đi nhanh nhất, chi phí thấp nhất, thời gian đi ít nhất và số tuyế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úng tôi cung cấp nhiều tùy chọn tìm đường phong phú, cho phép người dùng dễ dàng tìm kiếm lộ trình phù hợp nhất Bạn có thể lựa chọn dựa trên các tiêu chí như thời gian di chuyển ngắn 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, along with the Windows Phone Software Development Kit, which is essential for creating Windows Phone apps Additionally, the user interface of these mobile applications is designed using Microsoft Expression Blend, allowing for the creation of visually appealing and user-friendly interfaces.

Công trình này tập trung vào việc 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, được xây dựng trên nền tảng Microsoft SQL Server 2008 nhằm đả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 sang Google Maps, giúp người dùng Windows Phone dễ dàng sử dụng bản đồ trực tuyến.

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 nâng cao sử dụng bền vững trong chế độ offline.

T ng quan v l p trình Windows phone 8

Cài đ t môi tr ng

Developing applications for Windows Phone 8 is facilitated through Microsoft Visual Studio 2012 or Microsoft Visual Studio 2013, both of which include the Windows Phone SDK (Software Development Kit).

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 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à file cấu hình cho ứng dụng khi xuất ra file xap, dùng để cài đặt trên điện thoại AssemblyInfo.cs chứa thông tin về tên và phiên bản của ứng dụng WMAppManifest.xml là file cấu hình khác chứa thông tin về tên, biểu tượng và trang mặc định của ứng dụng Thư mục references chứa các thư viện cần thiết cho việc sử dụng các lớp App.xaml là file cấu hình của ứng dụng, được quét trước khi khởi chạy để kiểm tra cấu hình App.xaml.cs là trang code-behind chứa mã lệnh của trang App.xaml ApplicationIcon.png là hình đại diện cho ứng dụng khi được cài đặt trên điện thoại, 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 xây dựng ứng dụng, người dùng có thể tạo thêm nhiều trang khác tùy thuộc vào mục đích sử dụng MainPage.xaml.cs là trang code-behind của 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ị trong thời gian tải dữ liệu, chỉ xuất hiện một lần khi ứng dụng được khởi chạy.

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ữ đánh dấu được sử dụng để định nghĩa các đối tượng trong NET và 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ở/đó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ới phần lập trình logic (coder), từ đó nâng cao hiệu quả và tính linh hoạt trong quá trình phát triển.

XAML cho phép người dùng thiết kế giao diện của ứng dụng Windows Phone trong hai môi trường chính là Visual Studio và Expression Blend Ngoài ra, khả năng "sức mạnh" của XAML còn thể hiện qua việc binding dữ liệu vào các thành phần (elements) đượ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 của Anders Hejlsberg và Scott Wiltamuth, kết hợp các yếu tố từ C++ và Java Ngôn ngữ này nổi bật với khả năng xử lý ngoại lệ, thu gom rác tự động, hỗ trợ kiểu dữ liệu mạnh mẽ và bảo mật mã nguồn, mang lại sự linh hoạt và hiệu quả cho lập trình viên.

C# là một ngôn ngữ lập trình hiện đại, kết hợp nhiều tính năng phức tạp từ các ngôn ngữ trước như Java và C++ Nó hỗ trợ các khái niệm như macro, template, đa kế thừa và lớp cơ sở ảo, giúp các nhà phát triển dễ dàng hơn khi 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 đặc biệt làm cho 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, thay thế ba toán tử trong C++ bằng một toán tử duy nhất là dấu chấm (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à một ngôn ngữ lập trình phổ biến và được ưa chuộng rộng rãi Nó được sử dụng để phát triển nhiều loại ứng dụng khác nhau như tạo ra ứng dụng xử lý văn bản, ứng dụng web, bảng tính, và thậm chí là các trình biên dịch cho các ngôn ngữ khác.

C# là một ngôn ngữ lập trình mạnh mẽ với khoảng 80 từ khóa và hỗ trợ nhiều kiểu dữ liệu Đâ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 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

Kiểu dữ liệu độ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 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ể thay đổi 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 đã đ 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 độ 2 phân chia kiểu dữ liệu thành kiểu dữ liệu giá trị (value) và kiểu dữ liệu tham chiếu (reference) Sự khác biệt này nằm ở cách lưu trữ kiểu dữ liệ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 Ngược lại, kiểu dữ liệu tham chiếu sẽ được lưu trong stack nhưng đối tượng thực tế sẽ lưu trong bộ nhớ heap Việc lưu trữ đối tượng trong bộ nhớ heap rất có ích cho 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ị, bao gồm các đại diện 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ơ bản đề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 số nguyên được sử dụng để lưu trữ giá trị khác nhau Kiểu char chiếm 2 byte và có thể lưu trữ ký tự Unicode Kiểu bool, với kích thước 1 byte, chỉ nhận giá trị logic true hoặc false Sbyte là kiểu số nguyên có dấu với giá trị từ -128 đến 127, trong khi short (Int16) có kích thước 2 byte và giá trị từ -32,768 đến 32,767 Kiểu ushort (Uint16) là số nguyên không dấu, với giá trị từ 0 đến 65,535 Kiểu int (Int32) chiếm 4 byte và có thể lưu trữ giá trị từ -2,147,483,648 đến 2,147,483,647, trong khi uint (Uint32) cũng chiếm 4 byte nhưng chỉ chứa giá trị không dấu từ 0 đến 4,294,967,295.

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 có thể là câu lệnh đơn, câu lệnh ghép hoặc câu lệnh điều kiện Nghĩa là, nếu điều kiện được xác định là đúng (true), thì câu lệnh 1 sẽ được thực hiện; ngược lại, nếu điều kiện sai, câu lệnh 2 sẽ được thực hiện Như vậy, câu lệnh 1 và câu lệnh 2 được thực thi dựa trên 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 ()

Case : [; break; ] Case : [; break; ] ……

Case : [; break; ] [default: ; break; ]

Câu lệnh switch trong lập trình cho phép thực thi một trong nhiều khối mã dựa trên giá trị của một biểu thức Nếu giá trị của biểu thức trùng với giá trị của một case nào đó, câu lệnh trong case đó sẽ được thực thi cho đến khi gặp lệnh break, lúc này quá trình sẽ kết thúc Việc sử dụng câu lệnh switch yêu cầu mỗi case phải có lệnh break để đảm bảo tính chính xác cho chương trình.

Câu lệnh switch(…) là một cấu trúc điều kiện tương tự như câu lệnh if…else…, nhưng có những điểm khác biệt quan trọng Mặc dù mọi câu lệnh switch(…) đều có thể chuyển đổi thành câu lệnh if…else…, ngược lại thì không phải lúc nào cũng khả thi Nguyên nhân là do 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 từng case Trong khi đó, câu lệnh if…else… cho phép các biểu thức điều kiện linh hoạt hơn, có thể thay đổi giữa các điều kiện khác nhau trong cùng một khối lệnh.

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ể Trong 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 () ;

Trong bài viết này, điều kiện được định nghĩa là một biểu thức logic, trong khi lệnh có thể là lệnh đơn, khối lệnh hoặc câu lệnh điều kiện Đặc biệt, ít nhất một câu lệnh trong lệnh phải có tác độ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 lập trình, 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ằng 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ũng được phân cách bằng 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 của điều này là khi điều kiện còn đúng thì lệnh sẽ tiếp tục được thực hiện.

Trong vòng lặp for( ), phần khởi tạo được thực hiện đúng một lần, trong khi phần điều kiện có nhiệm vụ 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 đắn 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, đồ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ệ sử dụng vệ tinh nhân tạo để xác định vị trí trên Trái Đất Hệ thống này được thiết kế, xây dựng, vận hành và quản lý bởi Bộ Quốc phòng Hoa Kỳ.

H th ng GPS bao g m 3 thành ph n chính:

Hệ thống GPS hoạt động nhờ vào 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 nghìn 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 vòng 24 giờ Với tốc độ bay khoảng 7 nghìn dặm mỗi giờ, các vệ tinh được sắp xếp trên quỹ đạo sao cho bất kỳ máy thu GPS nào cũng 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.

Hệ thống kiểm soát vệ tinh đóng vai trò quan trọng trong việc đảm bảo các vệ tinh hoạt động đúng hướng và cung cấp thông tin thời gian chính xác Hiện nay, có 5 trạm kiểm soát được phân bổ trên toàn cầu, bao gồm 4 trạm hoạt động tự động và 1 trạm trung tâm Các trạm tự động nhận tín hiệu liên tục từ các 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 quỹ đạo chính xác 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 Đồng thời, các 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, và sai lệch về thời gian này cho biết khoảng cách từ máy thu đến vệ tinh 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ải quyết vấn đề tín hiệu GPS yếu hoặc không hoạt động trong các khu vực đông dân cư hoặc không gian kín, nơi mà việc truyền dẫn tín hiệu giữa vệ tinh và thiết bị gặp khó khăn.

A-GPS ho t đ ng theo c ch sau :

A-GPS là công nghệ giúp cải thiện độ chính xác của định vị bằng cách sử dụng một hệ thống máy chủ trung gian Hệ thống này xác định vị trí của thiết bị dựa trên 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í 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, mặc dù gặp khó khăn trong việc giải mã vị trí.

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 thời điểm cụ thể, lựa chọn tốt nhất là sử dụng cách 1, tức là xác định vị trí tĩnh Trong khi đó, nếu người dùng yêu cầu cập nhật liên tục về vị trí, cách 2 là lựa chọn phù hợp hơn, mặc dù việc sử dụng cách này sẽ tiêu tốn nhiều năng lượng pin hơn của thiết bị.

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 để xác định 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) để "chờ" các phương thức này hoàn thành, từ đó 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, bao g m DesiredAccuracy Thông s này có 2 tùy chọn: 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.

 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 hơn so với các phương pháp định vị truyền thống, nhưng có thể ảnh hưởng đến hiệu suất hoạt động của thiết bị di động Ngưỡng di chuyển 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 bản đồ thành các bản đồ dữ liệu phong phú hơn, giúp cung cấp thông tin đa dạng và hữu ích cho người 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 đồ cá nhân hóa (Custom Maps) phù hợp với nhu cầu sử dụng của họ.

Khi so sánh Maps thế hệ thứ hai (được tích hợp trong Windows Phone 8) với Bing Maps của Windows Phone 7, có thể thấy rằng nó dựa trên Nokia’s Here Maps Tuy nhiên, ứng dụng này không cho phép người dùng tùy chỉnh cài đặt cơ bản, dẫn đến việc không thể chuyển đổi giữa các điều khiển khác nhau theo yêu cầu của người dùng.

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ùng với Bing Maps của Microsoft, Yahoo! Maps của Yahoo, Trendsmap của Twitter và Nokia Maps của Nokia Mặc dù Windows Phone cũng cung cấp ứng dụng Maps, nhưng dữ liệu của Bing Maps không phong phú, gây khó khăn trong việc tìm đường Ngược lại, Google Maps với nguồn dữ liệu dồi dào được sử dụng rộng rãi hơn, phổ biến trên hầu hết các ứng dụng tìm kiếm và các thiết bị di động.

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 sẽ được khai báo trong thuộc tính CredentialsProvider của bản đồ.

Việc sử dụng bản đồ luôn yêu cầu người dùng có khả năng thao tác thu nhỏ và quan sát toàn cảnh môi trường xung quanh Tuy nhiên, cần có thao tác phóng to để xem chi tiết một khu vực cụ thể trên bản đồ Để hỗ trợ người lập trình tiết kiệm thời gian xử lý, Map cung cấp tính năng zoom dựa trên thuộc tính ZoomBarVisibility.

Khi tải bản đồ, điều kiện để sử dụng hàm GetUri(int x, int y, int zoomLevel) là x, y, zoomLevel tương ứng với vĩ độ, kinh độ và mức độ phóng to của bản đồ, với kích thước 256*256 pixel Do đó, để chuyển đổi từ Bing Maps sang Google Maps, cần điều chỉnh hàm GetUri(int x, int y, int zoomLevel) cho phù hợp với mục đích sử dụng.

Trong trường hợp sử dụng online, việc chuyển đổi từ Bing Maps sang Google Maps liên quan đến việc viết lại hàm GetUri(int x, int y, int zoomLevel) Hàm này sẽ truy vấn đế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ì truy vấn đến 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}

Sau 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 Điều này có nghĩa là người dùng sẽ thấy dữ liệu từ Google Maps khi sử dụng Bing 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ười dùng Server này nhận yêu cầu từ hàm GetUri, sau đó tìm kiếm trong nguồn dữ liệu Google Maps (đã được nạp vào người dùng trước đó) để lấy file chứa các thông số x, y, zoomLevel và trả về cho Bing Maps hiển thị cho người sử dụng.

Để tải bản đồ Google Maps, người dùng có thể sử dụng hai phương pháp: tải 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ụ hỗ trợ tải bản đồ Google Maps trên máy tính cá nhân 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 khó khăn do một số hạn chế, khiến người dùng không thể tải bản đồ offline một cách hiệu quả Để sử dụng Google Maps offline, cần đảm bảo tính liên tục của kết nối tại các khu vực cụ thể và điều chỉnh mức độ zoom phù hợp Do đó, cần tìm kiếm giải pháp khác để tải bản đồ Google Maps về máy tính một cách thuận tiện hơn.

Trong quá trình tìm hiểu về việc xây dựng ứng dụng, tôi nhận thấy khi truy cập bản đồ Google Maps (tại địa chỉ: http://maps.google.com) bằng trình duyệt Internet Explorer, trình duyệt này sẽ lưu các file của Google Maps vào thư mục Temporary Internet Files Những file này được lưu kèm với các thông số như tọa độ, zoomLevel thông qua hàm GetUri Do đó, chỉ cần sử dụng trình duyệt Internet Explorer để truy cập Google Maps, kéo chuột để xem toàn bộ bản đồ khu vực với các mức zoom khác nhau, cuối cùng, thư mục Temporary Internet Files sẽ chứa toàn bộ bản đồ Google Maps.

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:

Để xem 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 Browsing history và chọn Setting để xem các tệp tin Việc xây dựng server là cần thiết vì server này hỗ trợ người dùng trong trường hợp offline, với địa chỉ localhost được sử dụng để kết nối Khi hàm GetUri gửi yêu cầu, server sẽ nhận và tìm file phù hợp để trả về cho Bing Maps hiển thị cho người sử dụng Đồng thời, để đảm bảo trải nghiệm cho người dùng, hàm GetUri sẽ tiếp tục gửi yêu cầu đến server của người dùng ngay cả khi không có kết nối internet Phần xây dựng server hỗ trợ offline sẽ được trình bày chi tiết 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ợ trong việc lập trình mạng với socket.

Stream socket là một giao thức truyền dữ liệu qua TCP (Transmission Control Protocol), cho phép truyền thông tin giữa hai quá trình đã được thiết lập kết nối Giao thức này đảm bảo dữ liệu được truyền đến đích một cách đáng tin cậy, chính xác và theo thứ tự, đồng thời quản lý lưu lượng thông qua mạng và kiểm soát các kết nố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ù việc truyền dữ liệu qua UDP không đảm bảo độ tin cậy, có thể xảy ra mất gói tin hoặc sai thứ tự, nhưng ưu điểm của giao thức này là không cần các bước phức tạp để thiết lập kết nối, giúp tốc độ truyền tải dữ liệu nhanh hơn so với TCP Do đó, UDP rất phù hợp 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 kết nối, 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 máy chủ (server) sẽ được đính kèm một số hiệu port cụ thể, cho phép server "đối" với client qua port đó 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) là thiết bị nhận yêu cầu từ khách hàng (client) thông qua nhiều địa chỉ IP và cổng đã được định sẵn Khi khách hàng gửi yêu cầu đến máy chủ, máy chủ sẽ tiếp nhận dữ liệu, xử lý và trả kết quả lại cho khách hàng.

- 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 quá trình giao tiếp giữa client và server, client sử dụng hàm socket() để tạo socket, sau đó gọi connect() để 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 hiệu quả.

- 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 có yêu cầu (Request Message) từ client gửi đến Tiếp theo, server sẽ phân tích và thực hiện yêu cầu, sau đó trả kết quả 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ể được thực hiện nhiều lần tùy thuộc 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

Máy chủ đóng vai trò quan trọng trong việc xử lý yêu cầu từ client Khi nhận được yêu cầu kết nối, máy chủ sẽ kiểm tra yêu cầu đó; nếu đó là yêu cầu truy xuất thông tin (HTTP GET), máy chủ 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 và 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 của client có thể kèm theo các thông tin mà client mong muốn trao đổi với server Trong hàm GetUri, các thông số x, y, zoomLevel cho biết rõ ràng 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 ba 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 ở dòng đầu tiên trong thông điệp mà server gửi về 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 port 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 tin yêu cầu từ HTTP client, phản hồi kết quả về client, và nhiều chức năng khác.

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, sử dụng XML và HTTP để mã hóa và giải mã thông tin SOAP được sử dụng để truyền tải dữ liệu 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 sử dụng ngôn ngữ XML để truyền tải dữ liệu dưới dạng văn bản thuần (plain text) thông 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 thông tin Với việc dựa trên ngôn ngữ XML, SOAP cho phép giao tiếp không phụ thuộc vào nền tảng, hỗ trợ nhiều ngôn ngữ lập trình khác nhau 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 đến 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 Người lập trình có thể thêm các tham số vào Web service để điều chỉnh dữ liệu, và các tham số này sẽ được đặt trong thư mục gốc của ứng dụng App_Data của Web service Web service có thể được xuất bản trên localhost hoặc 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 through 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 tin dùng để trao đổi dữ liệu Việc lựa chọn giữa XML và JSON phụ thuộc vào từng tình huống cụ thể Đối với cùng một loại dữ liệu, tệp tin JSON thường 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 Các đặc tính của JSON rất phù hợp cho việc nhận phản hồi và phân tích kết quả trong các ứng dụng web hiện đại.

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ụ 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ể (như “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 các hoạt động giá trị trong một vùng đất hoặc kinh tế mà từ đó có thể tính toán hướng di chuyển Khi xác định điểm đến, các dịch vụ sẽ mã hóa chuỗi và chuyển đổi nó thành một vùng đất hoặc kinh tế đã được 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 định nghĩa là phương thức di chuyển, bao gồm các lựa chọn như lái xe (driving), đi bộ (walking), đạp xe (bicycling) hoặc phương tiện công cộng (transit) Nếu chọn chế độ "transit", người dùng cần xác định thêm tham số như thời gian xuất phát (departure_time) hoặc thời gian đến (arrival_time) để có thông tin chính xác hơn về hành trình.

Waypoints là các điểm dừng quan trọng trong lộ trình, giúp điều chỉnh và thay đổi hướng đi bằng cách xác định các vị trí mà lộ trình phải đi qua Mỗi waypoint được xác định bằng tọa độ địa lý đã được mã hóa Chúng hỗ trợ cho các phương tiện di chuyển như ô tô, đi bộ hoặc xe đạp, nhưng không áp dụng cho hình thức di chuyển bằng xe buýt.

Tránh các tuyến đường có thu phí và cao tốc để có một hành trình thuận lợi hơn Hiện nay, thông tin này được khuyến nghị rõ ràng: nên tránh các tuyến đường có thu phí và cao tốc để giảm thiểu chi phí và nguy cơ ùn tắc giao thông.

 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 [] chứa danh sách các leg, mỗi leg đại diện cho một đoạn đường trong lộ trình Khi yêu cầu truy vấn là hướng di chuyển transit, Legs [] sẽ bao gồm các phần leg cần thiết để chỉ dẫn cho hành trình từ điểm khởi đầu đến điểm kết thúc.

 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 thành phần quan trọng, bao gồm giá trị (đo bằng mét) và văn bản mô tả (thông tin kèm theo giúp người dùng hiểu rõ hơn về khoảng cách).

 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)

Travel_mode là chế độ di chuyển cho hình thức vận tải, nếu người dùng thực hiện một hướng di chuyển transit thì travel_mode nhận 2 giá trị là “WALKING” hoặc “TRANSIT” Nếu travel_mode là “WALKING”, mỗi bước sẽ bao gồm một danh sách các sub steps Ngược lại, nếu travel_mode là “TRANSIT”, mỗi bước sẽ chứa transit_details với các thành phần như Departure_stop và Arrival_stop, cung cấp thông tin về vị trí mốc xuất phát và kết thúc trong đoạn đường Thông tin về vị trí mốc bao gồm hai thành phần: name (đặc c trạm dừng) và location (vị trí (vĩ độ, kinh độ) của trạm dừng) Ngoài ra, Arrival_time và Departure_time cho biết thời gian khởi hành và kết thúc của tuyến xe trên đoạn đường, bao gồm 2 thành phần: value và text Cuối cùng, Line chứa thông tin về tuyến xe, trong đó thành phần name cho biết 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 dựa trên 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ậ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 hoặc sử dụng dự án có sẵn Để kích hoạt API, hãy vào menu bên trái, chọn Services, sau đó chọn Status, tìm Place API và bật nó lên để 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)

Dữ liệu JSON trả về gồm hai thành phần chính là "status" và "predictions" Thành phần "predictions" chứa một danh sách tối đa 5 đề xuất 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”

Phản hồi JSON từ Google Place Nearby Search bao gồm hai thành phần chính là "status" và "results" Trong đó, thành phần "results" chứa danh sách các kết quả tìm kiếm Tuy nhiên, số lượng kết quả trả về cho mỗi lần truy vấn tối đa chỉ là 20, điều này khiến dịch vụ này không phù hợp với yêu 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 đối tượng tham chiếu, trong đó có thành phần quan trọng "name" để chỉ ra tên của đa ch 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 vị trí của điểm B (lat2, lng2) dựa trên tọa độ củ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 sau: lat2 = Math.asin(Math.sin(lat1) * Math.cos(d / R) + ) Công thức này cho phép tính toán vị trí 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, cung cấp 15 chữ số chính xác, giúp tính toán khoảng cách giữa hai điểm với độ chính xác cao, có thể đo được khoảng cách chỉ 1 mét Điều này lý giải vì sao các công thức hình cầu của cosines được ưa chuộng hơn so với 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.

Trên 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, cho phép vẽ các đa giác Để tạo ra một hình tròn, lập trình viên cần 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 để tạo thành hình tròn.

Như vậy, phương thức để vẽ một hình tròn từ một điểm với bán kính xác định đã mở ra cơ hội cho các lập trình viên trên Windows Phone Xuất phát từ thực tế này, yêu cầu xây dựng một phương thức đáp ứng nhu cầu trên trở nên cần thiết, trong đó việc sử dụng các công thức hình học của cosines được coi là "chìa khóa" để giải quyết vấn đề này.

Để xác định 360 điểm trên đường tròn, chúng ta cần biết khoảng cách từ tâm hình tròn là d và số đo góc (brng) của mỗi điểm so với phương Bắc Số đo 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 dựa vào khoảng cách d và số đo góc brng, thông qua hàm GetDestinationFromCenterPoint Bằng cách này, chúng ta có thể tìm ra 360 điểm trên đường tròn bằng cách lặp lại 360 lần, với mỗi lần cung cấp các thông số như tọa độ tâm hình tròn (theo đơn vị radian), bán kính hình tròn (mét) và số đo góc brng (radian) Hàm này sẽ tính toán tọa độ (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 chứa danh sách tất 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 để lập trình có thể 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 đó, nếu muốn sử dụng, lập trình viên phải tự 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, để di chuyển giữa hai điểm, lập trình viên cần cung cấp danh sách tọa độ bắt đầu và điểm kết thúc Thành phần "points" là yếu tố quan trọng quyết định đường đi Tuy nhiên, hệ thống không hỗ trợ lập trình viên truy cập trực tiếp vào mã của thành phần "points" trong polyline của Google Direction API Do đó, yêu cầu cấp bách là phải xây dựng một phương thức giải mã thành phần này sử dụng danh sách 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à điểm kết thúc Một danh sách tọa độ có thể chứa hàng triệu tọa độ khác nhau, vì vậy việc mã hóa thành phần points là rất quan trọng.

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

Các thành phần điểm được mã hóa dựa trên giải thuật base64, đi kèm với 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, đây là một phương thức được sử dụng rộng rãi để chuyển đổi các dữ liệu nhị phân sang dạng văn bản thuần túy, thường được áp dụng trong việc truyền tải qua giao thức email Chuẩn Base64 bao gồm một tập hợp các ký tự theo thứ 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

Trong lĩnh vực mã hóa, biểu diễn giá trị từ 52 đến 61, giá trị từ 62, và giá trị từ 63 sử dụng các ký tự khác nhau Mỗi ký tự trong mã ASCII sử dụng 8 bit, trong khi ký tự trong chuẩn base64 chỉ cần 6 bit Google đã phát triển một quy trình mã hóa giá trị (về học thuật và kinh tế) bao gồm 11 bước khác nhau.

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

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ơ bản như cộng, trừ, nhân, và 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 giống nhau Các toán hạng được chuyển đổi sang dạng 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 cho phép xác định giá trị của bit cuối cùng trong chuỗi bít bằng cách thực hiện phép AND với 1 Ví dụ, nếu chuỗi bít là 10101 và chúng ta không biết bit cuối cùng là 1 hay 0, ta có thể áp dụng phép 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ó cùng độ dài với hai chuỗi bit ban đầu Trong 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 có ít nhất một trong hai bit là 1; ngược lại, trong tất cả các trường hợp khác, nó sẽ trả về 0.

Kí hi u: | (trong C, C++, Java, C#) ho c or (trong Pascal)

Phép toán OR được sử 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 của chuỗi này, 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 một chuỗi bit, số bit được dịch sang bên trái sẽ xác định số lượng bit 0 được thêm vào bên phải chuỗi đó 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 chất lượng, bước 4 và 5 yêu cầu thêm một bit vào bên phải chuỗi bit để biểu thị giá trị âm Bit này đóng vai trò 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 8 bit và 5 bit, với giá trị 0x20 (tương đương 32 trong hệ thập phân, biểu diễn là 0010 0000), chúng ta cần thêm một bit 1 vào bên trái chuỗi bit để tạo thành một khối 6 bit mới Để quay về khối 7 bit, điều cần thiết là phải bít một bit đầu tiên bên trái của khối bit, bằng cách lấy khối bit đó AND 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 giá trị tọa độ mà còn bao gồm các ký tự điều kiện (có mã ASCII từ 32 trở lên) Những ký tự này hoạt động như cờ (flag) để chỉ báo hiệu kết thúc một lần mã hóa tọa độ hoặc kinh độ, hoặc để báo hiệu bắt đầu mã hóa tại điểm tiếp theo Quá trình mã hóa bắt đầu từ điểm đầu tiên, sau đó Google không mã hóa trực tiếp tọa độ tiếp theo mà chỉ mã hóa phần offset, tức là sự chênh lệch giữa tọa độ tiếp theo và tọa độ trước đó Do đó, khi giải mã điểm đầu tiên, tọa độ tiếp theo sẽ được tính toán dựa trên giá trị này.

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 thúc khi gặp ký tự điều kiện (có mã ASCII < 32), cho biết kết thúc quá trình mã hóa một giá trị Ngoài ra, nếu chỉ số index lớn hơn hoặc bằng độ dài của mảng, quá trình giải mã cũng sẽ kết thúc do không còn phần tử nào để lặp.

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 và trạm dừng tại thành phố Hồ Chí Minh Ứng dụng này cho phép người dùng đánh giá cá nhân, tìm kiếm trạm dừng và tìm đường đi trên toàn quốc BusInfo rất 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ười 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 di chuyển giữa các trang, từ trang này sang trang khác, giúp họ có cái nhìn tổng quan về nội dung của trang tiếp theo, tạo sự thân thiện hơn với người dùng Người 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ó 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, còn có các tính năng như tìm đường, 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)

Việc truy xuất thông tin về các tuyến xe và trạm dừng một cách thường xuyên là rất quan trọng Dữ liệu này cần phải được cập nhật liên tục và chính xác, do đó việc xây dựng một cơ sở dữ liệu địa phương là điều cần thiết Cơ sở dữ liệu địa phương giúp người dùng truy cập thông tin nhanh chóng và đáp ứng kịp thời các yêu cầu trong mọi tình huống.

Hình 3.2: S đ liên k t c s d li u c a ng d ng

B ng TUYENXE chứa thông tin quản lý tuyến xe, mỗi tuyến xe đều có một ID duy nhất để phân biệt với các tuyến xe khác Các thuộc tính của từng tuyến xe được mô tả chi tiết 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) 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, bao gồm lộ trình cụ thể của từng tuyến xe, các trạm dừng mà tuyến xe đi qua, và trạm dừng cuối cùng trong danh sách Thông tin này được trình bày rõ ràng trong bảng để người dùng dễ dàng theo dõi lộ trình và các điểm dừng của từng tuyến xe.

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 Directions API for route finding, Google Place Radar Search for locating establishments, Google Geocode Service for retrieving address details, Google Reverse Geocode Service for obtaining coordinates from addresses, Google Place Details Service for identifying places 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 với nguồn dữ liệu lấy 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) Do đó, để tối ưu hóa việc sử dụng ListBox, tôi đã tìm hiểu và áp 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 đề cập đến việc sử dụng hai TextBlock bên trong ListBox để hiển thị thông tin một cách hiệu quả TextBlock đầu tiên sẽ hiển thị mã tuyến xe, trong khi TextBlock thứ hai sẽ hiển thị tên tuyến xe Cách bố trí 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 dễ dàng định vị các điểm dừng bằng cách sử dụng biểu tượng pushpin 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 hoạt động tại trạm đó.

Danh sách tất cả các trạm đo lường sẽ được hiển thị, bao gồm thông tin chi tiết về mã trạm, tên trạm và thứ tự của trạm trong danh sách các trạm đo lường.

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ứ (để biết trạm thứ mấy 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ả 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 ListBox Control Để thực hiện điều này, ListBox cần được gán một nguồn dữ liệu có kiểu là một 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 đó, các trường dữ liệu được định nghĩa dưới dạng một loại kiểu dữ liệu vô danh (anonymous type) thông qua từ khóa khai báo var Để sử dụng hiệu quả, cần phải xây dựng một lớp (class) có tên là tramdung để chứa thông tin về các trường dữ liệu tìm thấy Lớp này sẽ được sử dụng để gán nguồn dữ liệu cho ListBox, bao gồm các thông tin như mã trường, tên trường, tá đ 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 đ

Chức năng "Trầm dương" trên trang bản đồ được thiết lập như sau: 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 đỏ và các pushpin sẽ hiển thị Khi chọn lại nút, nền sẽ chuyển sang màu xanh và các pushpin sẽ ẩn đi Quá trình này lặp đi lặp lại, với một lần hiển thị các pushpin và một lần ẩn đi, tạo ra sự 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 phân tích chức năng hiện tại của lộ trình lên bảng đợi và lộ trình của các tuyến xe buýt Người dùng có thể truy xuất thông tin từ các tuyến xe như TOADOMAHOALDI hoặc TOADOMAHOALVE, tùy thuộc vào lựa chọn của họ Giá trị của các tuyến này trong cơ sở dữ liệu được sử dụng để liệt kê danh sách tất cả các điểm bắt đầu và điểm kết thúc của tuyến xe, và đã được mã hóa để dễ dàng truy cập.

Các giá trị được thu thập thông qua dịch vụ Google Direction Service, với các địa điểm được xác định 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 (tính theo giây từ thời điểm 1/1/1970 đến thời điểm hiện tại theo yêu cầu của dịch vụ) Kết quả trả về từ Google Direction Service là một tập tin JSON, sau đó tiến hành phân tích tập tin này để truy xuất các điểm trong polyline đưa vào cơ sở dữ liệu Để sử dụng các giá trị này cho lộ trình di chuyển của tuyến xe, ta sẽ áp dụng hàm DecodePolylinePoints đã được xây dựng dựa trên cơ sở lý thuyết hình học 2 chiều, và sau đó sử 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ể truy cập vào 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 thực hiện tại trang bản đồ bằng cách nhấp chọn nút "Tôi", từ đó một biểu tượng pushpin sẽ được vẽ lên bản đồ để thể hiện vị trí của người dùng Khi người dùng nhấp chọn pushpin, một thông báo (MessageBox) sẽ hiển thị thông tin về địa điểm thời gian 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 chức năng quan trọng trong các ứng dụng tìm đường bằng xe buýt hiện nay Trong ứng dụng, việc tìm kiếm trạm dừng có thể thực hiện thông qua hai cách:

Tìm kiếm trầm dừng 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 định vị trong một phạm vi xác định giúp người dùng dễ dàng tìm kiếm trạm trong khu vực xung quanh Với khả năng xác định vị trí dựa trên tâm và bán kính, tính năng này mang lại lợi ích lớn cho người dùng trong việc tìm kiếm trạm một cách hiệu quả.

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 trạm và hoạt động ngay cả khi người dùng không có kết nối internet, nhờ vào nguồn dữ liệu được lưu trữ trong Local Database Khi kích hoạt, nguồn dữ liệu về trạm dừng sẽ đượ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ẽ xuất hiện chứa danh sách các mã trạm gợi ý phù hợp để lựa 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 dưới Chức năng "hiển thị lên bản đồ" sẽ cho phép hiển thị trạm dừng 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 đang 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 đồ, điểm đó sẽ được hiển thị trong kết quả tìm kiếm Người dù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ũ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ị trong textbox cũng sẽ được cập nhật.

Sau khi xác định vị trí và bán kính tìm kiếm, người dùng có thể 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ề từ dịch vụ này không bao gồm thành phần chứa tên kết quả Do đó, để có được thông tin chi tiết về tên của kết quả, người dùng cần truy cập dịch vụ Google Place Details Service Đồ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ủa lý thuyết chứng minh 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 để lựa chọn trước khi hiển thị trên bản đồ Trong trường hợp địa chỉ nhập vào là duy nhất, hệ thống sẽ hiển thị trực tiếp vị trí lên bản đồ Ngược lại, nếu địa chỉ không tồn tại, người dùng sẽ nhận 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ể tìm kiếm địa điểm trên bản đồ bằng cách chạm và giữ (hold) vào vị trí mong muốn Khi thực hiện thao tác này, vị trí sẽ được đánh dấu trên bản đồ và hiển thị tên của địa điểm tương ứng Để thay đổi vị trí đã đánh dấu, người dùng chỉ cần nhấn và di chuyển điểm đó trên bản đồ.

Chức năng này sử dụng dịch vụ Google Reverse Geocode Service để xác định vị trí địa lý Khi người dùng kích hoạt chức năng tìm kiếm trên bản đồ, một 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 được 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 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, từ đó có thể phân tích để truy xuất các thông tin liên quan đến việc kết hợp với việc sử dụng phương thức giải mã các điểm trong polyline phù hợp cho việc vẽ lộ trình lên bản đồ Tiếp theo, trong danh sách các kết quả trả về, người dùng có thể xây dựng các phương thức tìm lộ trình phù hợp với tiêu chí mà họ đã 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 Việc phân rã tệp JSON chỉ được thực hiện một lần, sau đó các thông tin sẽ được lưu trữ trong lớp Routes.cs Nhờ đó, trong các lần sử dụng sau, người dùng có thể truy xuất thông tin trực tiếp thông qua lớp này mà không cần phải phân rã lại tệp JSON.

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

Ngày đăng: 20/10/2022, 05:15

HÌNH ẢNH LIÊN QUAN

M cđ tin cy Ta đ xá cđ nh bi A-GPS thng có sai s  nhi u h n GPS. - 0947XÂ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
c đ tin cy Ta đ xá cđ nh bi A-GPS thng có sai s nhi u h n GPS (Trang 27)
Hình 2.3: So sánh Bingmaps vi Google maps. - 0947XÂ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
Hình 2.3 So sánh Bingmaps vi Google maps (Trang 32)
Hình 2.5: Mơ hình ho tđ ng ca server h tr sd ng b nđ offline   B n tin yêu c u HTTP bao g m các thông tin sau: - 0947XÂ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
Hình 2.5 Mơ hình ho tđ ng ca server h tr sd ng b nđ offline  B n tin yêu c u HTTP bao g m các thông tin sau: (Trang 39)
Hình 2.9: Kin trúc Webservice - 0947XÂ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
Hình 2.9 Kin trúc Webservice (Trang 41)
Theo đó, đv hình trịn thì cn phi xá cđ nh 360 đ im trê nđ ng tròn. Mi đ im nh  v y s  cách tâm hình trịn là d, s   đo góc (brng) c a đi m đó so v i ph ng B c c a  tâm hình trịn s  dao  đng t  00, 10,….đn 3600 - 0947XÂ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
heo đó, đv hình trịn thì cn phi xá cđ nh 360 đ im trê nđ ng tròn. Mi đ im nh v y s cách tâm hình trịn là d, s đo góc (brng) c a đi m đó so v i ph ng B c c a tâm hình trịn s dao đng t 00, 10,….đn 3600 (Trang 56)
Hình 2.12: L cđ 11 bc mã hóa thành ph n points - 0947XÂ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
Hình 2.12 L cđ 11 bc mã hóa thành ph n points (Trang 58)
Hình 2.13: Sđ 11 bc g ii mã ta đ - 0947XÂ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
Hình 2.13 Sđ 11 bc g ii mã ta đ (Trang 62)
Hình 2.7: L cđ xây d ng ph ngth c g ii mã ta . - 0947XÂ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
Hình 2.7 L cđ xây d ng ph ngth c g ii mã ta (Trang 63)
Hình 3.1: Sđ ch cn ng ca ngd ngCh n m t tr m d ng - 0947XÂ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
Hình 3.1 Sđ ch cn ng ca ngd ngCh n m t tr m d ng (Trang 65)
Hình 3.2: Sđ liên kt c sd li uc an gd ng - 0947XÂ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
Hình 3.2 Sđ liên kt c sd li uc an gd ng (Trang 66)
Hình 3.3: Mơ hình client – server ca ngd ng - 0947XÂ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
Hình 3.3 Mơ hình client – server ca ngd ng (Trang 69)
Hình 3.4: Giao din trang ch t rc và sau khi ch ntu yn xe - 0947XÂ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
Hình 3.4 Giao din trang ch t rc và sau khi ch ntu yn xe (Trang 70)
Hình 3.8: Giao din trang thơng tin t rc và sau khi ch ntu yn xeTrang ch - 0947XÂ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
Hình 3.8 Giao din trang thơng tin t rc và sau khi ch ntu yn xeTrang ch (Trang 72)
Hình 3.10: Giao din trang tr md ngTrang ch - 0947XÂ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
Hình 3.10 Giao din trang tr md ngTrang ch (Trang 73)
Hình 3.11: Giao din hin th danh sách tr md ng lên b nđ - 0947XÂ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
Hình 3.11 Giao din hin th danh sách tr md ng lên b nđ (Trang 74)

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w