Từ đó ứng dụng để thực hiện đồ án tốt nghiệp với đề tài: “Xây dựng ứng dụng bản đồ xe bus cho tỉnh Thái Nguyên trên Android ” dưới sự hướng dẫn của cô Hà Thị Thanh.. Bất kỳ một hãng sản
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG THÁI NGUYÊN
Khoa Công Nghệ Thông Tin
-o0o -
BÁO CÁO
ĐỀ TÀI:
XÂY DỰNG BẢN ĐỒ XE BUS CHO TỈNH THÁI
NGUYÊN TRÊN ANDROID
GIÁO VIÊN HƯỚNG DẪN : Th.S Hà Thị Thanh
Trang 2MỤC LỤC
MỤC LỤC 1
DANH MỤC HÌNH ẢNH 2
LỜI CÁM ƠN 3
LỜI NÓI ĐẦU 4
LỜI CAM ĐOAN 5
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 6
1.1 TỔNG QUAN VỀ ANDROID 6
1.2 CÀI ĐẶT VÀ LẤY GOOGLE MAPS API 11
1.3 GPS 26
1.4 GIỚI THIỆU VỀ GOOGLEMAP API V2 29
1.5 XML TRONG ANDROID 41
1.6 JSON TRONG ANDROID 42
CHƯƠNG 2: MÔ TẢ KHẢO SÁT HIỆN TRẠNG VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG 46
2.1 THỰC TRẠNG ĐỀ TÀI 46
2.2 KHẢO SÁT THỰC TẾ 46
2.3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 47
CHƯƠNG 3: CÀI ĐẶT HỆ THỐNG 55
3.1 MÔ TẢ HỆ THỐNG 55
3.2 CÀI ĐẶT HỆ THỐNG 56
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 63
KẾT LUẬN 63
HƯỚNG PHÁT TRIỂN 63
TÀI LIỆU THAM KHẢO 64
Trang 3DANH MỤC HÌNH ẢNH
Hình 1.1: Các thành viên Open Handset Alliance 6
Hình 1.2: Kiến trúc Android 8
Hình 1.3: Hello Map 23
Hình 1.4: Polyline 35
Hinh 1.5: Circle 36
Hình 2.1: Biểu đồ User Case 47
Hình 2.2: Biểu đồ phân rã UC chức năng xem map 48
Hình 2.3: Biểu đồ phân rã UC chức năng tìm địa điểm xung quanh 48
Hình 2.4: Biểu đồ phân rã UC chức năng tìm đường 48
Hình 2.5: Biểu đồ lớp mô tả hệ thống 50
Hình 2.6: Biểu đồ trình tự chức năng tìm kiếm địa điểm 50
Hình 2.7: Biểu đồ trình tự chức năng xem tuyến xe buýt 51
Hình 2.8: Biểu đồ trình tự chức năng tìm đường 52
Hình 2.9: Biểu đồ trình tự chức năng tìm kiếm địa điểm xung quanh 53
Hình 3.1: Màn hình giao diện chương trình 56
Hình 3.2: Thể hiện chức năng tìm kiếm địa điểm 57
Hình 3.3: Thể hiện chức năng chọn chế độ bản đồ 58
Hình 3.4: Tìm địa điểm xung quanh vị trí hiện tại và thông tin của địa điểm 59
Hình 3.5: Thể hiện chức năng xem lộ trình tuyến xe 60
Hình 3.6: Thể hiện chức năng tìm đường đi 61
Hình 3.7: Màn hình thông tin chương trình 62
Trang 4LỜI CÁM ƠN
Em xin chân thành cảm ơn Khoa Công Nghệ Thông Tin, bộ môn Công nghệ phần mềm trường Đại học Công Nghệ Thông Tin và Truyền Thông đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những năm học vừa qua
Em xin bày tỏ lòng biết ơn sâu sắc đến cô Hà Thị Thanh đã tận tình giúp đỡ và tạo điều kiện thuận lợi cho em trong quá trình thực hiện đồ án
Cuối cùng em xin gửi lời chúc đến quý thầy cô trong trường dồi dào sức khoẻ, niềm tin để tiếp tục thực hiện sứ mệnh cao cả - truyền đạt kiến thức cho thế hệ mai sau
Mặc dù đã cố gắng hoàn thành khoá luận trong phạm vi và khả năng cho phép nhưng cũng sẽ không tránh khỏi những thiếu sót Em rất mong nhận được sự thông cảm, góp ý và tận tình chỉ bảo của các Thầy Cô và các bạn
Thái Nguyên, tháng 06 năm 2014
Sinh Viên
Tống Anh Tuấn
Trang 5LỜI NÓI ĐẦU
Ngày nay với sự phát triển không ngừng của xã hội thì nhu cầu của con người ngày càng tăng, đặc biệt là nhu cầu về việc sử dụng công nghệ hỗ trợ cho đời sống hằng ngày Nắm bắt được nhu cầu đó mà các công ty sản xuất phần mềm không ngừng đổi mới, nhiều công ty chuyển hướng hoặc mở rộng sang cả mảng sản xuất ứng dụng cho thiết bị di động Nếu như chỉ vài năm trở về trước, các ứng dụng như Internet, Emal, Game online, ứng dụng văn phòng… thường chỉ xuất hiện trên máy tính cá nhân thì giờ đây, những ứng dụng đó ngày càng phát triển rộng rãi trên các thiết bị cầm tay, bỏ túi như smartphone, máy tính bảng Chính điều này đã mang lại cho em niềm đam mê, cùng với đó là một hướng đi mới trong việc lựa chọn nghề nghiệp, tương lai cho bản thân
Xuất phát từ một nhu cầu cá nhân – một sinh viên ngoại tỉnh, với điều kiện hạn chế như là không thông thuộc địa hình, không có phương tiện cá nhân Mỗi khi muốn
đi tham quan du lịch hay muốn qua các trường đại học khác để giao lưu thì phương tiện ưu việt nhất là sử dụng phương tiện công cộng – xe buýt Chính vì lý do này em
đã đề xuất đồ án với đề tài là: “Xây dựng bản đồ xe bus cho tỉnh Thái Nguyên trên
Android”
Hi vọng ứng dụng một phần nào đáp ứng được một phần nào đó đáp ứng được những nhu cầu cho người sử dụng, giúp mọi người tham gia giao thông công cộng dễ dàng hơn tránh ùn tắc giao thông do phương tiện cá nhân vào giờ cao điểm
Đề tài đồ án bao gồm 4 chương:
Chương 1: Cơ sở lý thuyết
Chương 2: Mô tả khảo sát hiện trạng và phân tích thiết kế hệ thống
Chương 3: Cài đặt hệ thống
Trang 6LỜI CAM ĐOAN
Em xin cam đoan:
Những nội dung trong đồ án này là do em thực hiện dưới sự hướng dẫn của giáo viên hướng dẫn – cô giáo Hà Thị Thanh
Toàn bộ nội dung đồ án này là do em tìm hiểu về GoogleMap API trên hệ điều hành Android và nghiên cứu kỹ thuật lập trình trên Android Từ đó ứng dụng để thực
hiện đồ án tốt nghiệp với đề tài: “Xây dựng ứng dụng bản đồ xe bus cho tỉnh Thái
Nguyên trên Android ” dưới sự hướng dẫn của cô Hà Thị Thanh
Mọi tham khảo dùng trong đồ án đều được trích dẫn rõ ràng tác giả, tên công trình, thời gian, địa điểm công bố
Em xin chịu trách nhiệm với lời cam đoan của mình
Thái Nguyên, tháng 05 năm 2014
Sinh viên
Tống Anh Tuấn
Trang 7CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 TỔNG QUAN VỀ ANDROID
1.1.1 Lịch sử Android
Tháng 7/2005, Google mua lại công ty phát triển phần mềm điện thoại Android, nhưng chưa công bố sẽ sử dụng cho mục đích gì Để trả lời cho câu hỏi đó, tháng 11/2007, sau 2 năm phát triển, Google công bố hệ điều hành điện thoại di động mã
nguồn mở Android, cùng với sự thành lập “Liên minh di động mở” (Open Handset
Alliance) bao gồm hơn 65 nhà sản xuất phần cứng điện thoại lớn trên thế giới như Intel, HTC, China Mobile, T-Mobile
Hình 1.1: Các thành viên Open Handset Alliance
Kỉ nguyên Android chính thức khởi động vào ngày 22/10/2008, khi mà chiếc điện thoại T-Mobile G1 chính thức được bán ra ở Mỹ Ở giai đoạn này, rất nhiều
Trang 8những tính năng cơ bản cho một smartphone bị thiếu sót, chẳng hạn như bàn phím ảo, cảm ứng đa điểm hay khả năng mua ứng dụng Tuy nhiên, vai trò của phiên bản đầu tiên này vô cùng quan trọng Nó đã đặt nền móng cho các tính năng có thể xem là đặc điểm nhận dạng của Android ngày nay Tính từ đó cho đến nay, hệ điều hành Android
đã trải qua nhiều lần cập nhật như là Cupcake 1.5, Dount 2.0, Eclair 2.1, Froyo 2.2, Gingerbread 2.3, Honeycomb 3.x, Ice cream 4.0, Jelly Bean (4.1, 4.2, 4.3) và phiên bản gần đây nhất là KitKat 4.4, ra mắt vào 9/2013 Cách đặt tên này cũng hoàn toàn khớp với trình tự chữ cái mà các phiên bản Android sử dụng làm tên mã Google tiết
lộ thêm rằng "mục tiêu của chúng tôi với Android KitKat đó là mang trải nghiệm Android đáng kinh ngạc đến cho mọi người" Google chia sẻ thêm rằng hãng đã từng chọn tên Key Lime Pie cho hệ điều hành Android thế hệ kế tiếp, tuy nhiên mới chỉ xài trong nội bộ công ty Sau đó công ty chọn KitKat vì nhiều người biết đến mùi vị của loại bánh này hơn
1.1.2 Khái niệm về Android
Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển dựa trên nền tảng của Linux Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết
bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G, )
Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách tự do mà không cần phải xin phép hay trả bất kì khoản phí nào nhưng phải đảm bảo tính tương thích ngược (backward compatibility) của phiên bản chế riêng đó
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware
và một số ứng dụng chủ đạo Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập trình java
Những tính năng mà nền tảng Android hổ trợ:
Trang 9 Application framework: Cho phép tái sử dụng và thay thế các thành phần sẳn có của Android
Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động
Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên WebKit engine
Optimized graphics: Hổ trợ bộ thư viện 2D và 3D dự vào đặc tả OpenGL ES 1.0
SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc
Hổ trở các định dạng media phổ biến như: MPEG4, H.264, MP3, AAC, ARM, JPG, PNG, GIF
Hỗ trợ thoại trên nền tảng GSM (Phụ thuộc vài phần cứng thiết bị)
Bluetooth, EDGE, 3G và WiFi (Phụ thuộc vài phần cứng thiết bị)
Camera, GPS, la bàn và cảm biến (Phụ thuộc vài phần cứng thiết bị)
Bộ công cụ phát triển ứng dụng mạnh mẽ
1.1.3 Kiến trúc Android
Hình 1.2: Kiến trúc Android
Trang 10 Tầng ứng dụng (Application)
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: Contacts, Browser, Camera, Phone… Tất cả các ứng dụng chạy trên hệ điều hành Android đều được viết bằng Java
Application framework
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ùng một khuôn khổ đượ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 thành phần; bất kỳ ứng dụng có thể xuất bản khả năng của mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế bảo mật được thực thi bởi khuôn khổ) Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi người sử dụng
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:
Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu
từ các ứng dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó
Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files
Trang 11 Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar
Activity Maanager được dùng để quản lý chu trình sống của ứng dụng và điều hướng các activity
Library
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởi nhiều thành phần khác nhau trong hệ thống Android Điều này được thể hiện thông qua nền tảng ứng dụng Android Một số các thư viện cơ bản được liệt kê dưới đây:
System C library: a BSD-derived implementation of the standard C system library (libc), tuned for embedded Linux-based devices
Media Libraries - based on PacketVideo's OpenCORE; the libraries support playback and recording of many popular audio and video formats, as well as static image files, including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
LibWebCore - a modern web browser engine which powers both the Android browser and an embeddable web view
SGL - the underlying 2D graphics engine
3D libraries - an implementation based on OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration (where available) or the included, highly optimized 3D software rasterizer
FreeType - bitmap and vector font rendering
SQLite - a powerful and lightweight relational database engine available to all applications
Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Tất cả các ứng
Trang 12dụng Android đều chạy trong tiến trình riêng Máy ảo Dalvik đã được viết để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả Các VM Dalvik thực thi các tập tin thực thi
Dalvik (dex) Định dạng được tối ưu hóa cho bộ nhớ tối thiểu VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các định dạng dex Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như luồng và quản lý bộ nhớ thấp
Linux kernel
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory management, process management, network stack, and driver model Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm stack
1.2 CÀI ĐẶT VÀ LẤY GOOGLE MAPS API
1.2.1 Cài đặt
Trên thanh Menu chọn Window – Android SDK Manager
Trang 13Đánh dấu vào Google API cho phiên bản Android muốn dùng để tạo ứng dụng:
Kéo xuống dưới của danh sách, chọn Google Play services và Install packages
Trang 14Accept License và Install.
Sau khi cài đặt, Import project thư viện vào trong Workspace: Click File > Import
Trang 15Chọn Android - Existing Android Code Into Workspace
Trang 16Click Browse Chỉ đến thư mục chứa project thư viện google play services:
<Folder chứa android sdk>/extras/google/google_play_services/ libproject/google-play-services_lib, và click Finish
Trang 171.2.2 Google API Key
Để hiển thị bản đồ, debug trên máy thật thì cần có Google API key Để lấy được Google API key thì cần sử dụng chứng nhận SHA1 (1 chuỗi ký tự)
Lưu ý: Đối với mỗi project khác nhau thì cần có key khác nhau Với project khác tên nhau nhưng trong cùng 1 PC thì chỉ cần lấy lại key ở bước (b)
Nhập password là android, Enter > Hiển thị ra SHA1 Copy SHA1 để sử dụng
cho phần sau
Trang 181.2.2.2 Lấy Google API Key
Vào https://code.google.com/apis/console/ đăng nhập bằng tài khoản Google
Trang 19Chọn mục APIs & auth – Credentials - Create New Android Key
Điền vào ô trống với cú pháp: SHA1;package Với SHA1 đã lấy được và
package là package ứng dụng cần tạo - click Create
Trang 20Khi đó ta sẽ có API key
Ngay bây giờ ta sử dụng API key đã đăng ký cho ứng dụng Map Trong tập tin
“AndroidMainfest.xm”, từ đó Map API sẽ lấy những yêu cầu quan trong và chuyển
nó tới máy chủ Google Maps, sau đó sẽ xác thực ta có quyền truy cập vào dữ liệu Google Maps hay không
Trong AndroidManifest.xml , thêm dòng code sau đây vào giữa thẻ
<application>
<meta-data
android:name="com.google.android.maps.v2.API_KEY" android:value="API_KEY"/>
1.2.2.3 Cấu hình đơn giản cho Map
Trang 21//Cho sử dụng Internet để tải dữ liệu bản đồ
//Cho phép lưu trữ dữ liệu vào bộ nhớ thiết bị
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//Cho phép truy cập dịch vụ dựa trên web của Google
<uses-permission
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
//Cho phép thiết bị sử dụng Wifi hoặc dữ liệu dịch vụ
di động để xác định vị trí
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//Cho phép sử dụng dịch vụ định vị GPS để xác định vị trí của thiết bị
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/>
b Xác định yêu cầu cho OpenGL ES ver 2
Google Map API Android sử dụng OpenGL ES version 2 để sử dụng cho bản đồ Nếu OpenGL ES version 2 không được cài đặt, bản đồ của bạn có thể không thể hiển thị bản đồ Sử dụng code sau trong thẻ <mainfest> thuộc lớp AndroidMainferst.xml
Trang 22<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
c Kiểm tra cài đặt đã khả dụng
Cách đơn giản nhất để kiểm tra ứng dụng đã cài đặt đúng chưa là chạy thử một ứng dụng đơn giản
Thêm đoạn code sau đây trong cách bố trí tập tin giao diện Thay thế toàn bộ nội dung tập tin
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
Tạo ra một Proguard ngoại lệ
Để ngăn ProGuard chặn những điều kiện cần thiết, ta cũng cần thêm đoạn mã sau vào tập tin “Proguard-project.txt”:
Trang 23- keep class * extends java util ListResourceBundle { protected Object [][] getContents ();
Trang 24Chạy thử chương trình ta sẽ được kết quả như sau:
Hình 1.3: Hello Map
1.2.3 Map Objects
Google Maps API Android cho phép chúng ta hiển thị một bản đồ Google trong ứng dụng Android Bản đồ này cũng tương tự như các bản đồ đã thấy trong ứng dụng Google Maps cho điện thoại di động (Google Maps for Mobile - GMM) Có hai điều
Trang 25khác biệt đáng chú ý giữa các ứng dụng GMM và Maps hiển thị bằng Google Maps API Android là:
Tiles bản đồ hiển thị bởi các API không chứa bất kỳ nội dung cá nhân
Không phải tất cả các markers (biểu tượng) trên bản đồ có thể click Ví dụ, markers trạm xe bus, markers bệnh viện Tuy nhiên, các markers mà chúng ta thêm vào bản đồ thì có thể click
Ngoài chức năng lập bản đồ, các API cũng hỗ trợ đầy đủ các tương tác sao cho phù hợp với mô hình giao diện người dùng Android
Lớp quan trọng khi làm việc với một đối tượng bản đồ là GoogleMap Trong giao diện người dùng của bạn, một bản đồ sẽ được biểu diễn bằng một đối tượng MapFragment hoặc MapView
GoogleMap sẽ tự động xử lý các hoạt động sau đây:
Kết nối với dịch vụ Google Maps
Tải về tiles Map
Hiển thị tiles lên màn hình thiết bị
Hiển thị một số điểu khiền khác như điều khiển pan và zoom
Đáp ứng pan và zoom thông qua hành động bằng cách di chuyển bản đồ và phóng to hoặc thu nhỏ
1.2.3.1 MapFragment MapFragment là một lớp con của lớp Android Fragment, cho phép bạn đặt một bản đồ trong một Android Fragment Các đối tượng MapFragment hoạt động như container cho bản đồ, và cung cấp truy cập vào các đối tượng GoogleMap
Không giống như một View, một Fragment đại diện cho một hành động hoặc một phần của giao diện người dùng trong Activity Chúng ta có thể kết hợp nhiều fragments trong một hoạt động duy nhất để xây dựng một giao diện với nhiều activities
Trang 261.2.3.2 MapView MapView là một lớp con của lớp Android View, cho phép ta đặt một bản đồ trong Android View Một view đại diện cho một khu vực hình chữ nhật của màn hình thiết bị, và là một khối xây dựng cơ bản cho các ứng dụng Android
Hiển thị dưới dạng hình ảnh chụp từ vệ tinh Đường bộ và các tính năng gắn nhãn
sẽ không hiện lên
Kiểm tra tính khả dụng của bản đồ
Trước khi ta có thể tương tác với một đối tượng GoogleMap, thì ta sẽ cần phải xác nhận rằng một đối tượng đã được khởi tạo Việc xác nhận này có sẵn bằng
Trang 27cách gọi MapFragment.getMap() hoặc phương thức MapView.getMap() và kiểm tra giá trị trả về là khác null chưa
Một ví dụ về một thử nghiệm để xác nhận sự sẵn có của một GoogleMap được hiển thị Phương thức này có thể được gọi từ onCreate() và onResume(), bước này
để đảm bảo rằng bản đồ luôn luôn có sẵn
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already // instantiated the map
if (mMap == null) {
mMap = ((MapFragment)
getFragmentManager().findFragmentById(R.id.map)).getMap();
// Check if we were successful in obtaining the map
Trang 28Gần như đồng thời với lúc Mỹ phát triển GPS, Liên Xô cũng phát triển một hệ thống tương tự với tên gọi GLONASS Hiện nay Liên minh Châu Âu đang phát triển hệ dẫn đường vệ tinh của mình mang tên Galileo
GPS ban đầu chỉ dành cho các mục đích quân sự, nhưng từ năm 1980 chính phủ Mỹ cho phép sử dụng dân sự GPS hoạt động trong mọi điều kiện thời tiết, mọi nơi trên Trái Đất, 24 giờ một ngày Không mất phí thuê bao hoặc mất tiền trả cho việc thiết lập sử dụng GPS
1.3.2 Sự hoạt động của GPS
Các vệ tinh GPS bay vòng quanh Trái Đất hai lần trong một ngày theo một quỹ đạo rất chính xác và phát tín hiệu có thông tin xuống Trái Đất Các máy thu GPS nhận thông tin này và bằng phép tính lượng giác tính được chính xác vị trí của người dùng
Về bản chất máy thu GPS so sánh thời gian tín hiệu được phát đi từ vệ tinh với thời gian nhận được chúng Sai lệch về thời gian cho biết máy thu GPS ở cách vệ tinh bao
xa Rồi với nhiều quãng cách đo được tới nhiều vệ tinh máy thu có thể tính được vị trí của người dùng và hiển thị lên bản đồ điện tử của máy
Máy thu phải nhận được tín hiệu của ít nhất ba vệ tinh để tính ra vị trí hai chiều (kinh độ và vĩ độ) và để theo dõi được chuyển động Khi nhận được tín hiệu của ít nhất 4 vệ tinh thì máy thu có thể tính được vị trí ba chiều (kinh độ, vĩ độ và độ cao) Một khi vị trí người dùng đã tính được thì máy thu GPS có thể tính các thông tin khác, như tốc độ, hướng chuyển động, bám sát di chuyển, khoảng hành trình, quãng cách tới điểm đến, thời gian Mặt Trời mọc, lặn và nhiều thứ khác nữa
1.3.3 Độ chính xác của GPS
Các máy thu GPS ngày nay cực kì chính xác, nhờ vào thiết kế nhiều kênh hoạt động song song của chúng Các máy thu 12 kênh song song (của Garmin) nhanh chóng khóa vào các quả vệ tinh khi mới bật lên và chúng duy trì chắc chắn liên hệ này, thậm chí trong tán lá rậm rạp hoặc thành phố với các toà nhà cao tầng Tình trạng nhất định của khí quyển và các nguồn gây sai số khác có thể ảnh hưởng tới độ chính xác của máy thu GPS Các máy thu GPS có độ chính xác trung bình trong vòng 15 mét
Trang 29Các máy thu mới hơn với khả năng WAAS (Hệ Tăng Vùng Rộng - Wide Area Augmentation System) có thể tăng độ chính xác trung bình tới dưới 3 mét Không cần thêm thiết bị hay mất phí để có được lợi điểm của WAAS
1.3.4 Mội số lỗi có thể xảy ra với GPS
Những điều có thể làm giảm tín hiệu GPS và vì thế ảnh hưởng tới chính xác bao gồm:
Giữ chậm của tầng đối lưu và tầng ion – Tín hiệu vệ tinh bị chậm đi khi xuyên qua tầng khí quyển
Tín hiệu đi nhiều đường – Điều này xảy ra khi tín hiệu phản xạ từ nhà hay các đối tượng khác trước khi tới máy thu
Lỗi đồng hồ máy thu – Đồng hồ có trong máy thu không chính xác như đồng
hồ nguyên tử trên các vệ tinh GPS
Số lượng vệ tinh nhìn thấy – Càng nhiều quả vệ tinh được máy thu GPS nhìn thấy thì càng chính xác Nhà cao tầng, địa hình, nhiễu loạn điện tử hoặc đôi khi thậm chí tán lá dầy có thể chặn thu nhận tín hiệu, gây lỗi định vị hoặc không định vị được Nói chung máy thu GPS không làm việc trong nhà, dưới nước hoặc dưới đất
Che khuất về hình học – Điều này liên quan tới vị trí tương đối của các vệ tinh
ở thời điểm bất kì Phân bố vệ tinh lí tưởng là khi các quả vệ tinh ở vị trí tạo các góc rộng với nhau Phân bố xấu xảy ra khi các quả vệ tinh ở trên một đường thẳng hoặc cụm thành nhóm
Sự giảm có chủ tâm tín hiệu vệ tinh – Là sự làm giảm tín hiệu cố ý do sự áp đặt của Bộ Quốc phòng Mỹ, nhằm chống lại việc đối thủ quân sự dùng tín hiệu GPS chính xác cao Chính phủ Mỹ đã ngừng việc này từ tháng 5 năm 2000, làm tăng đáng kể độ chính xác của máy thu GPS dân sự
Trang 301.4 GIỚI THIỆU VỀ GOOGLEMAP API V2
1.4.1 Làm việc với vị trí dữ liệu
1.4.1.1 Lớp địa điểm Trong một ứng dụng đơn giản, lớp địa điểm và nút My Location sẽ trả về cho người dùng với vị trí hiện tại của họ trên bản đồ
Khi lớp My Location được kích hoạt, nút location sẽ xuất hiện mặc định ở góc trên cùng bên phải của bản đồ, khi người dùng nhấn vào nút màn hình camera sẽ cập nhật tới vị trí hiện tại của thiết bị Điểm chấm nhỏ màu xanh ở giữa màn hình chính
là địa điểm hiện tại, khi người sử dụng thiết bị di chuyển chấm xanh đó sẽ có thêm mũi tên vecto chỉ hướng
Để kích hoạt lớp này trong ứng dụng ta cần phải cấp quyền sử dụng trong lớp
<mainfest> với đoạn mã sau:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/> Sau đó kích hoạt sử dụng trong lớp My Location:
mMap.setMyLocationEnabled(true);
1.4.1.2 Dịch vụ từ Google Play services Các dịch vụ của Google chơi từ API là phương thức để thêm một vị trí nhận biết cho ứng dụng Android của bạn Nó bao gồm các chức năng:
Xác định vị trí thiết bị
Lắng nghe để thay đổi vị trí
Xác định phương thức vận chuyển, nếu thiết bị di chuyển
Tạo mới và giám sát các khu vực địa lý được xác định trước
Trang 311.4.2 Những tuỳ chỉnh trên Map
1.4.2.1 Đánh dấu (Markers) Marker chỉ ra địa điểm duy nhất trên bản đồ Ta có thể tuỳ chỉnh các dấu hiệu của bạn bằng cách thay đổi màu mặc định, hoặc thay thế các biểu tượng đánh dấu với hình ảnh Mặc định thì marker sử dụng một biểu tượng tiêu chuẩn, tuy nhiên cũng có thể thay đổi màu sắc, vị trí điểm thông qua API Để thêm một Markers ta sử dụng phương thức:
GoogleMap.addMarker (markerOptions)
Marker được thiết kế để có thể tương tác với người sử dụng Theo mặc định, người sử dụng có thể click vào marker và một của sổ thông tin sẽ được hiện lên với các thông tin cần thiết
a Thêm một Markers Sau đây là ví dụ cho thêm vào một điểm lên bản đồ với các thông số như: toạ
độ là 0,0; hiển thị ra chuỗi “Hello world” khi click vào marker
private GoogleMap mMap;
mMap = ((MapFragment)
getFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.addMarker(new MarkerOptions()
position(new LatLng(0, 0))
title("Hello world"));
b Tuỳ chỉnh một Marker Marker có thể định nghĩa như một hình ảnh tuỳ chỉnh để hiển thị ở vị trí của biểu tượng mặc định Xác định một biểu tượng liên quan đến việc thiết lập một số ảnh hưởng đến hành vi trực quan của các điểm đánh dấu
Marker có một số thuộc tính như sau:
Position (Bắt buộc)
Các giá trị LatLng cho giá trị của điểm đánh dấu trên bản đồ Đây là một yêu cầu cơ bản của một đối tượng Marker
Trang 32 Văn bản bổ sung để làm rõ title
Icon (Biểu tượng)
Một bitmap được hiển thị ở vị trí của ảnh đánh dấu
Draggable (Kéo)
Thiết lập để true nếu bạn muốn cho phép người sử dụng di chuyển điểm đánh dấu (Mặc định giá trị trả về là false)
Visible
Thiết lập là false để làm cho các điểm đánh dấu ẩn Mặc định là true
Tuỳ biến màu sắc marker
Marker có thể tuỳ chỉnh màu sắc của icon đánh dấu mặc định bằng cách thông qua đối tượng BitmapDescriptor Ta có thể sử dụng một tập hợp các màu sắc được xác định trước trong đối tượng BitmapDescriptorFactory, hoặc thiết lập màu đánh dấu tuỳ chỉnh với BitmapDescriptorFactory.defaulMarker(float hue) – hue là một giá trị
từ 0-360, đại diện cho các điểm trong bảng màu
static final LatLng MELBOURNE = new LatLng(-37.813, 144.962); Marker melbourne = mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
Tuỳ biến độ trong suốt của marker
Trang 33Chúng ta hoàn toàn có thể kiểm soát tính trong suốt của một marker với phương thức MarkerOptions.anpha() Alpha nên được quy định với một khoảng từ 0,0 đến 1,0 trong đó 0 là marker bị ẩn hoàn toàn, còn với giá trị 1 thì marker được hiển thị như mặc định
static final LatLng MELBOURNE = new LatLng(-37.813, 144.962); Marker melbourne = mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.alpha(0.7));
Tuỳ biến ảnh hiển thị marker
Ta có thể thay thế các ảnh marker mặc định với một hình ảnh icon khác Icon tuỳ biến được luôn đặt như một BitmapDescriptor và được xác định bằng cách sử dụng một trong các phương pháp trong lớp BitmapDecriptiorFactory
fromAsset (String assetName)
o Tạo ra một điểm đánh dấu tùy chỉnh bằng cách sử dụng một hình ảnh trong thư mục tài sản
fromBitmap (hình ảnh Bitmap)
o Tạo ra một điểm đánh dấu tuỳ chỉnh từ một hình ảnh Bitmap
fromFile (đường dẫn String)
o Tạo ra một biểu tượng riêng từ tập tin tại đường dẫn chỉ định
fromResource (int resourceId)
o Tạo ra một điểm đánh dấu tùy chỉnh bằng cách sử dụng một nguồn tài nguyên hiện có
1.4.2.2 Thông tin cửa sổ (Info Windows)
Một ô cửa sổ hiển thị thông tin văn bản hoặc hình ảnh trong một cửa sổ popup trên bản đồ Thông tin này luôn đính kèm với một marker
Một ô cửa sổ thông tin cho phép ta hiển thị thông tin cho người sử dụng khi họ chạm vào điểm đánh dấu Chỉ có một cửa sổ thông tin hiện ra tại một thời điểm trên