Tài liệu Xây dựng ứng dụng tìm kiếm thông tin bản đồ trên thiết bị android

  • Số trang: 108 |
  • Loại file: PDF |
  • Lượt xem: 2677 |
  • Lượt tải: 0

Mô tả:

Hiện hay du lịch đang là một ngành kinh tế mũi nhọn của Việt Nam nói chung và đặt biệt là đối với Thành phố Nha Trang tỉnh Khánh Hòa. Với tiềm năng du lịch như vậy việc xúc tiến quảng bá du lịch và cung cấp thông tin du lịch là điều rất quan trọng để đẩy mạnh hơn nữa ngành kinh tế mủi nhọn này.
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN TỐT NGHIỆP Đề tài: Xây dựng ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Giáo viên hướng dẫn: Trần Minh Văn Sinh viên thực hiện: Trần Mạnh Cường MSSV:50130175 Lớp 50TH2 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 1 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Contents Lời nói đầu.................................................................................................................................. 6 Chương I: Giới thiệu................................................................................................................... 7 I.1 Du lịch Nha Trang ............................................................................................................. 7 I.2 Công nghệ thiết bị di động ................................................................................................ 8 I.2.1 Di động đi tắt đón đầu trong thế giới công nghệ ....................................................... 8 I.2.2 Thời kỳ “hậu PC” và cơ hội cho các lập trình viên di động .................................... 10 I.3 Mục đích thực hiện đề tài ................................................................................................ 13 Chương II: Hệ điều hành Android ............................................................................................ 15 II.1 Giới thiệu hệ điều hành Android .................................................................................... 15 II.2 Những đặc trưng của hệ điều hành Android: ................................................................. 15 II.3 Các tính năng hỗ trợ sẵn trong hệ điều hành Android ................................................... 16 II.4 Kiến trúc và các thành phần trong hệ điều hành Android .............................................. 17 II.4.1 Linux kernel (nhân Linux) ...................................................................................... 17 II.4.2 Libraries .................................................................................................................. 17 II.4.3 Android runtime: .................................................................................................... 18 II.4.4 Application framework 2.4.3 Android runtime: ..................................................... 18 II.4.5 Applications: ........................................................................................................... 19 II.5 Các khái niệm cơ bản trong lập trình ứng dụng Android ............................................... 19 II.5.1 Activity ................................................................................................................... 19 II.5.2 Service .................................................................................................................... 22 II.5.3 Content provider ..................................................................................................... 23 II.5.4 Broadcast Receive .................................................................................................. 23 II.5.5 View........................................................................................................................ 23 II.5.6. Intent ...................................................................................................................... 24 II.6 Các thành phần trong một project ứng dụng Android .................................................... 25 II.6.1. AndroidManifest.xml ............................................................................................ 25 II.6.2. File R.java .............................................................................................................. 26 II.6.3 Thư mục src ............................................................................................................ 26 II.6.4 Thư mục rec ............................................................................................................ 26 Chương III: Công nghệ XML và Webservice .......................................................................... 27 III.1 Công nghệ XML ........................................................................................................... 27 III.1.1 Lịch sử ra đời chuẩn XML, XML là gì? ............................................................... 27 III.1.2 Cấu trúc của file XML và tài liệu XML ................................................................ 27 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 2 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android III.1.3 Đặc điểm của XML ............................................................................................... 28 III.1.4 XML và HTML ..................................................................................................... 29 III.1.5 Ngôn ngữ đặt tả cấu trúc ....................................................................................... 29 III.1.6 Ưu điểm của XML ................................................................................................ 30 III.2 Webservice ....................................................................................................................... 31 III.2.1 Webservice là gì ? ...................................................................................................... 31 III.2.2 Một số đặt điểm cơ bản của webservice .................................................................... 32 III.2.3 Phân loại webservice ................................................................................................. 32 Chương IV: Google Map và Google Maps API Web Services ................................................ 34 IV.1 Google Map .................................................................................................................. 34 IV.1.1 Giới thiệu Google Map ......................................................................................... 34 IV.1.2 Google Maps for Mobile ....................................................................................... 35 IV.2 Google Maps API Web Services .................................................................................. 37 IV.2.1 Giới thiệu Google Maps API Web Services ......................................................... 37 IV.2.2 Sử dụng Google Maps API Web Services ............................................................ 37 IV.3 Google Geocoding API ................................................................................................ 40 IV.3.1 Mã hóa địa lý là gì? ............................................................................................... 40 IV.3.2 Giới hạn sử dụng ................................................................................................... 40 IV.3.3 Geocoding API request ......................................................................................... 40 IV.3.4 Kết quả mã hóa địa lý ........................................................................................... 41 IV.3.5 Giải mã địa lý (tìm địa chỉ từ kinh độ-vĩ độ) ........................................................ 47 IV.4 Google Distance Matrix API ........................................................................................ 50 IV.4.1 Giới hạn sử dụng ................................................................................................... 50 IV.4.2 Distance Matrix API request ................................................................................. 50 IV.4.3 Kết quả từ Distance Matrix API ........................................................................... 52 IV.5 Google Direction API ................................................................................................... 58 IV.5.1 Giới hạn sử dụng ................................................................................................... 58 IV.5.2 Google Direction request ...................................................................................... 58 IV.5.3 Kết quả trả về Google Direction ........................................................................... 61 Chương V: Cơ sở dữ liệu SQLite ............................................................................................. 70 V.1 Giới thiệu SQLite ........................................................................................................... 70 V.2 Thiết kế của SQLite ....................................................................................................... 70 V.3 Các đặc tính của SQLite ................................................................................................ 71 V.4 Sử dụng SQLite .............................................................................................................. 71 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 3 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android V.4.1 Những trường hợp thích hợp sử dụng SQLite ........................................................ 71 V.4.2 Những trường hợp không thích hợp sử dụng SQLite ............................................. 73 V.5 Các ứng dụng lớn của SQLite ........................................................................................ 74 Chương VI: Xây dựng ứng dụng .............................................................................................. 75 VI.1 Phân tích thiết kế dữ liệu .............................................................................................. 75 VI.1.1 Đặc tả hệ thống ..................................................................................................... 75 VI.1.2 Mô hình thực thể kết hợp ...................................................................................... 76 VI.1.3 Mô hình vật lý dữ liệu ........................................................................................... 77 VI.2 Các yêu cầu về chức năng của chương trình ................................................................ 77 VI.3 Các vấn đề trong quá trình xây dựng ứng dụng............................................................ 78 VI.3.1 Giao diện UI trong lập trình ứng dụng Android ................................................... 78 VI.3.2 Đăng ký bản đồ Google Map trong ứng dụng ...................................................... 82 VI.3.3 Đánh dấu địa điểm và hiện thông tin trên bản đồ ................................................. 83 VI.3.4 Sử dụng SQLite trong hệ điều hành Android ....................................................... 84 VI.3.5 Phân tích cú pháp XML ........................................................................................ 86 VI.3.6 Chạy đa tiến trình các tác vụ truy cập mạng nhằm giảm độ trễ cho ứng dụng ..... 87 VI.3.7 Bắt vị trí hiện tại bằng các Location Provider ...................................................... 88 VI.3.8 Dùng Observer Template để thông báo cho các Activity mỗi khi địa điểm hiện tại thay đổi ............................................................................................................................. 90 VI.3.9 Gọi các Activity và truyền dữ liệu giữa chúng ..................................................... 91 VI.4 Kết quả xây dựng ứng dụng.......................................................................................... 92 Chương VII: Tổng kết ............................................................................................................ 106 VII.1 Ưu khuyết điểm của chương trình đã xây dựng ........................................................ 106 VII.1.1 Ưu điểm ............................................................................................................. 106 VII.1.2 Khuyết điểm....................................................................................................... 106 VII.2 Hướng đi trong tương lai ........................................................................................... 106 VII.3 Kết quả đạt được ....................................................................................................... 107 Tài liệu tham khảo .................................................................................................................. 108 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 4 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Lời nhận xét của giáo viên hướng dẫn: ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ............................................................................................................................... GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 5 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Lời nói đầu Hiện hay du lịch đang là một ngành kinh tế mũi nhọn của Việt Nam nói chung và đặt biệt là đối với Thành phố Nha Trang tỉnh Khánh Hòa. Với tiềm năng du lịch như vậy việc xúc tiến quảng bá du lịch và cung cấp thông tin du lịch là điều rất quan trọng để đẩy mạnh hơn nữa ngành kinh tế mủi nhọn này. Với sự xuất hiện phát triển chóng mặt của công nghệ mobile-thiết bị nhúng hiện nay mang lại cơ hội quảng bá du lịch và cung cấp thông tin du lịch một cách thuận tiện nhất cho khách du lịch. Và hiệu quả mạng lại là rất cao. Với sự hướng dẫn, giúp đỡ của thầy Trần Minh Văn tôi đã thực hiện đề tài ‘Xây dựng ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android’. Phần mềm sản phẩm có tên là ‘Du lịch Nha Trang bằng xe buýt’. Được viết bằng ngôn ngữ Java, trên nền tảng Android 2.3.3, sử dụng Google Map API lever 10 và Google Maps API Web Services, sử dụng công nghệ XML, cơ sở dữ liệu SQLite. Phần mềm ‘Du lịch Nha Trang bằng xe buýt’ sẽ cung cấp thông tin địa điểm du lịch chia thành các nhóm: ăn uống, vui chơi, tham quan … Cung cấp chức năng quản lý thông tin các địa điểm du lịch, cho phép người sử dụng thêm thông tin các vị trí của mình chưa có trong dữ liệu, cung cấp thông tin các tuyến và trạm xe buýt, hiển thị toàn bộ thông tin trên bảng đồ Google Map, lấy vị trí hiện tại trên bản đồ và chức năng tìm đường đi. Vì thời gian cộng với khả năng của bản thân có hạn và đây là một lĩnh vực khá mới mẻ nên chương trình chắc chắc sẽ còn nhiều thiếu sót. Vì vậy tôi mong sẽ nhận được nhiều góp ý từ phía thầy cô để chương trình có thể hoàn thiện thêm. Cuối cùng tôi xin cảm ơn thầy Trần Minh Văn đã lo lắng và giúp đỡ em trong suốt quá trình thực hiện đề tài. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 6 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương I: Giới thiệu I.1 Du lịch Nha Trang Nha Trang, một điểm du lịch hấp dẫn khách du lịch gần xa đặc bởi những bãi biển yên bình và khí hậu mát mẻ suốt bốn mùa. Đến với Nha Trang khách du lịch không những được thưởng thức vô vàn cảnh đẹp thiên nhiên mà còn được tìm hiểu về văn hóa cả truyền thông lẫn hiện đại. Trong khoảng 20 năm qua, du lịch Nha Trang đã phát triển khá toàn diện về cơ sở hạ tầng cũng như chất lượng sản phẩm du lịch. Nhờ đó, Nha Trang đã trở thành trung tâm du lịch lớn của cả nước, hàng năm thu hút lượng khách lớn đến nghỉ dưỡng. Thiên nhiên đã ưu đãi cho Nha Trang những điều kiện tuyệt vời để phát triển du lịch, đó là vịnh Nha Trang - một trong những vịnh đẹp nhất thế giới, thời tiết ấm áp quanh năm… Vùng đất này còn có nhiều trầm tích văn hóa gắn liền với 2 nền hóa Việt - Chăm, những lễ hội độc đáo của cư dân miền biển gắn với con người hiền hòa, mến khách… Những chuyên gia du lịch thế giới đánh giá, với những tiềm năng vốn có, Nha Trang hội tụ đầy đủ các lợi thế để trở thành một trung tâm du lịch biển của thế giới như Bali (Indonesia), Phuket (Thái Lan). Cơ sở hạ tầng du lịch Nha Trang phát triển rất nhanh, cho đến nay Nha Trang đã có gần 500 cơ sở lưu trú với hơn 12.000 phòng; trong đó, khách sạn từ 3 đến 5 sao có gần 3.800 phòng. Các thương hiệu khách sạn nổi tiếng của thế giới như: Sheraton, Novotel, Marriot… đã có mặt ở Nha Trang. Thành phố biển cũng đã có những khu du lịch lớn như: Tổ hợp du lịch giải trí Vinpearl, Khu du lịch Diamond bay Nha Trang, Khu nghỉ mát Ana Mandara, Khu du lịch Hòn Tằm. Bên cạnh đó số lượng các nhà hàng, quán bar quán cà phê, khu mua sắm ngày càng tăng phục vụ nhu cầu khách du lịch trong và ngoài nước. Các sự kiện văn hóa - du lịch mang tầm quốc gia và quốc tế liên tục được tổ chức ở Nha Trang như: Các cuộc thi hoa hậu trong nước và quốc tế, chương trình Festival Biển được tổ chức 2 năm/lần (từ năm 2003)… đã góp phần quảng bá hình ảnh và từng bước khẳng định thương hiệu du lịch Nha Trang với du khách trong nước, quốc tế. Lượng khách đến nghỉ dưỡng ở Nha Trang liên tục tăng. Theo thống kê của UBND TP. Nha Trang, năm 2011, Nha Trang đón khoảng 2,073 triệu lượt khách du lịch (tăng 18,54% so với năm 2010), trong đó hơn 440.000 lượt khách quốc tế (tăng 13,5%), số ngày lưu trú bình quân của khách du lịch là 2,09 ngày/khách; tổng doanh thu du lịch và dịch vụ ước đạt 2.142,9 tỷ đồng (tăng 20,28%)… GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 7 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Nhìn tổng thể, du lịch Nha Trang đã có những bước phát triển vượt bậc. Tuy nhiên, sự phát triển của du lịch Nha Trang vẫn còn có những hạn chế cần khắc phục để hướng tới sự phát triển bền vững. Thành phố cần phải đẩy mạnh công tác xúc tiến du lịch, giới thiệu hình ảnh du lịch Nha Trang ra thị trường quốc tế với nhiều hình thức khác nhau. Hy vọng, trong tương lai, Nha Trang sẽ trở thành trung tâm du lịch biển quốc tế. I.2 Công nghệ thiết bị di động I.2.1 Di động đi tắt đón đầu trong thế giới công nghệ Công nghệ di động trong những năm gần đây đã có những bước nhảy vọt nhanh chóng cả về sức mạnh phần cứng lẫn tốc độ phổ biến của nó trong dân cư. Những chiếc điện thoại thậm chí còn phát triển nhanh hơn cả thời kỳ hoàng kim của các công nghệ trong quá khứ như ti vi, máy vi tính ... Bên cạnh đó, trong vòng 2 năm trở lại đây thì thị trường máy tính bảng cũng trở nên vô cùng sôi động. Tốc độ chiếm lĩnh 10% số người tiêu dùng của các lại công nghệ Tốc độ chiếm lĩnh 10-40% số người tiêu dùng của các lại công nghệ GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 8 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Biều đồ trên đã cho chúng ta thấy khá rõ “chặng đường phát triển” của các loại hình công nghệ. Điện thoại bàn và điện năng đã phải trải qua hơn 100 năm mới đạt tới thời điểm bão hòa trong khi đó những công nghệ không dây như: radio, truyền hình hay điện thoại di động lại có thể thâm nhập được 75% thị trường chỉ trong vòng 20 năm. Những thành tựu mà công nghệ di động đã tạo ra là không thể phủ nhận. Khi chiếc iPhone đầu tiên ra đời, kỷ nguyên của điện thoại thông minh bắt đầu phát triển mạnh mẽ và từng bước chiếm lĩnh thị trường từ 5% cho đến 40% thị phần. Đặc biệt, ở một số thị trường, sự phát triển điện thoại thông minh còn diễn ra nhanh hơn rất nhiều, đơn cử như ở Mỹ đã có hơn 2/3 số điện thoại được bán ra hiện nay là các điện thoại thông minh. Nhiều khả năng thì điện thoại thông minh sẽ chiếm lĩnh tới 75% thị trường Mỹ trong vài năm tới, trở thành công nghệ có tốc độ phổ biến nhanh nhất trong lịch sử loài người. Trong quý I năm 2012, điện thoại thông minh chiếm đến 36% tổng số điện thoại di động được bán ra, tăng 25% so với cùng kì năm trước, một tỷ lệ rất cao. Trong khi đó, máy tỉnh bảng cũng có sự phát triển nhanh chóng ở Mỹ từ khi iPad lần đầu ra mắt vào năm 2010. Các chuyên gia vẫn chưa dám khẳng định liệu nhu cầu về thiết bị này có lan rộng ở khắp nơi trên thế giới hay không. Ở các nước phương Tây có thể dễ dàng mua được một chiếc máy tính xách tay, điện thoại thông minh hay máy tính bảng nhưng ở các nước đang phát triển nó là điều cần phải cân nhắc. Nền móng cho sự phát triển của điện thoại di động chính là hệ thống mạng không dây. Theo ITU (Liên Minh Viễn Thông Quốc tế), có 90% dân số thế giới (hiện nay đã đạt gần 7 tỷ người) được bao phủ bởi mạng di động GSM, phần lớn trong số đó là truy cập thông qua mạng lưới EDGE và GPRS. Hơn thế nữa, có 45% dân số thế giới đã được biết hoặc đã từng sử dụng mạng di động 3G. Ngày nay việc triển khai Internet tốc độ cao đã trở nên phổ biến ở mọi quốc gia ngay cả những nước đang phát triển. Sự tiến bộ của mạng không dây đã thúc đẩy sự phát triển của những sản phẩm công nghệ “thông minh” như điện thoại thông minh và máy tính bảng. Với số lượng người dùng các thiết bị “thông minh” ngày càng cao sẽ tăng trưởng số lượng người dùng Internet. Không nằm ngoài số đó Việt Nam cũng không ngừng gia tăng số lượng người sử dụng Internet đặt biệt xu hướng truy cập Internet từ thiết bị di động đang bùng nổ mạnh mẽ. Tính đến thời điểm quý 4-2011, thế giới đã có 1,1 tỉ thuê bao 3G, tăng 37% so với cùng kỳ năm trước. Trong đó, Mỹ, Nhật và Trung Quốc lần lượt là ba cường quốc hàng đầu về lượng thuê bao 3G. Việt Nam đứng thứ 21 với 12 triệu thuê bao 3G, đứng sau nhóm các quốc gia phát triển, xếp trên Thụy Điển (24), Hà Lan (27) và Hi Lạp (28). GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 9 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Tiềm năng phát triển các thiết bị “thông minh ” tại Việt Nam là rất lớn. Các sản phẩm máy tính bảng điện thoại “thông minh” của các hãng công nghệ nổi tiếng hầu hết đều có mặt tại Việt Nam. Các hãng điện thoại trong nước cũng bắt đầu bán các thiết bị “thông minh” giá rẻ ra thị trường. Điện thoại thông minh ngày càng rẻ hơn cũng đang khiến nó nhanh chóng được phổ biến và tiếp cận với người dùng hơn. Và đó chỉ là vấn đề thời gian bởi ngày càng có nhiều điện thoại thông minh có mức giá phải chăng được tung ra để đáp ứng nhu cầu của cả những khách hàng có thu nhập không cao. Theo thống kê năm 2012 có 30% điện thoại được bán ra ở Việt Nam là điện thoại thông minh. Chiếc điện thoại không còn đơn thuần là thiết bị liên lạc mà nó đả trở thành một thiết bị đa chức năng phục vụ rất nhiều nhu cầu công việc và giải trí của con người. Hiện tại điện thoại thông minh đang là ngọn sóng công nghệ trên thế giới. Và Việt Nam cũng sẽ đón ngọn sóng đó chỉ tron một tương lai ngắn. “Làn sóng moblie” sẽ thay đổi cách con người làm việc, giải trí và mang lại những thách thức mới. I.2.2 Thời kỳ “hậu PC” và cơ hội cho các lập trình viên di động Thời kỳ “hậu-PC” tiêu biểu là thế hệ các thiết bị di động thông minh có khả năng chạy hệ điều hành quản lý đa nhiệm, kết nối dữ liệu tốc độ cao có thể đảm nhận hầu hết nhiệm năng của một máy tính cá nhân bình thường (PC) mà thậm chí còn nhiều điểm tiện lợi hơn. Đâu tiên phải kể đến đó là chiếc điện thoại di động của Apple – Iphone. Thiết bị điện thoại thông minh này xuất hiện vào năm 2007 khác xa các loại điện thoại truyền thống, màn hình cảm ứng rộng, không có bàn phím, chạy hệ điều hành IOS đã gây sốt trong giới công nghệ. Chiếc Iphone đầu tiên được nhắc đến như một huyền thoại công nghệ mở màng cho một trào lưu mới. Nó đã thúc đẩy thời kỳ “Hậu PC” (Post-PC) Theo Steve Jobs – Giám đốc điều hành tập đoàn Apple, các thiết bị hậu PC phải trực quan và dễ dùng hơn so với PC. Cụ thể, với chiếc máy tính bảng iPad 2 mà công ty của ông mới cho ra mắt, phần cứng và phần mềm "phải đan quyện vào nhau, chặt chẽ hơn so với cách thức trên PC". Thời kỳ “hậu PC” là thời kỳ mà những hệ thống nhúng là cốt lõi sẽ làm nên làn sóng đổi mới thức 3 sau sự phát triển của máy tính lớn và mini (mainframe và mini computer) giai đoạn 1960 - 1980, PC-Internet giai đoạn 1980 – 2000. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 10 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Đại diện tiêu biển nhất cho thời đại “hậu PC” đó là những chiếc điện thoại thông minh và máy tính bảng. Hai thiết bị đã tạo nên một làng sóng công nghệ mạnh mẽ. Các xu hướng công nghệ của thế giới đều tập trung nhiều vào những thiết bị này. Cùng với nó là sự phát triển chóng mặt của phần cứng và nhất là các phần mềm, các ứng dụng di động và hệ điều hành di động. Đầu tiên là sự xuất hiện của IOS trên thiết bị của Apple. Tiếp theo đó là sự xuất hiện của Android – hệ điều hành mã nguồn mở do Google phát triển. Sau đó nữa là WebOS của HP và Window Phone của Microsolf . Tuy nhiên IOS và Android là hai hệ điều hành phát triển mạnh nhất. Android bắt đầu nhảy vọt sau IOS nhưng nó đang có tốc độ phát triển nhanh hơn IOS. Điều quan trọng tạo nên thành công cho một hệ điều hành di động đó là các ứng dụng. Với một chiếc điện thoại thông minh bạn có thể cài đặt nhiều ứng dụng đa dạng và phong phú phục vụ phục công việc và giải trí. Một tiêu chí đánh giá một hệ điều hành này tốt hơn hệ điều hành kia là ở số lượng ứng dụng mà hệ điều hành đó có thể cung cấp chất lượng của ứng dụng. Hiện tại hệ điều hành IOS chiếm vị trí độc tôn với tổng cộng 356,577 ứng dụng. Đứng thứ 2 là Android với 256,545 ứng dụng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 11 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Android là hệ điều hành mã nguồn mở có thể sử dụng trên rất nhiều thiết bị và đang có tốc độ phát triển ứng dụng rất nhanh. Trong năm 2011, 10 xu hướng công nghệ chiến lược được các chuyên gia đánh giá có bao gồm điện toán đám mây, ứng dụng di động (điện thoại thông minh… ). Mỗi ngày có hàng triệu thiết bị đi động được bán ra đẫn đến nhu cầu về ứng dụng di động ngày càng tăng. Đây là một cơ hội lớn cho các nhà lập trình các thiết bị di động. Với các của hàng ứng dụng như AppStore, Google Play, lập trình viên hay nhóm lập trình các nhân có thể đưa các sản phẩm đưa lên để bán cho người dùng. Đây là một lợi thế lớn cho các lập trình viên lập trình trên thiết bị di động. Nhờ đó không cần phải trực thuộc một công ty lập trình đủ lớn mà sản phần của người lập trình có thể được trả tiền nếu sử dụng tốt và đáp ứng nhu cầu của người sử dụng. Nhà viết ứng dụng cá nhân cũng có thể tiết kiệm được một khoảng tiền lớn chi phí quản cáo và kênh phân phối đến cho khách hàng của mình. Cụ thể hơn ở Việt Nam, lập trình di động đang là một cơ hội rất tốt cho các lập trình viên bán ra các sản phẩm của mình. Có thể dễ dàng đưa sản phẩm của mình ra thế giới tiêu thụ và thu được tiền từ những ứng dụng tốt và độc đáo. Đối với thị trường ứng dụng trong nước, từ năm 2010 đến nay, cùng với xu thế phát triển thiết bị di động của thế giới, Việt Nam cũng có một sự phát triển vượt bật trong mảng này.Với các chợ ứng dụng của chính hãng như AppStore, Google Play nhiều người sử dụng vẫn còn vấp phải rào cảng thanh toán. Vì vậy đây là cơ hội để các lập trình viên phát triển ứng dụng tiêu thụ trong nước với các chợ ứng dụng của hãng thứ 3. Điện thoại thông minh và máy tính bảng đã góp phần thúc đẩy kỷ nguyên “hậu PC” phát triển. Và đã mở ra một cơ hội lớn cho các lập trình viên tự do chứng tỏ khả năng sáng tạo của mình. Lập trình di động là một hướng đi mới và đầy triển vọng, và là cơ hội lớn đối với nền Công nghệ thông tin ở Việt Nam. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 12 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android I.3 Mục đích thực hiện đề tài Quảng bá du lịch và cung cấp thông tin du lịch là một công việc hết sức quan trọng đối với ngành du lịch Nha Trang. Cần phải thực hiện điều đó trên rất nhiều phương tiện đặt biệt là áp dụng công nghệ mới. Có nhiều website đã được xây dựng để quản bá du lịch và cung cấp thông tin du lịch và đạt được hiệu quả tốt. Tuy nhiên với xu hướng công nghệ hiện nay thì website đã không còn là phương tiện cung cấp thông tin du lịch một cách thuận tiện nhất đối với khách du lịch. Ví dụ muốn lên tìm một điểm ăn uống, vui chơi, mua sắm ở Nha Trang khách du lịch phải tìm trước ở nhà, nguyên cứu và ghi lại thông tin địa chỉ. Hoặc trong chuyến đi có thể mang theo laptop để tra cứu thông tin, tuy nhiên thông thường rất ít người mang laptop du lịch bởi vì cồng kềnh và nặng nề, có thể sử dụng dịch vụ internet công cộng, tuy nhiên cũng khá bất tiện vì phát sinh thêm vấn đề là phải tìm thêm vị trí của dịch vụ internet công cộng, mỗi lần muốn tìm một địa điểm lại sử dụng internet công cộng. Thậm chí bằng một cách nào đó khách du lịch có được địa chỉ của địa điểm mong muốn, nếu không phải quen với đường phố Nha Trang cũng khó xác địch được vị trí đó ở đâu. Giải pháp là sử dụng một bản đồ số trên laptop nhưng bản đồ số trên laptop rất bất tiện khi mạng theo trong lúc đi đường, thêm một giải pháp nữa là bản đồ giấy. Tuy nhiên sử dụng bản đồ giấy rất khó khăn để nhận ra vị trí hiện tại. Để tìm một vị trí ăn uống, vui chơi đối với một khách du lịch Nha Trang trở thành một vấn đề phức tạp, và nhiều du khách chấp nhận việc vui chơi ở các địa điểm tour du lịch xắp xếp sẵn và chỉ đến các địa điểm thật sự nổi tiếng. Ngoài ra khách du lịch có thể hỏi lái xe taxi đưa đến các vị trí đã biết trước, tuy nhiên nếu địa điểm đó đã được biết trước. Hoặc nếu khách du lịch muốn tự đi thì sao? Để giải quyết vấn đề ví dụ ở trên trở nên đơn giản, có một giải pháp đó chính là sử dụng ứng dụng trên thiết bị di động. Với một bản đồ số Google Map, có một danh sách các địa điểm nhà hàng, khách sạn, quán cà phê … mà khách du lịch có thể đến để lựa chọn, hiển thị trực tiếp địa địa điểm đó trên bản đồ số. Với GPS, bản đồ có thể xác định đươc vị trí hiện tại và từ đó gợi ý tuyến đường ngắn nhất đến mục tiêu. Và đặt biệt thiết bị di động luôn sẵn sàng hoạt động 24/24, kích thước nhỏ gọn luôn mang theo, cùng với mạng internet 3G hay WIFI thì việc tìm một địa điểm du lịch và đi đến đó không còn gì thuận tiện hơn. Ngoài ra bản đồ số còn tích hợp bản đồ các tuyến xe buýt ở Nha Trang hiển thị toàn bộ 6 tuyến xe và các trạm xe tương ứng. Cho người dùng hình dung được tổng thể các tuyến xe và biết tuyến xe buýt nào có thể đưa đến một địa điểm nhất định. Với một số lượng địa điểm vui chơi, nhà hàng, quán bar, khách sạn, mua sắm .. ở Nha Trang nhiều như hiện nay rất cần thiết phải có một cách tìm kiếm thông tin du lịch thuận tiện nhất, đơn giản nhất, hiệu quả nhất. Để du khách đến Nha Trang có thể biết đến Nha Trang một cách trọn vẹn không chỉ ở phong cảnh thiên nhiên, khí hậu. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 13 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Tốc độ phổ biến công nghệ di động “thông minh” nhanh chóng như bây giờ sẽ mạng lại cơ hội cho các lập trình viên di động tự do thể hiện ý tưởng của mình. Làm sao cho các sản phẩm phần mềm ngày càng hữu dụng, gần gũi và phục vụ cho công việc và cuộc sống nhiều hơn. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 14 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương II: Hệ điều hành Android II.1 Giới thiệu hệ điều hành Android Android là một hệ điều hành di động dựa trên một phiên bản sửa đổi của Linux. Được phát triển vào năm 2005 với một dự án cùng tên “Android”. Như một phần chiến lược của mình để lấn sâu vào lĩnh vực di động Google Android đã mua về toàn bộ quá trình phát triển cũng như đội phát triển nó.Đây là con át chủ bài của Google để cạnh tranh thị phần hệ điều hành di động với Apple. Google Android muốn mở và miễn phí, vì vậy hầu hết các mã android được được đưa ra dưới dạng mã nguồn mở Apache License, điều này tương đương với việc bất cứ ai muốn sử dụng Android có thể làm như vậy bằng cách tải về mã nguồn android đầy đủ. Hơn nữa các nhà cung cấp (thường là những nhà phát triển phần cứng) có thể thêm phần mở rộng và tùy biến cho android để phân biệt sản phẩm của họ với sản phẩm của những người khác. Điều này đơn giản làm cho mô hình phát triển android rất hấp dẫn và do đó khơi dậy sự quan tâm của nhiều nhà cung cấp. Những nhà sản xuất coi android như một giải pháp – họ sẽ tiếp tục thiết kế phần cứng của riêng mình và sử dụng android như một hệ điều hành chính. Ưu điểm chính của việc áp dụng android là nó cung cấp một cách tiếp cận thống nhất để phát triển ứng dụng. Các nhà phát triển chỉ cần phát triển cho android và các ứng dụng của họ có thể chạy trên nhiều thiết bị khác nhau, miễn là các thiết bị được hỗ trợ bằng cách sử dụng android. Trong thế giới điện thoại thông minh ứng dụng là một phần quan trọng nhất của chuỗi thành công. Do đó các nhà sản xuất thiết bị coi Android như là hy vọng tốt nhất để thách thức sự tấn công của Apple. II.2 Những đặc trưng của hệ điều hành Android:  Application framework: cho phép sử dụng lại và thay thế các thành phần trong lập trình ứng dụng.  Dalvik virtual machine: tối ưu hóa cho thiết bị di động.  Intergrated browser: trình duyệt tích hợp, dựa trên cơ chế WebKit mã nguồn mở.  SQLite: sơ sở dữ liệu trong môi trường di động.  Media support: hỗ trợ các định dạng audio, video và hình ảnh thông dụng.  GSM Telephony: mạng điện thoại di động (phụ thuộc vào phần cứng).  Bluetooth, EDGE, 3G, và WiFi :các chuẩn kết nối dữ liệu (phụ thuộc vào phần cứng).  Camera, GPS, la bàn, và gia tốc kế: (phụ thuộc vào phần cứng).  Môi trường phát triển phong phú: bao gồm thiết bị mô phỏng, công cụ cho việc dò tìm lỗi, bộ nhớ và định hình hiệu năng và một plugin cho Eclipse IDE. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 15 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.3 Các tính năng hỗ trợ sẵn trong hệ điều hành Android Các tính năng được hổ trỡ tùy thuộc vào cấu hình phần cứng và phần mềm.  Storage: Sử dụng SQLite, một cơ sở dữ liệu quan hệ nhẹ cho việc lưu trữ dữ liệu  Connectivity: Hỗ trợ GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth (bao gồm AD2P và AVRCP), Wifi, LTE và WiMAX  Messaging: hỗ trợ cả SMS và MMS  Web browser: Dựa trên mã nguồn mở Webkit, cùng với công nghệ JavaScript V8 của Chrome  Media support: Bao gồm hỗ trợ các phương tiện truyền thông sau: H.263, H.264 (Trong 3GP hoặc MP4 container ), MPEG-4 SP, AMR, AMR-WB (3GP container), AAC, HE-AAC (MP4 hoặc 3GP container), MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF và BMP  Hardware support: Accelerometer Sensor, Camera, Digital Compass, Proximity Sensor và GPS  Multi-touch: Hỗ trợ màn hình cảm ứng đa điểm  Multi-tasking: Hỗ trợ ứng dụng đa tác vụ  Flash support: Android 2.3 hỗ trợ Flash 10.1  Tethering: Hỗ trợ kết nối internet không dây/có dây GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 16 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.4 Kiến trúc và các thành phần trong hệ điều hành Android Mô hình sau thể hiện đầy đủ kiến trúc các thành phần của hệ điều hành Android. II.4.1 Linux kernel (nhân Linux) Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và tầng dưới của phần mềm. Lớp này chứa tất cả các thiết bị mức thấp điều khiển các thành phần phần cúng khác nhau của một thiết bị Android. II.4.2 Libraries Libraries bao gồm một tập hợp các thư viện lập trình chứa mã lệnh cung cấp những tính năng và thao tác chính trên hệ điều hành. Một số các thư viện cơ bản được liệt kê dưới đây:  System C library: a BSD-derived triển khai các thư viện hệ thống ngôn ngữ C chuẩn, được nhúng vào các thiết bị dựa trên hệ điều hành Linux. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 17 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  Media Libraries – Dựa trên PacketVideo's OpenCORE; thư viện này hỗ trợ cho việc chơi nhạc, quay phim, chụp hình theo các định dạng file MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG  Surface Manager – Quản lý truy cập đến các hệ thống con hiển thị cũng như các lớp đồ họa 2D, 3D từ tầng ứng dụng.  LibWebCore – Thư viện được dùng để tạo nên thành phần webview trong Android và có thể nhúng được vào nhiều ứng dụng.  SGL – Thư viện hỗ trợ đồ hoạ 2D.  3D libraries – Thư viện đồ họa 3D.  FreeType - bitmap and vector font rendering.  SQLite – Một cơ sở dữ liệu nhỏ được dùng cho các thiết bị cầm tay có bộ nhớ hạn chế. SQLite không có quan hệ như các cơ sở dữ liệu khác. II.4.3 Android runtime: Tại cùng một tầng với Libraries, android runtime cung cấp một bộ lõi thư viện cho phép các nhà phát triển viết các ứng dụng android bằng cách sử dụng ngôn ngữ lập trình java. Android runtime cũng bao gồm các máy ảo Dalvik, cho phép mọi ứng dụng android chạy trong tiến trình riêng của mình. Dalvik là một máy ảo chuyên dụng được thiết kế đặc biệt cho android và tối ưu hóa cho các thiết bị điện thoại di động với giới hạn bộ nhớ và CPU. II.4.4 Application framework 2.4.3 Android runtime: Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa. Nhà phát triển có thể truy cập vào các API được sử dụng bởi các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các API. Đưa ra những khả năng khác nhau của hệ điều hành android vào ứng dụng để sử dụng chúng trong các ứng dụng của mình. Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm: các View (là dùng để hiển thị thông tin và để người dùng thao tác), Content Provider để chia sẻ dữ liệu giữa các ứng dụng, Resource Manager truy xuất tài nguyên, Notification Manager hiển thị các thông báo, Activity Manager quản lý chu trình sống của ứng dụng và điều hướng Activity. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 18 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.4.5 Applications: Tại lớp trên cùng sẽ là các ứng dụng cho android (như điện thoại, danh bạ, trình duyệt,…) cũng như các ứng dụng được tải về và cài đặt từ AndroidMarket hay bất lý ứng dụng nào bạn viết được tại tầng này. II.5 Các khái niệm cơ bản trong lập trình ứng dụng Android II.5.1 Activity Một activity thể hiện một giao diện đồ họa người dùng. Ví dụ một activity có thể biểu diễn một danh sách các menu item để người dùng có thể chọn và có thể hiển thị ảnh cùng với tiêu đề. Một ứng dụng gửi tin nhắn văn bản có thể có một hoạt động là hiển thị một danh sách các liên hệ để gửi tin nhắn tới, hoạt động thứ hai là viết tin nhắn tới liên hệ được chọn, các hoạt động khác nữa là xem lại tin nhắn cũ hay thay đổi cài đặt. Mặc dù chúng làm việc cùng nhau để tạo thành một giao diện người dùng, mỗi activity độc lập với những cái khác. Mỗi activity là một lớp con của lớp cơ sở Activity. Một ứng dụng có thể gồm chỉ một activity hay nhiều activity. Activity chính phải được hiển thị đầu tiên khi khởi động chương trình. Chuyển từ một activity sang activity khác bằng cách cho activity hiện thời khởi động activity kế tiếp. Mỗi activity được vẽ vào một cửa sổ trên màn hình, mặc định sẽ lấp đầy màn hình, nhưng nó có thể nhỏ hơn màn hình và nằm trên các cửa sổ khác ví dụ như activity thông báo một thông tin gì đó. Nội dung trực quan của cửa sổ được cung cấp bởi một cây phân cấp các đối tượng view dẫn xuất từ lớp View. Mỗi view điều khiển một khoảng hình chữ nhật cụ thể bên trong cửa sổ. View cha chứa và tổ chức bố cục các view con. Các view lá vẽ trong hình chữ nhật mà chúng điều khiển và đáp ứng lại các hành động người dùng trực tiếp ở khoảng trống này. Do đó, các view là nơi mà các tương tác của activity với người dùng diễn ra. Ví dụ một view có thể hiển thị một hình ảnh nhỏ và khởi tạo một hoạt động khi người dùng nhấn vào hình ảnh đó. Android có một số view đã xây dựng sẵn mà bạn có thể sử dụng – gồm có các buttons, text fields, scroll bars, menu items, check boxes … Một cây phân cấp view được đặt trong một cửa sổ của activity bằng phương thức Activity.setContentView(). Content view là đối tượng View ở gốc của cây phân cấp. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 19 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Class cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòng đời của một hoạt động. Class Activity định nghĩa các sự kiện sau đây :  onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên  onStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng  onResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng  onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt động trước đó  onStop(): Được gọi khi hoạt động không còn hiển thị với người dùng  onDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng tay hoặc bằng hệ thống để bảo tồn bộ nhớ)  onRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại một lần nữa GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 20 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Sau đây là sơ đồ các sự kiện trong vòng đời của một Activity: GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 21 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.5.2 Service Một service không có giao diện trực quan, nó chạy trên nền trong một khoảng thời gian không xác định. Ví dụ một service có thể chơi nhạc nền, hay nó nạp dữ liệu trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activity cần đến nó. Mỗi service mở rộng từ lớp cơ sở Service. Trong khi kết nối, người sử dụng có thể giao tiếp với service thông qua giao diện mà service đó trưng ra. Ví dụ như trong service chơi nhạc, giao diện này có thể cho phép người dùng pause, rewind, stop và restart lại playback. Giống như các activity và các thành phần khác khác, service chạy trong thread chính của tiến trình ứng dụng. Vì thế chúng không thể chặn những thành phần khác hay giao diện người dùng, chúng thường tạo ra các thead khác cho các nhiệm vụ hao tốn thời gian.Sơ đồ các sự kiện trong vòng đời của một service: GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 22 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.5.3 Content provider Một content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả dụng cho các ứng dụng khác. Dữ liệu có thể được lưu trữ trong hệ thống file, trong một cơ sở dữ liệu SQLite, hay trong một cách khác nào đó. Content provider mở rộng lớp cơ sở ContentProvider để cài đặt một tập các chuẩn các phương thức cho phép các ứng dụng khác đạt được và lưu trữ dữ liệu của kiểu mà nó điều khiển. Tuy nhiên, các ứng dụng không gọi trực tiếp các phương thức này, chúng sử dụng một đối tượng ContentResolver và gọi các phương thức của nó. Một ContentResolver có thể nói chuyện với bất cứ content provider nào, chúng cộng tác với provider để quản lý giao tiếp liên tiến trình. II.5.4 Broadcast Receive Một Broadcast Rreceiver là một thành phần không làm gì ngoài việc nhận và đáp lại các thông báo broadcast. Nhiều broadcast khởi đầu trong mã hệ thống - ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳng hạn để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng chúng. Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo nào mà nó cho là quan trọng. Tất cả các receiver mở rộng từ lớp cơ sở BroadcastReceiver. Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể sử dụng NotificationManager để cảnh báo người dùng. Notifications có thể lấy sự chú ý của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra âm thanh, vân vân. Chúng thường lấy một biểu tượng bền vững trong thanh trạng thái, cái mà người dùng có thể mở để lấy thông điệp. II.5.5 View Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối tượng View và ViewGroup. Có nhiều kiểu View và ViewGroup. Mỗi một kiểu là một con của class View và tất cả các kiểu đó được gọi là các Widget. Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thể hiện hết ở trong đối tượng View. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 23 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình dưới. Một màn hình là một tập hợp các Layout và các widget được bố trí có thứ tự. Để thể hiện một màn hình thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao diện từ file XML lên để phân tích thành mã bytecode. II.5.6. Intent Là cầu nối giữa các Activity: ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau. Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng như truyền các dữ liệu cần thiết tới một Activity khác. Điều này cũng giống như việc di chuyển qua lại giữa các Forms trong lập trình Windows Form. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 24 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android II.6 Các thành phần trong một project ứng dụng Android II.6.1. AndroidManifest.xml Trong bất kì một dự án Android nào khi tạo ra đều có một file AndroidManifest.xml, file này được dùng để định nghĩa các màn hình sử dụng, các quyền cũng như các giao diện cho ứng dụng. Đồng thời nó cũng chứa thông tin về phiên bản SDK cũng như màn hình chính sẽ chạy đầu tiên. Ví dụ file manifest: File này được tự động sinh ra khi tạo một dự án Android. Trong file manifest bao giờ cũng có 3 thành phần chính đó là: application, permission và version. Application: chứa các giá trị định nghĩa cho một ứng dụng Android như icon,tên ứng dụng, chế độ hiển thị giao diện…Ngoài ra cần phải khai báo các Activity và Service có trong chương trình tại đây. Permission: bao gồm các thuộc tính chỉ định quyền truy xuất và sử dụng tài nguyên của ứng dụng. Khi cần sử dụng một loại tài nguyên nào đó thì trong file manifest của ứng dụng cần phải khai báo các quyền truy xuất tương ứng GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 25 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android SDK version: Xác định phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử dụng tương ứng với một phiên bản hệ điều hành Android mà ứng dụng có thể tương thích. II.6.2. File R.java File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng dụng và các tài nguyên hình ảnh.Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào xảy xa làm thay đổi các thuộc tính trong ứng dụng. Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả quá trình xây dựng ứng dụng. II.6.3 Thư mục src Là vị trí chứa gói các class trong ứng dụng. Các class có thể là các một Activity hoặc Service hoặc các lớp chức năng nào đó được viết bằng ngôn ngữ Java dựa trên API được cung cấp sẵn của Android. Cần phải có ít nhất một Activity và khai báo là Activity chính để chương trình có thể chạy được. II.6.4 Thư mục rec Thư mục chứa tài nguyên ứng dụng. Thư mục này bao gồm 5 thư mục con là: drawable – hdpi, drawable – mdpi, drawable – ldpi,layout,values. Drawable – hdpi, drawable – mdpi, drawable – ldpi là ba thư mục dùng để chứa các hình ảnh được sử dụng trong quá trình thiết kế giao diện ứng dụng, bao gồm cả icon của ứng dụng. 3 thư mục tương ứng với hình ảnh sẽ được sử dụng ở ba độ phân giải khác nhau lần lược là: cao, trung bình, thấp. Điều này giúp các nhà lập trình có thể thiết kế giao diện ứng dụng phù hợp với nhiều độ phân giải màn hình tương thích với nhiều lại thiết bị. Thư mục layout chứa các file xml dùng để khai báo và thiết kế giao diện cho một Activity hay một thành phần điều khiển con trong ứng dụng Android. Thư mục values gồm các file xml chứa các giá trị chuỗi, mã màu … Giúp người lập trình có thể dễ dàng thay đổi những giá trị này trong ứng dụng một cách nhanh chóng mà khôn cần phải sửa trong code của ứng dụng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 26 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương III: Công nghệ XML và Webservice III.1 Công nghệ XML III.1.1 Lịch sử ra đời chuẩn XML, XML là gì? XML (viết tắt từ tiếng Anh eXtensible Markup Language, “Ngôn ngữ Đánh dấu Mở rộng”) là ngôn ngữ đánh dấu do W3C đề nghị. Mục đích chính của XML là đơn giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet. XML là một ngôn ngữ đánh dấu tương đối mới vì nó là một subset (một phần nhỏ hơn) của và đến từ (derived from) một ngôn ngữ đánh dấu ra đời trước tên là Standard Generalized Markup Language (SGML). Ngôn ngữ HTML cũng dựa vào SGML, thật ra nó là một áp dụng của SGML. SGML được phát minh bởi Ed Mosher, Ray Lorie và Charles F. Goldfarb của nhóm IBM research vào năm 1969, khi con người đặt chân lên mặt trăng. Lúc đầu nó có tên là Generalized Markup Language (GML), và được thiết kế để dùng làm metalanguage, một ngôn ngữ được dùng để diễn tả các ngôn ngữ khác - văn phạm, ngữ vựng của chúng ,.v.v.. Năm 1986, SGML được cơ quan ISO (International Standard Organisation) thu nhận (adopted) làm tiêu chuẩn để lưu trữ và trao đổi dữ liệu. Khi Tim Berners-Lee triển khai HyperText Markup Language - HTML để dùng cho các trang Web hồi đầu thập niên 1990, ông ta cứ nhắc nhở rằng HTML là một áp dụng của SGML. Vì SGML rất rắc rối, và HTML có nhiều giới hạn nên năm 1996 tổ chức W3C thiết kế XML. XML version 1.0 được định nghĩa trong hồ sơ February 1998 W3C Recommendation, giống như một Internet Request for Comments (RFC), là một "tiêu chuẩn". III.1.2 Cấu trúc của file XML và tài liệu XML Cấu trúc file xml: Document Prolog: lưu trữ metadata của XML gồm 2 phần đó là khai báo XML và khai báo kiểu dữ liệu trong XML. Phần khai báo XML (XML declaration) bao gồm các thông tin về version của XML, charset, encoding…. Phần khai báo kiểu dữ liệu trong XML (DTD) dùng để khai báo cấu trúc của các thẻ dùng trong XML. Root element hay còn gọi là Document Element: chứa tất cả các phần tử và nội dung của nó. 1 phần tử của XML phải có thẻ mở và thẻ đóng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 27 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Dưới đây là sơ đồ cấu trúc của tài liệu XML Cấu trúc tài liệu xml: Gồm có hai phần đó là cấu trúc logic và cấu trúc vật lý .  Cấu trúc logic: Định nghĩa các phần tử, các thuộc tính, kiểu dữ liệu  Cấu trúc vật lý:chứa dữ liệu và các phần tử chứa dữ liệu như text, hình ảnh, media … III.1.3 Đặc điểm của XML  XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp dụng một cấu trúc kiểu cây cho thông tin đó.  Đơn vị cơ sở của XML là các ký tự theo định nghĩa của Universal Character Set (Bộ ký tự toàn cầu).  Các tệp XML có thể dùng cho nhiều loại dữ liệu đa phương tiện. RFC3023 định nghĩa các loại "application/xml" và "text/xml", với ý rằng dữ liệu được biểu diễn bằng XML mà không nói gì đến ngữ nghĩa của dữ liệu.  XML được dùng kết hợp với HTML, rất hữu ích cho việc trao đổi dữ liệu và tạo ra tùy biến cho các tags. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 28 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android III.1.4 XML và HTML XML HTML Content Markup Language Presenttation Markup Language Cho phép người sử dụng định nghĩa Các phần tử được định nghĩa sẵn các phần tử. Kiểm tra tính hợp lệ Hầu như không bắt lỗi Cho phép trao đổi dữ liệu giữa các ứng Chỉ được thiết kế để trình diễn dụng Cần phải được định nghĩa một cách Không bắt buộc chặt chẽ Các phần tử phải được đóng Các phần tử rổng không cần đóng III.1.5 Ngôn ngữ đặt tả cấu trúc DTD (Document Type Definition) Một DTD xác định ngữ pháp của một tài liệu XML, DTD định nghĩa cấu trúc tài liệu XML bằng một tập những qui tắc của phần tử (elements) và thuộc tính (attributes). Ví dụ: ]> GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 29 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android XML Schema XML Schema mô tả cấu trúc của tài liệu XML, thay thế cho DTD. XML Schema mô tả:  Các phần tử và thuộc tính trong tài liệu XML.  Thứ tự và số lượng các phần tử con.  Các kiểu dữ liệu của phần tử và thuộc tính. Ví dụ: III.1.6 Ưu điểm của XML     Dễ dàng xử lý, chuyển tải và trao đổi dữ liệu. Mô tả dữ liệu và cách thể hiện dữ liệu thông qua các thẻ. Tổ chức dữ liệu và cấu trúc phân cấp Dữ liệu độc lập là ưu điểm chính của XML. Do XML chỉ dùng để mô tả dữ liệu bằng dạng text nên tất cả các chương trình đều có thể đọc được XML.  Dễ dàng để tạo 1 file XML  Lưu trữ cấu hình cho web site  Sử dụng cho phương thức Remote Procedure Calls (RPC) phục vụ web service GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 30 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android III.2 Webservice III.2.1 Webservice là gì ? Webservice(dịch vụ web) là sự kết hợp các máy tính cá nhân với các thiết bị khác, các cơ sở dữ liệu và các mạng máy tính để tạo thành một cơ cấu tính toán ảo mà người sử dụng có thể làm việc thông qua các trình duyệt mạng hoặc ứng dụng có kết nối mạng. Webservice Một web service có thể được mô tả như là một chức năng có thể duy trì trên web, và có thể được gọi bởi bất kỳ ứng dụng nào hay dịch vụ nào. Nó có thể là một business application hay một system function. Bản thân các dịch vụ này sẽ chạy trên các máy chủ trên nền Internet chứ không phải là các máy tính cá nhân, do vậy có thể chuyển các chức nǎng từ máy tính cá nhân lên Internet. Người sử dụng có thể làm việc với các dịch vụ thông qua bất kỳ loại máy hay phần mềm nào có hỗ trợ web service và có truy cập internet, kể cả các thiết bị cầm tay. Do đó các web service sẽ làm internet biến đổi thành một nơi làm việc chứ không phải là một phương tiện để xem và tải nội dung. Điều này cũng sẽ đưa các dữ liệu và các ứng dụng từ máy tính cá nhân tới các máy phục vụ của một nhà cung cấp dịch vụ web. Các máy phục vụ này cũng cần trở thành nguồn cung cấp cho người sử dụng cả về độ an toàn, độ riêng tư và khả nǎng truy nhập. Các máy phục vụ ứng dụng sẽ là một phần quan trọng của các web service bởi vì thường thì các máy chủ này thực hiện các hoạt động ứng dụng phức tạp dựa trên sự chuyển giao giữa người sử dụng và các chương trình kinh doanh hay các cơ sở dữ liệu của một tổ chức nào đó. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 31 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Một số nhà quan sát ngành công nghiệp này cho rằng web service không thực sự là một khái niệm mới và phản ánh một phần không nhỏ khái niệm mạng máy tính vốn đã trở nên quen thuộc trong nhiều nǎm qua. Web service chủ yếu dựa trên một lời gọi thủ tục từ xa không chặt chẽ mà có thể thay thế các lời gọi thủ tục từ xa chặt chẽ, đòi hỏi các kết nối API phù hợp đang phổ biến hiện nay. Dịch vụ web sử dụng XML chứ không phải C hay C++, để gọi các quy trình. Tuy nhiên các chuyên gia khác lại cho rằng web service là một dạng API dựa trên phần mềm trung gian, có sử dụng XML để tạo phần giao diện trên nền Java 2 (J2EE) hay các server ứng dụng .NET. Giống như các phần mềm trung gian, web service sẽ kết nối server ứng dụng với các chương trình khách hàng. III.2.2 Một số đặt điểm cơ bản của webservice Một webservice có thể được truy cập thông qua web. Một webservice có giao diện dịch vụ. Giao diện này giúp cho webservice có thể được gọi bởi bất kỳ một ứng dụng nào hay bởi webservice nào khác. Giao diện dịch vụ là một tài liệu XML. Bởi vì XML có thể thể hiện rõ vai trò trong công nghệ trao đổi thông tin toàn cục (global exchange technology) được chấp nhận bởi phần lớn công nghệ hiện nay. Các Dịch vụ web dùng giao thức tiêu chuẩn web để giao tiếp, không như COM, RMI hay CORBA. XML được dùng để trao đổi thông tin giữa các chương trình ứng dụng và dịch vụ. III.2.3 Phân loại webservice Service có hai loại : Dịch vụ ứng dụng và dịch vụ hệ thống (Application and System Service ). Một Application Service thể hiện một hành động của user như duyệt thư email, hay kiểm tra tỷ số hối đoái… Một System Service thể hiện yêu cầu của kiến trúc hệ thống và sự quản lý như bảo mật , lưu trữ và chịu lỗi, quản lý transaction hay messaging. Một dịch vụ có hai đặc điểm chính : Interface và Registration. Sử dụng Interface, một dịch vụ có thể được gọi từ một chương trình khác. Một service được đăng ký trong một registry. Các ví dụ về công nghệ liên quan đến hệ thống hướng dịch vụ (service-oriented system) là Remote Method Invocation (RMI), Jini, CORBA và Distributed Computing Environment (DCE). Một vấn đề tổng quát với service hệ thống là các client cần thiết chỉ rõ giao thức để yêu cầu các dịch vụ từ các hệ thống. Web service là một hệ thống phát triển từ hệ thống hướng dịch vụ , dùng giao tiếp tổng quát để chuyển tải các thông điệp giữa các hệ thống. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 32 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Một tập hợp các modular service có thể được cung cấp bởi cùng công ty hay bởi nhiều công ty khác nhau được mix và match lại để trở thành một business process. Lấy ví dụ đơn giản dễ nhận thấy nhất về webservice là hệ thống .NET passport của Hotmail. Vấn đề đăng nhập trở nên đơn giản giữa các web site nếu giải quyết bằng webservice. Web site tương tác với các site khác thông qua Web Service, điều này cho phép thông tin người dùng được chia xẻ giữa các chúng. Một user khi điền thông tin đăng nhập chỉ một lần duy nhất, và có thể dùng nó cho dịch vụ email, và dùng cùng login user cùng mật khẩu trong một “accounting package service site”. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 33 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương IV: Google Map và Google Maps API Web Services IV.1 Google Map IV.1.1 Giới thiệu Google Map Google Maps (thời gian trước còn gọi là Google Local) là một dịch vụ ứng dụng và công nghệ bản đồ trực tuyến trên web miễn phí được cung cấp bởi Google và hỗ trợ nhiều dịch vụ dựa vào bản đồ như Google Ride Finder và một số có thể dùng để nhúng vào các trang web của bên thứ ba thông qua Google Maps API. Nó cho phép thấy bản đồ đường sá, đường đi cho xe đạp, cho người đi bộ và xe hơi, và những địa điểm kinh doanh trong khu vực cũng như khắp nơi trên thế giới. Một sản phẩm liên quan, đó là Google Earth, một ứng dụng độc lập dành cho Microsoft Windows, Mac OS X và Linux cho phép xem các tính năng mở rộng khác. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 34 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Google Map là một trong những ứng dụng phổ biến nhất của Google hiện nay. Khi mà việc sử dụng bản đồ giấy đã trở lên lỗi thời thì dịch vụ tìm kiếm bản đồ số, bản đồ vệ tinh, hệ thống GPS là hết sức cần thiết. Giờ đây chúng ta có thể dễ dàng truy cập vào Google Map dù ở bất cứ nơi đâu để tra cứu địa chỉ hoặc sử dụng hệ thống GPS cũng rất phổ biến. Đặt biệt khả năng tích hợp dịch vụ bản đồ Google Map là rất cần thiết và quan trọng. IV.1.2 Google Maps for Mobile Năm 2006, Google đã giới thiệu một ứng dụng Java có tên là Google Maps for Mobile. Mục đích để chạy trên bất kỳ thiết bị di động nào dựa có cũng cấp nền tảng Java. Rất nhiều tính năng chính của phiên bảng Google Maps trên web có mặt trong ứng dụng. Ngày 28 tháng 11, 2007, Google Maps for Mobile 2.0 được phát hành. Nó cung cấp một dịch vụ xác định vị trí giống như GPS nhưng vẫn hoạt động nếu thành phần GPS trong phần cứng không có hoạt không hoạt động. Vị trí hiện tại chỉ được bắt nếu thành phần GPS sẵn sàng hoạt động. Tính năng định vị không cần thành phần GPS dựa vào phần mềm xác định trạm phát sóng không dây và trạm BTS gần nhất. Sau đó phần mềm sẽ tìm trong cơ sở dữ liệu của nó vị trí của các điểm phát sóng WiFi và các trạm BTS mà nó biết được. Bằng cách xác định cường độ tín hiệu từ nhiều trạm phát sóng WiFi và BTS đã biết vị trí, phần mềm sẽ tính toán ra được vị trí hiện tại của người dùng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 35 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Thứ tự ưu tiên tính toán vị trí như sau:  Thiết bị bắt vị trí GPS  Trạm WiFi  Trạm BTS Tính đến ngày 15 tháng 12 năm 2008, dịch vụ này có sẵn cho các nền tảng sau đây:  Android  iOS (iPhone, iPod Touch, iPad)  PlayStation Vita 3G Models  Windows Mobile (không hỗ trợ Windows Phone 7 từ 21/12/2011)  Nokia/Symbian (S60 3rd & 5th)  Symbian OS (UIQ v3)  BlackBerry  Điện thoại hỗ trợ Java-Platform (từ MIDP 2.0 trở lên)  Palm OS (Centro và mới hơn)  Palm webOS (Palm Pre và Palm Pixi) Ngày 4 tháng 11, năm 2009, Google Maps Navigation đã được phát hành trên hệ điều hành Google Android 2.0 Eclair trên điện thoại Motorola Droid, thêm chức năng ra lệnh bằng giọng nói, báo cáo lưu lượng truy cập, và hỗ trợ xem đường phố. Phát hành ban đầu được giới hạn ở Hoa Kỳ. Dịch vụ này đã được đưa ra tại Anh vào ngày 20 tháng 4 năm 2010 và trong phần lớn của lục địa châu Âu vào ngày 09 tháng 6 2010 (bao gồm Áo, Bỉ, Canada, Đan Mạch, Pháp, Đức, Ý, Hà Lan, Bồ Đào Nha, Tây Ban Nha, và Thụy Sĩ ). Trong tháng 3 năm 2011, Phó Chủ tịch Dịch vụ Location Service, Marissa Mayer thông báo mà Google đã cung cấp dịch vụ bản đồ đến 150 triệu người sử dụng. Trong tháng sáu năm 2012, Apple thông báo rằng họ sẽ loại bỏ Google Maps trên IOS 6 và sẽ được thay thế bằng dịch vụ bản đồ của riêng của họ. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 36 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android IV.2 Google Maps API Web Services IV.2.1 Giới thiệu Google Maps API Web Services Google Maps API Web Services là một tập các giao diện HTTP cung cấp thông tin địa lý cho ứng dụng. Google Maps API Web Services bao gồm:  Directions API  Distance Matrix API  Elevation API  Geocoding API  Places API IV.2.2 Sử dụng Google Maps API Web Services Google Maps API cung cấp các dịch vụ như là các giao diện phục vụ cho việc yêu cầu dữ liệu địa lý và sử dụng dữ liệu đó trong ứng dụng của nhà phát triền. Các dịch vụ này được thiết kế để sử dụng với một ứng dụng bản đồ. Các dịch vụ này sử dụng HTTP request, thiết lập các chuỗi URL request để gởi yêu cầu cho web service. Thông thường, web service sẽ trả về kết quả là tập tin JSON hoặc XML. Phân tích cú pháp kết quả trả về để sử dụng. URL request có dạng: http://maps.googleapis.com/maps/api/service/output?parameters  service: loại dịch vụ.  output: kết quả ở dạng tập tin JSON hay XML.  parameters: các tham số phù hợp. SSL Access Có thể truy cập Google Maps API Web Services thông qua HTTPS. Truy cập Maps API Web Service thông qua HTTPS được khuyến khích sử dụng nếu ứng dụng có chứa những dữ liệu nhạy cảm như tọa độ người dùng. https://maps.googleapis.com/maps/api/service/output?parameters GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 37 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Theo dõi sử dụng với tham số sensor Sử dụng Google Maps API yêu cầu nhà phát triển phải chỉ ra rằng ứng dụng có sử dụng một cảm biến (ví dụ cảm biến GPS) để xác định vị trí người dùng trong bất cứ yêu cầu nào cho service. Nó khá quan trọng cho điện thoại. Nếu ứng dụng Google Map API sử dụng bất cứ dạng cảm biến để xác định vị trí của thiết bị phải thiết lập giá trị của tham số sensor=true. Trong trường hợp ứng dụng không sử dụng cảm biến thì vẫn phải gán giá trị sensor=false. Xây dựng chuỗi URL request hợp lệ Một chuỗi URL có thể chứa những ký tự đặt biệt. Ví dụ trong trình duyệt web, chuỗi URL được nhập vào thanh địa chỉ chứa những ký tự đặt biệt (ví dụ chứa tiếng Việt có dấu), trình duyệt phải tự chuyển sang kiểu mã hóa khác trước khi gởi đi. Một số trình duyệt có thể nhận những chuỗi ký tự ở dạng mã hóa UTF-8. Quá trình chuyển kiểu mã hóa ký tự đó gọi là URL-encoding. Cần phải dịch những ký tự đặt biệt bởi vì tất cả các URL cần phải phù hợp với cú pháp đã được qui định ở W3 Uniform Resource Identifier. Có nghĩa là URL chỉ chứa các ký tự thuộc một tập hợp các ký tự ASCII. Các ký tự được sử dụng trong chuỗi URL được qui định trong bảng sau: Nhóm Ký tự Alphanumeric a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H IJKLMNOPQRSTUVWXYZ0123456789 Unreserved -_.~ Reserved !*'();:@&=+$,/?%#[] Việc chuỗi URL chỉ chứa các ký tự ASCII đã được qui định dẫn đến 2 tình huống: Ký tự muốn đưa vào URL không nằm trong tập ký tự được cho phép (ví dụ tiếng Việt có dấu)cần được mã hóa bằng các ký tự trên. Ký tự khoảng cách thường được thay thế bằng ký tự “+”. Ký tự muốn sử dụng theo cách thông thường nằm trong nhóm ký tự dành riêng (Ví dụ ký tự “?”). Nếu muốn sử dụng ký tự dành riêng phải mã hóa. Ký tự được mã hóa bằng cách sử dụng ký tự “%” theo sau là hai ký tự chứa giá trị hex đại diện cho ký tự hệ UTF-8. Giới hạn của chuối URL là 2048 ký tự. Hầu hết các URL request ít khi đạt đến ngưỡng này, tuy nhiên vẫn phải cẩn thận để tránh trường hợp web service không trả lời vì chuỗi URL quá dài. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 38 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Processing Responses Kết quả trả về của Google Direction API khá dễ hiểu nhưng lại ít thân thiện với người sử dụng. Khi giởi yêu cầu và nhận được kết quả, tốt nhất là không hiển thị tất cả những gì nhận được mà chỉ cần trích xuất một số thông tin phù hợp. Tóm lại là cần phải phân tích cú pháp kết quả nhận được và chỉ trích xuất một số thông tin có ích. Phân tích cú pháp kết quả nhận được phụ thuộc vào loại tập tin trả về là XML hay JSON và có thể sử dụng nhiều kỹ thuật và ngôn ngữ lập trình khác nhau. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 39 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android IV.3 Google Geocoding API IV.3.1 Mã hóa địa lý là gì? Mã hóa địa lý là tiến trình chuyển địa chỉ (ví dụ: số 2, đường Nguyễn Đình Chiểu, Vĩnh Thọ, Nha Trang)sang tọa độ địa lý (ví dụ: kinh độ 12.268491, vĩ độ 109.202148) để đánh dấu trên bảng đồ. Google Geocoding API cung cấp một phương thức trực tiếp để truy cập bộ mã hóa địa lý thông qua giao thức HTTP. Ngoài ra dịch vụ Google Geocoding API còn cho phép giải mã từ tọa độ sang địa chỉ. IV.3.2 Giới hạn sử dụng Google Geocoding API giới hạn ở 2500 truy vấn mỗi ngày. Nếu trả phí con số này tăng lên 100000. Các giới hạn này được đặt ra để ngăn chặn sự lạm dụng dịch vụ. Nếu vượt quá giới hạn này ứng dụng sẽ không thể truy cập được sau 24 giờ, nếu tiếp tục vượt ở 24 giờ tiếp theo thì dịch dụ Geocoding API có thể sẽ chặn ứng dụng. Sử dụng Geocoding API cần phải kết hợp với một bản đồ Google Map dùng để hiển thị các địa điểm một cách trực quan trên bản đồ. IV.3.3 Geocoding API request Định dạng chuỗi request URL Chuỗi request URL có dạng như sau: http://maps.googleapis.com/maps/api/geocode/output?parameters HTTPS được khuyến cáo sử dụng cho các ứng dụng có dùng những dữ liệu nhạy cảm của người dùng: https://maps.googleapis.com/maps/api/geocode/output?parameters Output có thể là xml hoặc json:  json (khuyến cáo): kết quả trả về tập tin JSON (JavaScript Object Notation). Loại tập tin này phù hợp hơn cho các ứng dụng bản đồ trên nền web.  xml: kết quả trả về tập tim XML. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 40 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Tham số của chuỗi request URL Một số tham số là bắt buộc phải được gán giá trị, một số là tùy chọn. Trong một chuỗi URL hợp chuẩn mỗi tham số được phân cách bằng ký tự (&).  address (bắt buộc): địa chỉ muốn mã hóa địa lý. HOẶC  latlng (bắt buộc): Giá trị kinh độ - vĩ độ của điểm muốn lấy địa chỉ gần nhất.  bounds (tùy chọn): Hình chữ nhật mà kết quả mã hóa địa lý sẽ hiện lên nổi bật.  region (tùy chọn): mã vùng, dùng hệ thống tên miền quốc gia.  language (tùy chọn): thiết lập ngôn ngữ sẽ trả về trong kết quả.  sensor (bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có cảm biến vị trí hay không. True hoặc false. Chỉ có thể dùng một trong hai tham số address hoặc latlng để tìm. Nếu tham số latlng được sử dụng thì quá trình này tạm gọi là giải mã địa lý. IV.3.4 Kết quả mã hóa địa lý Geocoding API sẽ trả về một rong hai loại tập tin là JSON hoặc XML. Trong ví dụ này sẽ yêu cầu Geocoding API mã hóa địa lý địa chỉ “ số 6, đường Biệt Thự, Lộc Thọ, Nha Trang” Chuỗi request URL: http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+P arkway,+Mountain+View,+CA&sensor= false Kết quả trả về ở định dạng JSON: { "results" : [ { "address_components" : [ { "long_name" : "6", "short_name" : "6", "types" : [ "street_number" ] }, { "long_name" : "Biệt Thự", "short_name" : "Biệt Thự", "types" : [ "route" ] }, { GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 41 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android "long_name" : "Lộc Thọ", "short_name" : "Lộc Thọ", "types" : [ "sublocality", "political" ] }, { "long_name" : "Nha Trang", "short_name" : "Nha Trang", "types" : [ "locality", "political" ] }, { "long_name" : "Khanh Hoa", "short_name" : "Khanh Hoa", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "Vietnam", "short_name" : "VN", "types" : [ "country", "political" ] } ], "formatted_address" : "6 Biệt Thự, Lộc Thọ, Nha Trang, Khanh Hoa province, Vietnam", "geometry" : { "location" : { "lat" : 12.23569550, "lng" : 109.19563650 }, "location_type" : "ROOFTOP", "viewport" : { "northeast" : { "lat" : 12.23704448029150, "lng" : 109.1969854802915 }, "southwest" : { "lat" : 12.23434651970850, "lng" : 109.1942875197085 } } }, "types" : [ "street_address" ] } ], "status" : "OK" } GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 42 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Kết quả trả về ở định dạng XML: OK street_address 6 Biệt Thự, Lộc Thọ, Nha Trang, Khanh Hoa province, Vietnam 6 6 street_number Biệt Thự Biệt Thự route Lộc Thọ Lộc Thọ sublocality political Nha Trang Nha Trang locality political Khanh Hoa Khanh Hoa administrative_area_level_1 political Vietnam VN country political GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 43 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android 12.2356955 109.1956365 ROOFTOP 12.2343465 109.1942875 12.2370445 109.1969855 Cấu trúc của kết quả trả về Cấu trúc tập tin rả về có hai phần tử gốc:  status: thông báo trạng thái của kết quả.  result: chứa một tập thông tin kết quả. Thông thường chỉ có một phần tử result trả về trong kết quả, tuy nhiên Geocoding API có thể trả về nhiều thẻ result hơn nếu truy vấn địa chỉ không rõ ràng. Kết quả trả về cần phải phân tích cú pháp để trích xuất thông tin cần thiết. STATUS  OK: kết quả trả về bình thường.  ZERO_RESULTS: địa chỉ không tồn tại hoặc gí trị kinh độ - vĩ độ không đúng.  OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong một khoảng thời gian.  REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Distance Matrix API chặn.  INVALID_REQUEST: thông báo chuỗi request URL không hợp lệ. RESULT  type[]: Một tập thẻ type cho biết kiểu của kết quả trả về. Chứa một hay nhiều kiểu của địa danh, ví dụ khi mã hóa địa lý Nha Trang sẽ trả về hai giá trị type là political và locality.  formatted_address:là địa chỉ bằng chữ. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 44 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  address_component[]: chứa một mảng các thành phần địa lý. Ví dụ Nha Trang là một thành phần, Khánh Hòa là một thành phần. Mỗi thẻ address_component chứa: o type[]: kiểu của thành phần địa lý. o long_name: tên đầy đủ của thành phần địa lý. o short_name: tên viết tắt của thành phần địa lý.  geometry: chứa thông tin hình học của địa điểm mã hóa địa lý. Trong thẻ geometry bao gồm các thẻ sau: o location: chứa kết quả kinh độ vĩ độ của địa điểm. Đây là thông tin chính của kết quả. o location_type: chứa thông tin bổ sung về địa điểm . Giá trị của location_type có thể là một trong danh sách sau:  ROOFTOP: cho biết kết quả trả về là chính xác đến mức đến độ chính xác đường phố.  RANGE_INTERPOLATED: cho biết kết quả nhận được bằng phương pháp nội xuy giữa hai điểm đã biết địa chỉ chính xác.  GEOMETRIC_CENTER: cho biết kết quả trả về là trung tâm của kết quả. Kết quả này nhận được khi tìm các địa chỉ dạng vùng (tỉnh, thành phố) hay đường phố.  APPROXIMATE: chỉ rằng kết quả trả về trả về là gần đúng. o viewport: chứa thông tin về khung nhìn của kết quả. Gồm có tọa độ điểm Tây-Bắc và Đông-Nam. Viewport dùng để hiển thị trên bản đồ cho người dùng. o bound (có thể có trả về hoặc không): chứa thông tin một hình chữ nhật bao toàn bộ kết quả trả về. Có thể khác viewport.  partial_match: thông báo Geocoding API trả về một kết quả không chính xác, chỉ tìm được một phần so với địa chỉ được yêu cầu. Có thể do lỗi chính tả của địa chỉ nhập vào, hoặc địa chỉ không đầy đủ, hay đường phố không tồn tại trong địa phương được yêu cầu. Lưu ý rằng trong kết quả trả lại các thành phần địa lý theo cấp độ có thể không nằm ở vị trí tuyệt đối mà phải xem xét kiểu của thành phần địa lý. Kiểu thành phần địa lý Một tập thẻ type cho biết kiểu của thành phần địa chỉ. Địa chỉ được mã hóa địa lý có thể có nhiều kiểu và được xem như là tag. Các giá trị của type  street_address: địa chỉ đường.  route: địa chỉ tuyến đường (chỉ có ở Mĩ).  intersection: là ngã tư lớn, giao nhau giữa hai con đường chính. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 45 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  political: địa chỉ hành chính.  country: quốc gia, là địa chỉ cấp cao nhất.  administrative_area_level_1: địa chỉ hành chính cấp 1 dưới cấp quốc gia, ở Việt Nam là tỉnh hoặc các thành phố trực thuộc Trung ương, ở Mỹ là bang.  administrative_area_level_2: địa chỉ hành chính cấp 2 dưới cấp quốc gia. Ở Việt Nam là các quận của thành phố trược thuộc Trung ương.  administrative_area_level_3: địa chỉ hành chính cấp 3 dưới cấp quốc gia. Chỉ có ở Mỹ và một số quốc gia.  colloquial_area: tên địa chỉ thường dùng.  locality: thành phố hoặc thị xã.  sublocality: địa chỉ hành chính dưới cấp locality.  neighborhood: khu phố  premise: một địa điểm được đặt tên, thường là một tòa nhà hoặc một cụm các tòa nhà được đặt chung tên.  subpremise: cấp dưới của premise, thường là một tòa nhà nằm trong một cụm được đặt tên.  postal_code: mã bưu chính.  natural_feature: indicates một địa điểm tự nhiên.  airport: sân bay.  park: công viên.  point_of_interest: một địa điểm nổi tiếng. Ngoài ra còn có các giá trị khác của type hiếm khi sử dụng:  post_box: hộp thư.  street_number: số đường.  floor: tầng nhà trong một tòa nhà.  room: phòng trong một tòa nhà. Giới hạn vùng tìm kiếm Có thể giới hạn vùng tìm kiếm địa chỉ bằng cách thêm vào tham số bound gồm có kinh độ vĩ độ - vĩ độ của góc Tây Nam và Đông Bắc của khung tìm kiếm phân tách nhau bằng ký tự (|). Ví dụ tìm đường Nguyễn Thị Minh Khai: http://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&sensor=fals e GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 46 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Rất nhiều kết quả nhận được từ chuỗi URL request này. Muốn tìm được đường Nguyễn Thị Minh Khai ở Nha Trang cần phải giới hạn vùng tìm kiếm. http://maps.googleapis.com/maps/api/geocode/json?address=Nguyễn Thị Khai&bounds=12.211684,109.166822|12.259496,109.225359&sensor=false Minh Ngoài ra có thể giới hạn vùng tìm kiếm theo quốc gia. http://maps.googleapis.com/maps/api/geocode/json?address=Toledo&sensor=false& region=es IV.3.5 Giải mã địa lý (tìm địa chỉ từ kinh độ-vĩ độ) Khái niệm mã hóa địa lý dùng để chỉ việc chuyển từ địa chỉ mà con người đọc được thành vị trí trên bảng đồ. Giải mã địa lý tức là chuyển từ vị trí trên bảng đồ thành địa chỉ mà con người đọc được. Dữ liệu đầu vào là giá trị kinh độ - vĩ độ. Ví dụ dưới đây sẽ tìm địa chỉ của vị trí có tọa độ 12.268355,109.20116. http://maps.googleapis.com/maps/api/geocode/xml?latlng=12.268554,109.202104&s ensor= false&language=vi-VN Kết quả trả về ở định dạng XML: OK street_address 2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam 2 2 street_number Đại học Nha Trang Đại học Nha Trang establishment Nguyễn Đình Chiểu Nguyễn Đình Chiểu route GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 47 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Vĩnh Thọ Vĩnh Thọ sublocality political Nha Trang Nha Trang locality political Khánh Hòa Khánh Hòa administrative_area_level_1 political Việt Nam VN country political 12.2697490 109.2022615 ROOFTOP 12.2684000 109.2009125 12.2710980 109.2036105 … GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 48 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Kết quả trả về sẽ nhiều hơn một thẻ result. Geocoding sẽ trả về bất kỳ kết quả nào tìm được. Danh sách formatted_address mà Geocodin API tìm được với tọa độ 12.268355,109.20116:  2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa, Việt Nam  Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam  Nha Trang, Khanh Hoa province, Vietnam  Khanh Hoa province, Vietnam  Vietnam Địa chỉ trả về từ cụ thể nhất đến ít cụ thể nhất. Kết quả quan trọng nhất là địa chỉ cụ thể nhất nằm trong thẻ result đầu tiên. Geocoding API sẽ mã hóa địa lý bằng cách tìm vị trí gần nhất trong một khoảng sai số nhất định, nếu không tìm thấy Geocoding API sẽ trả về kết quả rỗng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 49 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android IV.4 Google Distance Matrix API Google Distance Matrix API là một dịch vụ cung cấp khoảng cách và thời gian di chuyển cho một ma trận các điểm gốc và điểm đích. Thông tin trả về phụ thuộc vào đường đi được đề nghị giữa điểm gốc và điểm đích theo tính toán của Google Distance Matrix API, bao gồm các giá trị khoảng cách và thời gian cho mỗi cặp. Dịch vụ Google Distance Matrix API không cung cấp chi tiết đường đi. Muốn tìm thông tin chi tiết đường đi có thể sử dụng dịch dụ Google Direction API với chỉ một cặp điểm gốc và điểm đích. IV.4.1 Giới hạn sử dụng Mỗi truy vấn gởi cho Distance Matrix API bị giới hạn số lượng phần tử, cứ mỗi một điểm gốc đến một điểm đích là một phần tử. Số lượng phần tử bị giới hạn như sau:  100 phần tử cho mỗi truy vấn.  100 phần tử cho mỗi 10 giây.  2500 phần tử cho mỗi giờ. Google MAP API trả phí sẽ có giới hạn lớn hơn:  625 phần tử cho mỗi truy vấn.  1000 phần tử cho mỗi 10 giây.  100000 phần tử cho mỗi giờ. Các Distance Matrix API URL giới hạn ở 2048 ký tự trước khi mã hóa. Trong mỗi chuỗi Distance Matrix API URL sẽ có nhiều thông tin địa điểm được đưa vào vì vậy nên chú ý giới hạn này khi xây dựng chuỗi request URL. Sử dụng Distance Matrix API cần phải kết hợp với một bản đồ Google Map dùng để hiển thị các địa điểm một cách trực quan trên bản đồ. IV.4.2 Distance Matrix API request Định dạng chuỗi request URL Chuỗi request URL có dạng như sau: http://maps.googleapis.com/maps/api/distancematrix/output?parameters HTTPS được khuyến cáo sử dụng cho các ứng dụng có dùng những dữ liệu nhạy cảm của người dùng: https://maps.googleapis.com/maps/api/distancematrix/output?parameters GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 50 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Output có thể là xml hoặc json:  json (khuyến cáo): kết quả trả về tập tin JSON (JavaScript Object Notation). Loại tập tin này phù hợp hơn cho các ứng dụng bản đồ trên nền web.  xml: kết quả trả về tập tim XML. Tham số của chuỗi request URL Một số tham số là bắt buộc phải được gán giá trị, một số là tùy chọn. Trong một chuỗi URL hợp chuẩn mỗi tham số được phân cách bằng ký tự (&). Các tham số tham gia trong chuỗi URL yêu cầu dịch vụ Distance Matrix gồm có:  origins (bắt buộc): Một hay nhiều điểm gốc mà từ đó muốn tính khoảng cách đến các điểm đích. Mỗi điểm phân cách nhau bằng ký tự (|). Mỗi điểm có thể là chuỗi ký tự địa chỉ hoặc giá trị kinh độ - vĩ độ. Ví dụ: origins=89 Vân Đồn, Phước Hòa, Nha Trang|12.213802,109.195588  destinations (bắt buộc): Một hay nhiều điểm đích muốn tính khoảng cách từ các điểm gốc. Mỗi điểm phân cách nhau bằng ký tự (|). Mỗi điểm có thể là chuỗi ký tự địa chỉ hoặc giá trị kinh độ - vĩ độ. Ví dụ: origins=17 Thái Nguyên, Phước Tân, Nha Trang|12.213802,109.195588 Để xác định một điểm cần thông tịn địa chỉ hoặc kinh độ - vĩ độ. Nếu sử dụng thông tin địa chỉ, hệ thống Google Map API sẽ tự chuyển địa chỉ đó về giá trị kinh độ vĩ độ. Nếu sử dụng giá trị kinh độ - vĩ độ để xác định một điểm thì giá trị kinh độ và vĩ độ được phân cách nhau bằng ký tự (,).  mode(tùy chọn, mặc định là driving): xác định kiểu di chuyển, hiện tại hỗ trợ 3 kiểu di chuyển sau: o driving (mặc định): lái xe hơi. o walking : đi bộ, có thể qua những con đường cho người đi bộ hoặc đi trên đường tắt và vỉa hè. o bicycling: lái xe đạp, chọn đường dành riêng cho xe đạp (chỉ phổ biến ở Mỹ)  language(tùy chọn): xác định ngôn ngữ của kết quả trả về. Để trả về tiếng Việt thì language=vi-VN.  avoid (tùy chọn): chỉ ra tuyến đường sẽ phải tránh đường cao tốc hoăc tránh trạm thu phí.  units(tùy chọn): xác định đơn vị cho kết quả tính toán.  sensor(bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có cảm biến vị trí hay không. True hoặc false. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 51 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Restrictions Google Distance Matrix sẽ tính toán đường đi với những giới hạn được đặt ra. Dựa vào những giới hạn đó Google Matrix sẽ tính được đường đi thuận lợi hơn cho người dùng. Hiện tại có 2 giá trị của giới hạn được hỗ trợ đó là:  avoid=tolls : tránh trạm thu phí.  avoid=highways: tránh đường cao tốc. Unit Systems Trong kết quả Google Distance Matrix trả về có chứa thông tin độ dài tuyến đường của mỗi cặp điểm. Có thể thay đổi đơn vị khoảng cách mà hệ thống đã lựa chọn bằng cách cung cấp giá trị cho tham số units. Có hai giá trị của tham số units là:  metric: đơn vị hệ mét.  imperial : dùng hệ thống đơn vị của Anh. Lựa chọn đơn vị độ dài chỉ có hiệu lực đối với dòng ký tự mô tả khoảng cách, trá trị khoảng cách trả về ở dạng số luôn có đơn vị là mét. IV.4.3 Kết quả từ Distance Matrix API Kết quả trả về của Distance Matrix API phụ thuộc vào output là xml hay json trong cuỗi request URL. Chuỗi request URL dưới đây sẽ yêu cầu Google Distance Matrix tính toán khoảng cách với hai điểm gốc là Trường Đại học Nha Trang và Tháp Bà Bonaga, hai điểm đích là Ga Nha Trang và khách sạn Lodge. http://maps.googleapis.com/maps/api/distancematrix/xml?origins=2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang|12.265288,109.196167&destinations=42 Trần Phú, Lộc Thọ, Nha Trang, Khanh Hoa|12.248427,109.184052&mode=driving&language=vi-VN&sensor=false Google Distance Matrix sẽ tính toán 4 phần tử: Từ ĐH Nha Trang đến KS Lodge Từ ĐH Nha Trang đến Ga Nha Trang Từ Tháp Bà đến KS Lodge Từ Tháp Bà đến Ga Nha Trang Kết quả trả về sẽ gồm nhiều row, mỗi row sẽ tương ứng với một điểm gốc, mỗi row gồm nhiều element tương ứng với mỗi điểm đích. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 52 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Tập tin kết quả JSON : { "destination_addresses" : [ "42 Trần Phú, Lộc Thọ, Nha Trang, Khánh Hòa, Việt Nam", "24 Thái Nguyên, Phước Tân, Nha Trang, Khánh Hòa, Việt Nam" ], "origin_addresses" : [ "2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa, Việt Nam", "126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "4,9 km", "value" : 4933 }, "duration" : { "text" : "6 phút", "value" : 383 }, "status" : "OK" }, { "distance" : { "text" : "3,6 km", "value" : 3564 }, "duration" : { "text" : "5 phút", "value" : 309 }, "status" : "OK" } ] }, { "elements" : [ { "distance" : { "text" : "3,2 km", "value" : 3205 }, GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 53 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android "duration" : { "text" : "6 phút", "value" : 346 }, "status" : "OK" }, { "distance" : { "text" : "3,0 km", "value" : 2955 }, "duration" : { "text" : "4 phút", "value" : 265 }, "status" : "OK" } ] } ], "status" : "OK" } Để lấy được những thông tin cần thiết cần phải phân tích cú pháp tập tin JSON. Tập tin kết quả XML: OK 2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa, Nam 126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Nam 42 Trần Phú, Lộc Thọ, Nha Trang, Khánh Hòa, Nam 24 Thái Nguyên, Phước Tân, Nha Trang, Khánh Hòa, Nam OK 383 6 phút 4933 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường Việt Việt Việt Việt 54 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android 4,9 km OK 309 5 phút 3564 3,6 km OK 346 6 phút 3205 3,2 km OK 265 4 phút 2955 3,0 km GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 55 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Cấu trúc của kết quả trả về Các phần từ gốc: status: thông báo trạng thái kết quả. origin_addresses: chứa một tập các địa chỉ điểm gốc đã được API chuyển từ thông tin đầu vào. Ngôn ngữ sẽ phụ thuộc vào giá trị của language trong request URL. destination_addresses: chứa một tập các địa chỉ điểm đích đã được API chuyển từ thông tin đầu vào. Ngôn ngữ sẽ phụ thuộc vào giá trị của language trong request URL. row: chứa một tập các element. STATUS  OK: kết quả trả về bình thường.  INVALID_REQUEST: thông báo chuỗi request URL không hợp lệ.  MAX_ELEMENTS_EXCEEDED: thông báo vượt quá giới hạn các phần tử (element)  OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong một khoảng thời gian.  REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Distance Matrix API chặn.  UNKNOWN_ERROR: lỗi không xác định. ROW Khi Distance Matrix API trả về kết quả, thông tin nằm trong một tập các thẻ row. Nếu không có kết quả tìm thấy sẽ trả về tập rỗng. Các row được xắp xếp phụ thuộc vào giá trị trong chuỗi request URL. Mỗi row sẽ tương ứng với một điểm gốc, mỗi row gồm nhiều element tương ứng với mỗi điểm đích. ELEMENT Mỗi element chứa thông tin cụ thể về khoảng cách giữa hai điểm. Mỗi element chứa các phần tử sau:  status: thông báo trạng thái kết quả. Giá trị của status ở thẻ element o OK: kết quả trả về bình thường. o NOT_FOUND: một điểm nào đó không thể mã hóa địa lý để lấy kinh độ - vĩ độ. o ZERO_RESULTS: không thể tìm thấy đường đi. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 56 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  duration: ước lượng thời gian di chuyển giữa hai điểm, value có giá trị kiểu số nguyên đơn vị là giây, text mô tả bằng chữ, ngôn ngữ phụ thuộc vào giá trị của language trong request URL.  distance: khoảng cách giữa hai điểm, value có giá trị kiểu số nguyên đơn vị là mét, text mô tả bằng chữ, ngôn ngữ phụ thuộc vào giá trị của language trong request URL. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 57 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android IV.5 Google Direction API Google Direction API là dịch vụ tính toán đường đi giữa hai điểm sử dụng HTTP request. Thông tin đầu vào của điểm đầu, điểm kết thúc, điểm trung gian có thể ở dạng tên xác định địa điểm hay giá trị kinh độ và vĩ độ. Direction API có thể trả về nhiều hướng đi khác nhau sử dụng một tập các điểm trung gian. Dịch vụ này được thiết kế để tính toán đường đi giữa những vị trí xác định rõ thông tin trên bản đồ Google Map. Vì quá trình tính toán đường đi mất thời gian và phức tạp (phụ thuộc vào khoảng cách hai điểm) nên bất cứ khi nào có thể nên thực hiện công việc tính toán trước và lưu trữ tạm thời kết quả nhận được. Có thể truyền vào một số tham số giá trị địa chỉ hoặc kinh độ - vĩ độ. Nếu truyền vào địa chỉ, hệ thống Google Direction sẽ chuyển nó sang giá trị kinh độ - vĩ độ để tính toán. IV.5.1 Giới hạn sử dụng Google Direction API cho phép 2500 truy vấn mỗi ngày. Mỗi lần tính toán hướng đi có thể sử dụng tối đa 9 điểm trung gian. Nếu có nhu cầu cao hơn, có thể sử dụng Google Direction API cho doanh nghiệp với tối đa 100000 truy vấn mỗi ngày và 23 điểm trung gian ở mỗi truy vấn. Ngoài ra mỗi chuỗi URL truy vấn được giới hạn ở 2048 ký tự trước khi mã hóa. Mội số truy vấn tìm đường có thể chứa thông tin các điểm dọc theo đường đi vì vậy cần lưu ý độ dài của nó. Kết quả trả về của Google Direction API phải được sử dụng kết hợp với bản đồ Goolge Map. Tức là thông tin phải kết hợp với hiển thị đường đi trên bản đồ. Không nên sử dụng thông tin trả về mà không dùng Google Map. IV.5.2 Google Direction request Cấu trúc của chuỗi request URL: Chuỗi request URL của Google Diriection có dạng như sau: http://maps.googleapis.com/maps/api/directions/output?parameters Giá trị của output có thể là:  json (Khuyến khích sử dụng): Kết quả trả về ở dạng file JavaScript Object Notation (JSON).  xml: Kết quả trả về ở dạng file xml. Có thể sử dụng HTTPS để truy xuất Google Direction API nếu chuỗi truy xuất có bao gồm các thông tin nhạy cảm (Ví dụ: trọa độ của người dùng). https://maps.googleapis.com/maps/api/directions/output?parameters GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 58 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Các tham số của chuỗi URL request Một số tham số là bắt buộc, một số là tùy chọn. Được phân cách bằng ký tự “&”. Dưới đây là danh sách các tham số có thể tham gia vào một chuỗi Google Direction URL:  origin (bắt buộc): Địa chỉ hay giá trị kinh độ - vĩ độ của điểm mà từ đó bạn muốn tìm đường đi.  destination (bắt buộc): Địa chỉ hay giá trị kinh độ - vĩ độ của điểm muốn tìm đường đi đến.  mode (bắt buộc, mặc định là driving): xác định kiểu duy chuyển (đi bộ, lai xe) khi tính toán hướng đi.  waypoints (tùy chọn): xác định một tập hợp điểm trung gian mà đường đi phải đi qua. Tham số cho điểm trung gian có thể là địa chỉ hay kinh độ - vĩ độ.  alternatives (tùy chọn): nếu được xác định là true, Google Direction sẽ trả về nhiều hơn một tuyến đường để lựa chọn. Tuy nhiên thời gian trả lời của Google Direction sẽ nhiều hơn.  avoid (tùy chọn): chỉ ra tuyến đường sẽ phải tránh đường cao tốc hoăc tránh trạm thu phí. Hiện tại Google Direction chỉ hỗ trợ hai tham số: o tolls: tránh các trạm thu phí. o highways: tránh đường cao tốc.  units(tùy chọn): xác định đơn vị cho kết quả tính toán.  region(tùy chọn): mã vùng, bao gồm 2 ký tự xác định vùng.  sensor(bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có cảm biến vị trí hay không. True hoặc false. Kiểu di chuyển Khi tính toán hướng đi, có thể qui định kiểu duy chuyển. Kiểu mặc định khi không có tham số trong request url là driving (lái xe hơi). Hiện tại tham số cho kiểu duy chuyển hỗ trợ 3 giá trị:  driving (mặc định): lái xe hơi.  walking : đi bộ, có thể qua những con đường cho người đi bộ hoặc đi trên đường tắt và vỉa hè.  bicycling: lái xe đạp, chọn đường dành riêng cho xe đạp (chỉ phổ biến ở Mỹ) Hướng dành cho đi bộ và đi xe đạp đôi khi không bao gồm đường chỉ dẫn rỏ ràng cho người đi bộ và đi xe đạp, vì vậy Google Direction cung cấp thông tin cảnh báo trong kết quả trả về và phải hiển thị cho người dùng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 59 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Sử dụng điểm trung gian Khi tính toán tuyến đường đi sử dụng Google Direction API, sử dụng các điểm trung gian để tính toán đường đi đến đích có đi qua những điêm trung gian đã qui định. Có thể sử dụng nhiều điểm trung gian, mỗi điểm phân cách nhau bằng ký tự “|”. Ví dụ dưới đây là chuỗi request URL để tìm đường đi từ tháp Trầm Hương đến trường ĐH Nha Trang đi qua cầu Hà Ra: http://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination =12.268743,109.201986&waypoints=12.260722,109.190088&sensor=false Mặc định Google Direction sẽ tính toán đường đi qua các điểm trung gian dựa trên sự sắp xếp địa điểm trên request URL. Tuy nhiên có thể sử dụng tham số optimize:true để Google Direction xắp xếp các điểm trung gian tối ưu nhất (là một ứng dụng của bài toán Travelling Salesman Problem). Vùng giới hạn Google Direction sẽ tính toán đường đi với những giới hạn được đặt ra. Dựa vào những giới hạn đó Google Direction sẽ tính được đường đi thuận lợi hơn cho người dùng. Hiện tại có 2 giá trị của giới hạn được hỗ trợ đó là:  avoid=tolls : tránh trạm thu phí.  avoid=highways: tránh đường cao tốc. Đơn vị hệ thống Trong kết quả Google Direction trả về có chứa thông tin độ dài từng chặn đường và tuyến đường. Mặc định đơn vị độ dài được sử dụng sẽ phụ thuộc vào vùng (qui định bởi giá trị region). Ví dụ: tìm đường từ Chicago, IL đến Toronto,ONT sẽ trả về giá trị khoảng cách ở đơn vị dặm (miles), trong khi tìm đường ở Việt Nam kết quả sẻ ở đơn vị ki lô mét (km). Có thể thay đổi đơn vị khoảng cách mà hệ thống đã lựa chọn bằng cách cung cấp giá trị cho tham số units. Có hai giá trị của tham số units là:  metric: đơn vị hệ mét.  imperial : dùng hệ thống đơn vị của Anh. Lựa chọn đơn vị độ dài chỉ có hiệu lực đối với dòng ký tự mô tả khoảng cách, trá trị khoảng cách trả về ở dạng số luôn có đơn vị là mét. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 60 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Vùng giới hạn địa lý Có thể qui định cho Goolgle Direction trả về kết quả ở những vùng địa lý riêng biệt bằng cách qui định qía trị cho tham số “region”. Giá trị của tham số “region” là tên miền quốc gia (country code top-level domain). Tên miền quốc gia của Việt Nam là “vn”. Việc đặt giá trị để qui định vùng riêng biệt se giúp cho Google Direction tìm kiếm nhanh và chính xác hơn. IV.5.3 Kết quả trả về Google Direction Cấu trúc kết quả trả về Kết quả Google Direction trả về sẽ ở 2 dạng tập tin là xml và json. Mặc định chỉ có một giá trị route nhận được trong kết quả trả về, trừ khi muốn kết quả trả về hơn hai tuyến đường (alternatives=true). Kết quả trả về cần phải được phân tích cú pháp để sử dụng. Ví dụ tìm đường đi từ Tháp Bà đến trường Đại học Nha Trang Kết quả trả về ở định dạng JSON: { "routes" : [ { "bounds" : { "northeast" : { "lat" : 12.270420, "lng" : 109.202090 }, "southwest" : { "lat" : 12.265350, "lng" : 109.196220 } }, "copyrights" : "Dữ liệu bản đồ ©2012 Google", "legs" : [ { "distance" : { "text" : "1,1 km", "value" : 1122 }, "duration" : { "text" : "3 phút", "value" : 161 }, GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 61 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android "end_address" : "2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam", "end_location" : { "lat" : 12.268710, "lng" : 109.202090 }, "start_address" : "126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam", "start_location" : { "lat" : 12.265350, "lng" : 109.196220 }, "steps" : [ { "distance" : { "text" : "0,6 km", "value" : 601 }, "duration" : { "text" : "1 phút", "value" : 43 }, "end_location" : { "lat" : 12.270420, "lng" : 109.197950 }, "html_instructions" : "Đi về hướng \u003cb\u003eBắc\u003c/b\u003e lên \u003cb\u003e2 Tháng 4/Cầu Xóm Bóng\u003c/b\u003e về phía \u003cb\u003eTháp Bà\u003c/b\u003e\u003cdiv style=\"font-size:0.9em\"\u003eĐi tiếp tục theo 2 Tháng 4\u003c/div\u003e\u003cdiv style=\"fontsize:0.9em\"\u003eBăng qua Tháp Bà Ponagar (ở phía bên trái)\u003c/div\u003e", "polyline" : { "points" : "mqziAkknySICqAKyAQqC]gAOmBWe@Ko@Qu@[k@U]OUMoB}@gAe@o@Uc@I" }, "start_location" : { "lat" : 12.265350, "lng" : 109.196220 }, "travel_mode" : "DRIVING" }, { "distance" : { "text" : "0,3 km", "value" : 338 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 62 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android }, "duration" : { "text" : "1 phút", "value" : 86 }, "end_location" : { "lat" : 12.268840, "lng" : 109.200510 }, "html_instructions" : "Rẽ \u003cb\u003ephải\u003c/b\u003e tại Trường Trung Học Kinh Tế lên \u003cb\u003eNguyễn Đình Chiểu\u003c/b\u003e", "polyline" : { "points" : "cq{iAevnySP_@N_@Zm@Zk@LUDODM@MBM@OBMBSLSRMXUr@g@FKLQ\\s @Te@AK" }, "start_location" : { "lat" : 12.270420, "lng" : 109.197950 }, "travel_mode" : "DRIVING" }, { "distance" : { "text" : "0,2 km", "value" : 183 }, "duration" : { "text" : "1 phút", "value" : 32 }, "end_location" : { "lat" : 12.268710, "lng" : 109.202090 }, "html_instructions" : "Chếch sang \u003cb\u003ephải\u003c/b\u003e tại Uân Loan\u003cdiv style=\"font-size:0.9em\"\u003eĐiểm đến sẽ ở bên phải\u003c/div\u003e", "polyline" : { "points" : "gg{iAefoyS@CJMJKJOFMFKCOCIEICK?K?UEsACgA?E" }, "start_location" : { "lat" : 12.268840, "lng" : 109.200510 }, GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 63 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android "travel_mode" : "DRIVING" } ], "via_waypoint" : [] } ], "overview_polyline" : { "points" : "mqziAkknyS{AOkFo@uDg@uA]aBq@s@]wDcBo@Uc@I`@_Av@yARe@F[L_ALS RMlA}@T]r@yA?OVYR]FKCOISCWIwD" }, "summary" : "2 Tháng 4 và Nguyễn Đình Chiểu", "warnings" : [], "waypoint_order" : [] } ], "status" : "OK" } Kết quả trả về ở định dạng XML: OK 2 Tháng 4 và Nguyễn Đình Chiểu DRIVING 12.2653500 109.1962200 12.2704200 109.1979500 mqziAkknySICqAKyAQqC]gAOmBWe@Ko@Qu@[k@U]OUMoB}@gAe@o @Uc@I 43 1 phút GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 64 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Đi về hướng <b>Bắc</b> lên <b>2 Tháng 4/Cầu Xóm Bóng</b> về phía <b>Tháp Bà</b><div style="fontsize:0.9em">Đi tiếp tục theo 2 Tháng 4</div><div style="fontsize:0.9em">Băng qua Tháp Bà Ponagar (ở phía bên trái)</div> 601 0,6 km DRIVING 12.2704200 109.1979500 12.2688400 109.2005100 cq{iAevnySP_@N_@Zm@Zk@LUDODM@MBM@OBMBSLSRMXUr@g@ FKLQ\s@Te@AK 86 1 phút Rẽ <b>phải</b> tại Trường Trung Học Kinh Tế lên <b>Nguyễn Đình Chiểu</b> 338 0,3 km DRIVING 12.2688400 109.2005100 12.2687100 109.2020900 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 65 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android gg{iAefoyS@CJMJKJOFMFKCOCIEICK?K?UEsACgA?E 32 1 phút Chếch sang <b>phải</b> tại Uân Loan<div style="font-size:0.9em">Điểm đến sẽ ở bên phải</div> 183 0,2 km 161 3 phút 1122 1,1 km 12.2653500 109.1962200 12.2687100 109.2020900 126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam 2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam Dữ liệu bản đồ ©2012 Google mqziAkknyS{AOkFo@uDg@uA]aBq@s@]wDcBo@Uc@I`@_Av@yARe@F [L_ALSRMlA}@T]r@yA?OVYR]FKCOISCWIwD 12.2653500 109.1962200 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 66 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android 12.2704200 109.2020900 Nút gốc trong tài liệu Xml trả về có 2 thẻ con là:  status :thông báo trạng thái của kết quả hoặc thông tin sự cố .  route :(một hay nhiều), mỗi thẻ route chứa một tuyến đường đi riêng biệt từ điểm đầu đến điểm cuối. STATUS  OK: kết quả trả về bình thường.  NOT_FOUND: một điểm nào đó nhập vào không thể mã hóa địa lý để lấy kinh độ - vĩ độ.  ZERO_RESULTS: không thể tìm thấy đường đi.  MAX_WAYPOINTS_EXCEEDED: thông báo vượt quá giới hạn các điểm trung gian được cho phép. (Bình thường là 8 điểm, nếu trả thêm chi phí sẽ tăng lên tối đa là 23 điểm trung gian)  INVALID_REQUEST: thông báo chuỗi yêu cầu không hợp lệ.  OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong một khoảng thời gian.  REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Direction chặn.  UNKNOWN_ERROR: lỗi không xác định. ROUTE Mỗi thẻ route chứa thông tin về một tuyến đường phân biệt từ điểm xuất phát đến điểm cần đến. Trong kết quả trả về của Google Direction sẽ có nhiều thẻ route hoặc sẽ không có nếu không thể tìm được đường đi. Trong mỗi thẻ route sẽ có một hay nhiều thẻ leg phụ thuộc vào số lượng điểm trung gian đã yêu cầu. Ngài ra, bên trong thẻ rout> còn chứa các thông tin cảnh báo, bản quyền … GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 67 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Trong mỗi thẻ route có thể bao gồm các thẻ con sau:  summary: tên tóm tắc của đoạn đường.  legs[]: chứa một tập hợp các thẻ mô tả đường đi giữa hai điểm. Nếu không yêu cầu điểm trung gian thì kết quả trả về chỉ có một thẻ tương ứng với đường đi từ điểm xuất phát đến điểm đích. Nếu có một hoặc một số điểm trung gian được yêu cầu thì mỗi thẻ sẽ tương ứng với đoạn đường từng cặp điểm lần lược là: điểm xuất phát đến điểm trung gian thứ nhất, điểm trung gian thứ nhất đến điểm trung gian thứ hai,…điểm trung gian cuối đến điểm đích.  waypoint_order: chứa một mảng qui định thứ tự xắp xếp của các điểm trung gian.  overview_polyline: chứa một đối tượng giữ một mảng các điểm đã mã hóa đại diện cho một con đường trả về trong kết quả.  bounds: qui định hình chữ nhật bao chung quanh tuyến đường trên bản đồ.  copyrights: chứa thông tin bản quyền.  warnings[] : chứa một tập các cảnh báo cho người dùng. LEG Trong mỗi thẻ leg sẽ mô tả một đoạn đường đi giữa hai điểm.Trong những yêu cầu tìm đường không có điểm trung gian sẽ chỉ có một thẻ leg ở mỗi thẻ route. Trong trường hợp có yêu cầu một số điểm trung gian thì mỗi thẻ leg sẽ tương ứng với mỗi đoạn đường tương ứng với từng điểm trung gian. Trong mỗi thẻ leg có thể bao gồm các thẻ con sau:  steps[]: chứa thông tin từng đoạn đường.  distance: thông tin về độ dài chặn đường được mô tả trong thẻ . Chứa 2 thẻ con: o value: độ dài kiểu số nguyên, đơn vị mét. o text: mô tả bằng chữ độ dài của đoạn đường, đơn vị độ dài sử dụng phụ thuộc vào vùng địa ký đã thiết lập trong chuỗi url yêu cầu tìm đường, hoặc có thể thiết lập riêng bằng giá trị chủa units. Thẻ này có thể không có nếu không thể tính toán được khoảng cách.  duration: ước lượng thời gian di chuyển hết chặn đường tương ứng với thẻ leg o value: giá trị số nguyên đơn vị giây. o text: thời gian ước lượng bằng chữ. Thẻ này có thể không có nếu không thể tính toán được thời gian. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 68 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  start_location: chứa kinh độ - vĩ độ điểm đầu của chặn đường tương ứng với thẻ leg. Bởi vì Direction API sẽ chọn một điểm gần với điểm gốc nhất nhưng trên đường giao thông để tính toán đường đi nên tọa độ điểm này có thể không trung với tọa độ điểm gốc(end_location cũng tương tự như vậy).  end_location: chứa kinh độ - vĩ độ điểm cuối của chặn đường tương ứng với thẻ leg.  start_address: địa chỉ điểm đầu bằng chữ tương ứng với thẻ .  end_addresss: địa chỉ điểm cuối bằng chữ tương ứng với thẻ . STEP Mỗi thẻ step mô tả một đoạn đường. Đoạn đường thẻ step qui định là “đơn vị” nhất và không cần cần phải tách thêm nữa. Thông thường Google Direction tách ra thành mỗi step khi cần rẽ. Nội dung của thẻ step mô tả độ dài, ước lượng thời gian di chuyển, chỉ đường bằng chữ… Trong mỗi thẻ leg có thể bao gồm các thẻ con sau:  html_instructions: hướng dẫn cho đoạn đường bằng HTML.  distance :mô tả độ dài của đoạn đường tương ứng với thẻ . Chứa 2 thẻ con: o value: độ dài kiểu số nguyên, đơn vị mét. o text: mô tả bằng chữ độ dài của đoạn đường, đơn vị độ dài sử dụng phụ thuộc vào vùng địa ký đã thiết lập trong chuỗi url yêu cầu tìm đường, hoặc có thể thiết lập riêng bằng giá trị chủa units. Thẻ này có thể không có nếu không thể tính toán được khoảng cách.  duration: ước lượng thời gian di chuyển hết chặn đường tương ứng với thẻ step o value: giá trị số nguyên đơn vị giây. o text: thời gian ước lượng bằng chữ. Thẻ này có thể không có nếu không thể tính toán được thời gian.  start_location: chứa kinh độ - vĩ độ điểm đầu của chặn đường tương ứng với thẻ leg. Bởi vì Direction API sẽ chọn một điểm gần với điểm gốc nhất nhưng trên đường giao thông để tính toán đường đi nên tọa độ điểm này có thể không trung với tọa độ điểm gốc(end_location cũng tương tự như vậy).  end_location: chứa kinh độ - vĩ độ điểm cuối của chặn đường tương ứng với thẻ leg. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 69 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương V: Cơ sở dữ liệu SQLite V.1 Giới thiệu SQLite SQLite là một hệ quản trị cơ sở dữ liệu quan hệ nhúng. Chứa trong nó là một thư viện nhỏ bằng ngôn ngữ C (khoảng 275kB). SQLite thực hiện hầu hết chuẩn SQL, sử dụng các cú pháp SQL linh hoạt nhưng không đảm bảo ràng buộc toàn vẹn. Ngược lại với những hệ quản trị cơ sở dữ liệu khác, SQLite không được thiết kế riêng để truy cập từ ứng các ứng dụng phía client. Hành động đọc có thể thực hiện đa nhiệm, nhưng hành động ghi thì thực hiện tuần tự. Khác với hầu hết các hệ quản trị sơ sở dữ liệu khác, SQLite được thiết kết theo tiêu chí đơn giản hóa tối đa:  Đơn giản để quản trị  Đơn giản để hoạt động  Đơn giản để nhúng vào một chương trình lớn hơn  Đơn giản để bảo trì và tùy chỉnh SQLite là một lựa chọn phổ biến để lưu trữ dữ liệu cục bộ. Có thể kết hợp với nhiều ngôn ngữ lập trình khác nhau. Nó là công cụ cơ sở dữ liệu được sử dụng rộng rãi nhất trong các trình duyệt web, hệ điều hành, hệ thống nhúng và đặt biệt là trong các thiết bị di động. V.2 Thiết kế của SQLite Không giống như các hệ quản trị cơ sở dữ liệu client-server, SQLite không có các tiến trình giao tiếp ứng dụng client-server. Thay vào đó SQLite có các thư viện được liên kết và trở thành một phần không thể thiếu cho ứng dụng.Ứng dụng gọi những chức năng của SQLite trực tiếp thông qua lời gọi hàm đơn giản làm giảm độ trễ của truy xuất dữ liệu. Do tiến trình gọi hàm để thực hiện các chức năng sẽ đơn giản và hiệu quả hơn liên quá trình giao tiếp mà các hệ quản trị cơ sở dữ liệu client-server thực hiện. SQLite lưu trữ toàn bộ cơ sở dữ liệu chỉ trong một tập tin. Có thể sử dụng SQLite để lưu trữ dữ liệu của ứng dụng tốt hơn XML vì không cần phải phân tích cú pháp và ghi tập tin. Sử dụng SQLite dễ dàng truy cập thao tác trên dữ liệu và độc lập nền tảng. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 70 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android V.3 Các đặc tính của SQLite  Giao tác là nguyên tử, nhất quán, độc lập và bền vững ngay cả sau khi hệ thống bị treo hoặc mất điện.  Không cần cài đặt hay quản trị phức tạp.  Đáp ứng hầu hết chuẩn SQL92.  Toàn bộ cơ sở dữ liệu chứa trong một tập tin không phụ thuộc nền tảng.  Hỗ trợ cơ sở dữ liệu có kích thước terabyte và chuỗi kích thước gigabyte.  Mã nguồn nhỏ, khoảng 350KB với cấu hình đầy đủ tính năng và 200KB với các tính năng tùy chọn.  Nhanh hơn các hệ quản trị cơ sở dữ liệu client/server ở hầu hết các thao tác.  API đơn giản, dễ sử dụng.  Được viết bằng ANSI-C. Kết hợp với nhiều ngôn ngữ riêng biệt.  Có sẵn tập tin mã nguồn để dễ dàng đưa vào một dự án.  Độc lập, không phụ thuộc bên ngoài.  Độc lập nền tảng: Unix (Linux, Mac OS-X, Android, iOS) và Windows (Win32, WinCE, WinRT) được hỗ trợ. Dễ dàng chuyển đổi để sử dụng trên nhiều hệ thống khác nhau.  Mã nguồn mở và có thể được sử dụng với mọi mục đích.  Giao diện quản trị bằng dòng lệnh. V.4 Sử dụng SQLite V.4.1 Những trường hợp thích hợp sử dụng SQLite Định dạng tập tin ứng dụng SQLite đã được sử dụng một cách thành công với vai trò là định dạng tập tin trên đĩa cho các ứng dụng máy tính như công cụ phân tích tài chính, gói CAD, chương trình ghi nhật ký, và vv. Hành động File / Open sẽ gọi hàm sqlite3_open() và bắt đầu thực hiện một giao dịch truy cập đến nội dung. Hành động File / Save kết thúc giao dịch. Việc sử dụng các giao dịch bảo đảm việc cập nhật các tập tin ứng dụng một cách nguyên tử, độ bền cao, độc lập, và nhất quán. Các trigger có thể được thêm vào cơ sở dữ liệu để tạo ra chức năng redo/undo cho dữ liệu. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 71 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Thiết bị nhúng và các ứng dụng trên thiết bị nhúng Bởi vì SQLite hầu như không đòi hỏi phải quản trị cho nên SQLite là một lựa chọn tốt cho các thiết bị hoặc dịch vụ phải làm việc không cần giám sát và không có sự hỗ trợ của con người. SQLite thích hợp cho sử dụng trong điện thoại di động, máy tính bảng, hộp set-top ... Nó cũng hoạt động tốt với vai trò là cơ sở dữ liệu nhúng trong các ứng dụng của người dùng tải về. Các website SQLite là cơ sở dữ liệu làm việc tốt cho những website có lượng truy cập từ trung bình tở xuống (Hầu hết 99% website trên mạng internet nó lượng truy cập trung bình). Bất cứ website nào nó lượng truy cập ít hơn 100000 lượt trên một ngày SQLite đều có thể chạy tốt (thậm chí SQLite còn được chứng minh có thể đảm bảo gấp 10 lần lượng truy cập như vậy). Cơ sở dữ liệu nội bộ hoặc tạm thời Đối với các chương trình có rất nhiều dữ liệu phải được sàng lọc và sắp xếp theo nhiều cách khác nhau, sẽ dễ dàng và nhanh hơn nếu đưa dữ liệu trong bộ nhớ vào một cơ sở dữ liệu SQLite và sử dụng các truy vấn JOIN và ORDER BY để trích xuất các dữ liệu theo yêu cầu. Sử dụng một cơ sở dữ liệu SQL nội bộ theo cách này cũng cung cấp cho các chương trình tính linh hoạt hơn. Công cụ phân tích tập dữ liệu bằng dòng lệnh Những người dùng SQL có kinh nghiệm có thể sử dụng một chương trình dựa trên SQLite để phân tích các tập dữ liệu hỗn hợp. Dữ liệu thô có thể được nhập từ các tập tin CSV, sau đó dữ liệu có thể được chia nhỏ ra và tạo ra vô số các báo cáo tóm tắt. Có thể bao gồm phân tích thông tin nhật ký (log) của website, phân tích số liệu thống kê trong thể thao, lập số liệu lập trình, và phân tích kết quả thử nghiệm. Có thể làm điều tương tự với một cơ sở dữ liệu client-server. Nhưng những lợi thế để sử dụng SQLite trong tình huống này mà SQLite là dễ dàng hơn nhiều để thiết lập và cơ sở dữ liệu kết quả là một tập tin duy nhất có thể lưu trữ trên đĩa hoặc USB hoặc email thuận tiện trong trao đổi. Thay thế cho một cơ sở dữ liệu doanh nghiệp trong quá trình demo hoặc kiểm tra Nếu đang xây dựng một ứng dụng phía client cho một cơ sở dữ liệu doanh nghiệp, SQLite có thể thay thế cho cơ sở dữ liệu doanh nghiệp khi chưa hoàn thành. Đưa SQLite tích hợp vào ứng dụng phía client giúp cho chương trình phía client có thê chạy độc lập thuận tiện để test hoặc demo. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 72 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Cơ sở dữ liệu phục vụ giảng dạy Bởi vì tính đơn giản dễ cài đặt và sử dụng (chỉ cần sao chép file thực thi sql hoặc sqlite.exe là có thể chạy) SQLite là một cơ sở dữ liệu tốt để sử dụng trong giảng dạy SQL. Sinh viên có thể dễ dàng tạo ra nhiều cơ sở dữ liệu và trao đổi với nhau một cách nhanh chóng trong quá trình học tập. SQLite không phải là một mô hình chính xác của các hệ cơ sở dữ liệu khác, tuy nhiên nếu sinh viên nắm bắt được ngôn ngữ SQL thông qua SQLite thì sẽ đễ dàng hơn khi tiếp cận các hệ quản trị cơ sở dữ liệu khác phức tạp hợn. V.4.2 Những trường hợp không thích hợp sử dụng SQLite Ứng dụng client/server Nếu có nhiều chương trình phía client truy cập vào một cơ sở dữ liệu chung thông qua kết nối mạng, thì nên xem xét sử dụng một hệ quản trị cơ sở dữ liệu client/server khác thay vì SQLite. SQLite sẽ làm việc trên một hệ thống tập tin mạng, nhưng vì độ trễ liên quan với hầu hết các hệ thống tập tin mạng, hiệu suất sẽ không cao. Một nguyên tắc nhỏ nên tránh sử dụng SQLite trong các tình huống nơi cùng một cơ sở dữ liệu sẽ được truy cập đồng thời từ nhiều máy tính trong một hệ thống tập tin mạng. Các trang web lớn SQLite sẽ làm việc tốt trong vai trò cơ sở dữ liệu duy nhất của một trang web. Tuy nhiên, nếu website quá bận rộn và phải nghĩ cách tách các thành phần cơ sở dữ liệu vào các máy chủ riêng biệt, thì chắc chắn phải sử dụng một hệ quản trị cơ sở dữ liệu client/server phù hợp thay vì SQLite. Tập dữ liệu rất lớn Kích thước giới hạn của cơ sở dữ liệu SQLite là 2 terabyte. Và ngay cả khi SQLite có thể xử lý một lượng dữ liệu lớn hơn thì toàn bộ dữ liệu của nó đều nằm trong một tập tin duy nhất. Tuy nhiên nhiều hệ thống giới hạn kích thước của một tập tin nhỏ hơn nhiều 2 terabyte. Nếu cơ sở dữ liệu lớn bắt buộc phải chọn hệ cơ sở dữ liệu client/server có khả năng chia tập dữ liệu thành nhiều phần lưu trữ trên nhiều vị trí. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 73 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Lượng truy cập đồng thời cao SQLite dùng khóa đọc/ghi trên toàn bộ tập tin cơ sở dữ liệu. Điều đó có nghĩa là nếu có quá trình đang đọc từ bất cứ phần nào của cơ sở dữ liệu, tất cả các quá trình khách bị cấm ghi trên bất kỳ phần nào khác của cơ sở dữ liệu . Tương tự như vậy, nếu bất kỳ quá trình nào đang ghi trên cơ sở dữ liệu, tất cả các quá trình đọc khác bị ngăn cản trên bất kỳ một phần khác của cơ sở dữ liệu. Đối với nhiều tình huống, điều này không phải là một vấn đề. Mỗi ứng dụng làm việc trên cơ sở dữ liệu một cách nhanh chóng và khóa không kéo dài hơn một vài chục phần nghìn giây. Nhưng có một số ứng dụng yêu cầu đồng thời nhiều hơn, và những ứng dụng đó có thể phải tìm kiếm một giải pháp khác mà không phải là SQLite. V.5 Các ứng dụng lớn của SQLite Adobe sử dụng SQLite như một định dạng tập tin ứng dụng trong phân mềm Photoshop Lightroom. SQLite là một thành phần chuẩn trong Adobe Integrated Runtime (AIR). Acrobat Reader cũng sử dụng SQLite. Airbus sử dụng SQLite trong phần mềm bay của hãng dòng máy bay A350 XWB. Apple sử dụng SQLite cho nhiều chức năng trong Mac OS X, bao gồm Apple Mail, Safari, Aperture. Apple còn sử dụng SQLite trong iPhone, iPod touch và phần mềm iTune. Dịch vụ đồng bộ dữ liệu Dropbox sử dụng SQLite lưu trữ dữ liệu phí client. SQLite lưu trữ meta-data cho trình duyệt Firefox và trình duyệt mail Thunderbird Email Reader của Mozilla. Google sử dụng SQLite cho phần mềm Google Desktop, Google Gears, trong hệ điều hành Android và trong trình duyệt web Chrome. Các kỹ sư của Google có nhiều đóng góp cho hệ thống con tìm kiếm full-text trong SQLite. McAfee sử dụng SQLite trong phần mềm diệt virus. Ngôn ngữ PHP thường có SQLite phiên bản 2 và 3 đi kèm. SQLite đã đi kèm ngôn ngữ Python từ phiên bản 2.5 GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 74 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Chương VI: Xây dựng ứng dụng VI.1 Phân tích thiết kế dữ liệu VI.1.1 Đặc tả hệ thống Về địa điểm du lịch Xây dựng chương trình quản lý địa điểm du lịch và các tuyến xe buýt, quản lý theo danh sách và hiển thị trên bản đồ. Chương trình sẽ quản lý các địa điểm du lịch. Các địa điểm được chia làm nhiều loại địa điểm, mỗi địa điểm sẽ thuộc ít nhất một loại địa điểm và có thể nhiều hơn một loại. Loại địa điểm đặc trưng cho dịch vụ hay hoạt động mà địa điểm đó có, chia làm các loại: tham quan, vui chơi, ẩm thực, café, mua sắm, khách sạn. Mỗi địa điểm sẽ cung cấp các thông tin: địa chỉ (gồm số nhà và đường), mô tả tóm tắt về địa điểm, số điện thoại, có phải là địa điểm yêu thích hay không và có phải là địa điểm của người dùng thêm vào hay không, tọa độ địa lý dùng để hiển thị và chỉ đường trên bản đồ. Mỗi địa điểm sẽ có một danh sách ảnh, trong có có một ảnh chính đóng vai trò là ảnh đại diện cho địa điểm trong chương trình. Về các tuyến xe buýt Hiện tại trong nội thành Thành phố Nha Trang có 6 tuyến xe buýt khác nhau. Mỗi tuyến xe sẽ phải cung cấp các thông tin: tóm tắc lộ trình, lộ trình chi tiết, tần xuất xe chạy tính bằng đơn vị phút, giá vé, cự ly toàn tuyến có đơn vị ki-lô-mét, ngoài ra còn lưu giữ thông tin đường đi tuyến xe buýt để hiển thị lên bản đồ. Mỗi trạm xe buýt thuộc ít nhất một tuyến xe buýt và có thể có nhiều tuyến xe buýt đi qua trạm đó, để xác định vị trí trên bản đồ, mỗi trạm sẽ có thông tin về tọa độ địa lý ngoài ra còn quản lý thông tin địa chỉ (gồm số nhà, đường). GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 75 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android VI.1.2 Mô hình thực thể kết hợp GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 76 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android VI.1.3 Mô hình vật lý dữ liệu VI.2 Các yêu cầu về chức năng của chương trình Chương trình sẽ xây dựng sẽ đảm bảo các chức năng chính sau : Bắt vị trí hiện tại của người sử dụng bằng GPS hoặc Wifi hoặc sóng điện thoại. Tính toán địa chỉ hiện tại dựa trên Google Geocoding API. Chức năng quản lý địa điểm du lịch Các địa điểm du lịch sẽ được quản lý theo danh sách. Mỗi danh sách theo từng loại địa điểm. Trên danh sách địa điểm hiển thị những thông tin tóm tắc cần thiết. Cho phép người truy cập truy cập nhanh vào từng danh sách địa điểm tương ứng với từng loại địa điểm. Có phân loại những địa điểm đã được đánh dấu là địa điểm yêu thích và địa điểm người dùng thêm vào. Có giao diện UI hiển thị chi tiết thông tin của từng địa điểm. Với một số thông tin đặt biệt sẽ cung cấp truy cập nhanh để sử dụng thông tin đó. Ví dụ: với số điện thoại, người sử dụng có thể gọi ngay… GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 77 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android Cho phép thêm, xóa, sửa các thông tin địa điểm, bao gồm cả danh sách hình ảnh. Với mỗi địa điểm, khi vị trí hiện tại đã tính toán được sẽ tính khoảng cách từ vi trí hiện tại của người sử dụng đến từng địa điểm, chức năng này sẽ dựa trên Google Distance Matrix API. Tự động tính toán các tuyến xe buýt đi đến mỗi địa điểm. Hiển thị các trạm gần mỗi địa điểm trên bản đồ. Hiển thị danh sách địa điểm trên bản đồ. Hiển thị thông tin tóm tắc của mỗi địa điểm trên bản đồ và cho phép người dùng truy cập trực tiếp thông tin chi tiết mỗi địa điểm từ bản đồ. Tìm đường đi và hiển thị trên bản đồ. Chức năng hiển thị thông tin các tuyến xe buýt Cung cấp danh sách các tuyến xe buýt với các thông tin quan trọng. Hiển thị thông tin chi tiết từng tuyến. Hiển thị các tuyến xe buýt gồm các trạm và lộ trình trên bản đồ. Cho phép hiển thị nhiều tuyến cùng lúc. VI.3 Các vấn đề trong quá trình xây dựng ứng dụng VI.3.1 Giao diện UI trong lập trình ứng dụng Android Giao diện người dùng của ứng dụng trên hệ điều hành Android là các Activity. Mỗi Activity tương ứng với một giao diện gồm nhiều đối tượng View. Các đối tượng View được chia làm hai loại:  View: là một UI cụ thể có khả năng hiển thị và tương tác với người dùng. Ví dụ: TextView, Button …  View Group: chứa các View và View Group khác, mục đích của View Group là xắp xếp các thành phần View theo một trật tự nào nhất định. Các loại View thường sử dụng :  TextView: hiển thị text, một dòng hay nhiều dòng  EditText: chỉnh sửa text, có thể chọn nhiều kiểu EditText ví dụ: chỉ nhập số, vùng nhập địa chỉ mail, vùng nhập tự đoán nội dung…  ImageView : hiển thị ảnh  Button: nút nhấn phân biệt bằng text  ImageButton: nút nhất phân biệt bằng hình ảnh  RadioButton: chọn một trong danh sách  CheckBox: chọn nhiều trong danh sách  ListView: hiển thị các item con theo kiểu danh sách dọc. GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường 78 Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android  ExpandableListView: hiển thị các item con theo từng nhóm theo kiểu cây thư mục.  ToggleButton: nút nhấn hai trạng thái.  ProgressBar: thanh tiến trình của tác vụ. Các loại View Group thường xử dụng :  LinearLayout: dùng thường xuyên nhất, xắp xếp các View con theo chiều ngang hay chiều dọc, mỗi View con tương ứng một cột hay một hàng.  RelativeLayout: xắp xếp các View con theo vị trí tương đối với các View con khác và với View cha.  ScrollView: Tự động chuyển sang thành cuộn khi nội dung dài quá chiều dài màng hình theo chiều dọc.  TableLayout: Xắp xếp các view theo kiểu bảng, gồm nhiều TableRow Cách đơn giản và phổ biết nhất để thiết kế UI trên ứng dụng Android là viết tập tin Layout bằng XML. Mỗi Activity sẽ tương ứng với một XML Layout. Lưu ý: luôn luôn có duy nhất một View Group gốc chứa toàn bộ các View còn lại. Ví dụ: thiết kế UI đơn giản gồm một EditText và một Button.
- Xem thêm -