1. Trang chủ
  2. » Công Nghệ Thông Tin

Báo cáo lập trình android chỉ dẫn người dùng theo vị trí

21 1K 7
Tài liệu đã được kiểm tra trùng lặp

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 1,24 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Báo cáo lập trình android chỉ dẫn người dùng theo vị trí

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

BÁO CÁO BÀI TẬP LỚN

LẬP TRÌNH ANDROID

ĐỀ TÀI 1 :

Chỉ dẫn người dùng theo vị trí

Giáo viên hướng dẫn: Nguyễn Hồng Quang

Sinh viên thực hiện:

Nguyễn Khánh Hưng 20081279 TTM-K53 Bùi Văn Hải 20080842 HTĐ1-K53 Trần Văn Toàn 20082715 TTM-K53

Đỗ Ngọc Tân 20082312 TTM-K53

Hà Nội 11/2012

Trang 2

2

MỤC LỤC

I Cơ sở lý thuyết 3

1 Giới thiệu chung 3

2 Các tham số truy cập Google Maps 3

II Mô tả các chức năng chính của chương trình 4

1 Nội dung công việc 4

2 Các chức năng 5

3 Cấu trúc chương trình 6

III Cài đặt chương trình 6

1 Hiển thị MapView 6

2 Hiển thị người dùng trên bản đồ số 7

3 Cảnh bảo người dùng trước một địa điểm xác định 7

4 Dẫn đường người dùng 8

5 Hiển thị thông tin thời tiết 13

IV Minh họa kết quả 17

V KẾT LUẬN 20

TÀI LIỆU THAM KHẢO 21

Trang 3

3

I Cơ sở lý thuyết

1 Giới thiệu chung

Trong thế giới web ngày nay, các giải pháp bản đồ là một thành phần không thể thiếu Chúng ta sử dụng chúng để thấy vị trí của mọi vật, để tìm vị trí của một địa chỉ, để lấy về thông tin dẫn đường, và làm nhiều thứ khác Hầu hết thông tin có một vị trí, và nếu vật nào đó có một vị trí thì nó có thể hiển thị trên một bản đồ

Có một số công ty cung cấp các giải pháp về bản đồ như Yahoo! Maps và Bing Maps, nhưng phổ biến nhất vẫn là Google maps Thực tế theo trang programmableweb.com, google maps là API phổ biến nhất trên internet Theo thống

kê của trang này tháng 5/2010, 43% là sử dụng Google Maps API

Để sử dụng được các dịch vụ và API của google maps bạn cần phải đăng ký với dịch vụ Google Maps và đồng ý với các điều khoản dịch vụ áp dụng trước khi bạn

lấy dữ liệu từ Google Maps

2 Các tham số truy cập Google Maps

2.1 Geocoding

Geocoding là quá trình chuyển đổi địa chỉ giống như “Bach Khoa Ha Noi” ) thành tọa độ địa lý (như latitude "21.004409", longitude "105.845896"), mà chúng

ta có thể sử dụng để dánh dấu hay định vị

Trang 4

4

 Geocoding Request

http://maps.googleapis.com/maps/api/geocode/output?parameters

Trong đó output có thể là các giá trị sau:

json file chỉ dẫn output trong JavaScript Object Notation (JSON)

xml: file xml

 Các thông số yêu cầu

o address: địa chỉ muốn thành geocode hoặc latlng: giá trị latitude/longitude hoặc components: thành phần lọc mà chúng ta muốn có

geocode

o sensor: có hoặc không yêu cầu mã hóa vị trí địa lý từ một thiết

bị với cảm biến vị trí Giá trị true hoặc false

Trong đó: address = địa điểm cần biết thông tin

II Mô tả các chức năng chính của chương trình

1 Nội dung công việc

Trang 5

5

o Dẫn đường người dùng bằng các lời nhắc âm thanh;

o Hiển thị thông tin thời tiết tại địa điểm muốn đến

2 Các chức năng

 Hiển thị Google Maps

 Hiển thị vị trí người dùng trên Google Maps

 Mô tả: Khi thiết bị nhận được tín hiệu GPS, chương trình sẽ tự động hiển thị vị trí của thiết bị trên bản đồ

 Cảnh báo người dùng khi họ đứng gần (phạm vi bán kính 200m) một địa điểm xác định

 Mô tả: Ban đầu người dùng click vào một vị trí bất kỳ trên bản đồ

(vị trí đích cần đến) Sau đó nhấn vào menu “Địa điểm” để lưu lại

vị trí đích Khi thiết bị nằm trong bán kính vị trí đích 200m, chương trình sẽ hiển thị thông tin nhắc nhở người dùng

 Dẫn đường người dùng với các bản tin chỉ dẫn bằng văn bản

 Mô tả: Người dùng click vào menu “Tìm đường”, nhập địa chỉ nguồn và địa chỉ đích Sau đó click button “OK”, chương trình sẽ

hiển thị đường đi giữa 2 vị trí và văn bản chỉ dẫn người dùng

 Dẫn đường người dùng bằng các lời nhắc âm thanh

 Mô tả: Ban đầu người dùng click vào một vị trí bất kỳ trên bản đồ

(vị trí đích cần đến) Sau đó nhấn vào menu “Địa điểm” để lưu lại

vị trí đích Sau đó khi click vào menu “Voice Routing” thiết bị sẽ

hiển thị lời nhắc bằng văn bản và bằng âm thanh cho người dùng

 Hiển thị thông tin thời tiết tại địa điểm muốn đến

 Mô tả: Khi người dùng click vào một vị trí bất kỳ trên bản đồ, sau

đó nhấn menu “Thời tiết” chương trình sẽ hiển thị thông tin thời

tiết tại nơi muốn đến Thông tin gồm hình ảnh, địa điểm, thời gian hiện tại, nhiệt độ và thời tiết cụ thể Ngoài ra còn có thêm chức năng xem thông tin thời tiết cụ thể khi người dùng truy cập vào

địa chỉ cung cấp thông qua button “More”

Trang 6

6

3 Cấu trúc chương trình

Chương trình chạy trên hệ điều hành Android phiên bản Android Google API 4.1.2

Class MapsActivity: Class chính với các chức năng thực hiện các nhiệm

vụ: tạo các chức năng cho chương trình, cập nhật vị trí, tạo cơ sở dữ liệu nếu chưa tồn tại,

Class InfoRouting: lấy thông tin định tuyến từ file xml: danh danh vị trí,

và chỉ dẫn

Class WeatherForecast: lấy thông tin thời tiết từ file xml

Class WeatherHelper: tạo, truy vấn cơ sở dữ liệu về thời tiết

III Cài đặt chương trình

Trang 7

7

2 Hiển thị người dùng trên bản đồ số

Để hiển thị vị trí người sử dụng trên bản đồ , class Activity chính phải implements interface LocationListener và cài đặt một số phương thức khác :

 onLocationChanged(Location l) : Phương thức này được gọi mỗi khi vị trí của người sử dụng thay đổi (tọa độ mà GPS nhận được thay đổi) Ở phương thức này sẽ xác định kinh độ , vĩ độ của vị trí hiện tại và vẽ lại hình ảnh (OverlayItem)

 onProviderDisabled(String provider)

 onProviderEnabled(String provider)

 onStatusChanged(String provider, int status, Bundle extras)

Để xác định kinh độ , vĩ độ hiện tại sử dụng :

public void onLocationChanged(Location location)

Trong phương thức draw ta thêm dòng lệnh sau:

mapView.getProjection().toPixels(pointGPS, screenPts);

// -add the

getResources(), R.drawable.notify_icon);

canvas.drawBitmap(bmpOri, screenPts.x-16, screenPts.y-32,

null);

3 Cảnh bảo người dùng trước một địa điểm xác định

Để cảnh báo cho người dùng thì trước tiên phải cập nhật vị trí người dùng

public void onLocationChanged(Location location) {

int lat = (int) (location.getLatitude() * 1E6);

int lng = (int) (location.getLongitude() * 1E6);

GeoPoint point = new GeoPoint(lat, lng);

createMarker();

mapController.animateTo(point);

mapController.setCenter(point);

Trang 8

endLon, distance);

(int)distance[0] + " mét.", Toast.LENGTH_LONG).show();

}

Để thực hiện việc cảnh báo người dùng, trước tên cần lựa chọn 1 vị trí sẽ đến, vị trí

đó được lưu vào biến pointGoal

Trong đó:

origin = địa chỉ nguồn Sử dụng tham số này khi yêu cầu dẫn đường lái

xe Khi phát triển trên nền tảng di động, để sử dụng MyLocatiion (tọa độ GPS) ta thiết lập saddr trống “” đối với Android, đối với iPhone, thiết lập saddr là “Current%20Location”

destination = địa chỉ đích Sử dụng khi yêu cầu thông tin dẫn đường

language = ngôn ngữ hiển thị trong file xml

Trang 9

File xml trên chứa các thông tin dẫn đường từ 2 điểm cho trước

Trong các node <step> chứa các chỉ dẫn cụ thể về địa điểm tiếp theo cần tới Node <duration> chứa thời gian cần đi , tính theo vận tốc trung bình của các phương tiện

Node <distance> chứa khoảng cách tình theo đường bộ cần phải di chuyển Node <start_location> và <end_location> chứa kinh độ , vĩ độ của địa điểm bắt đầu và địa điểm kết thúc

Node <start_address> và <end_address> là địa chỉ của 2 địa điểm

Trong chương trình có 2 loại chỉ dẫn cho người dùng :

a Chỉ đường bằng các chỉ dẫn văn bản :

Mục tiêu

Lấy tọa độ điềm bắt đầu và đích đến của người dùng Sau đó vẽ một LinePath giữa 2 điểm.Hướng dẫn chi tiết cách đi bằng văn bản cho người dùng

Trang 10

//chứa các node của lộ trình

private ArrayList<String> listInstructions = new ArrayList<String>();

private void getDirections(){

nl3 = doc.getElementsByTagName("html_instructions");

for ( int i = 0; i < nl3.getLength(); i++)

{

Node node3 = nl3.item(i);

String strInstru = Html.fromHtml(node3.getTextContent()).toString();

listInstructions add(strInstru);

}

}

}

Sau khi có các Node lộ trình gọi lớp MyOverlays để vẽ

public class MyOverlay extends Overlay {

Trang 11

11

public void drawPath(MapView mv, Canvas canvas) {

}

}

Để hiển thị chỉ dẫn lộ trình cho người dùng

Xây dụng lớp showInstructionsDialog():lớp này đọc các thông tin tại các

Node trong lớp Inforouting để hiện thị lên màn hình

public void showInstructionsDialog()

b Chỉ đường bằng lời nhắc âm thanh

Giá trị cần lấy nằm trong node <html_instructions>. Giá trị này có định dạng

html chỉ rõ hướng đi tới địa điểm kế tiếp Ví dụ :

Đi về hướng <b>Tây</b> lên <b>Tạ Quang Bửu</b> về phía <b>Nội bộ Bách Khoa</b>

Để lấy được dữ liệu này trước hết khởi tạo kết nối Http đến url phía trên và

lấy dữ liệu về InputStream :

HttpClient httpClient = new DefaultHttpClient();

HttpContext localContext = new BasicHttpContext();

HttpPost httpPost = new HttpPost(url);

response = httpClient.execute(httpPost, localContext);

InputStream in = response.getEntity().getContent();

Sau đó dùng DocumentBuilder để phân tích :

DocumentBuilder builder =

DocumentBuilderFactory.newInstance().newDocumentBuilder();

Document doc = builder.parse(in);

Lấy về nội dung node <html_instructions> đầu tiên

NodeList nl;

nl = doc.getElementsByTagName( "html_instructions" ); Node node = nl.item(0);

nextDirection = node.getTextContent();

Trang 12

Khai báo biến :

private TextToSpeech tts; và khởi tạo trong hàm onCreate

tts = new TextToSpeech(this, this);

Phương thức onInit kiểm tra trạng thái TextToSpeech và thiết lập ngôn ngữ (US) , nếu có lỗi thì ghi vào file log

public void onInit(int status) {

if(status == TextToSpeech.SUCCESS) {

int result = tts.setLanguage(Locale.US);

if(result == TextToSpeech.LANG_MISSING_DATA || result

== TextToSpeech.LANG_NOT_SUPPORTED) {

Log.e("TTS" , "This Languge is not supported" );

} }

Để đảm bảo đối tượng TextToSpeech được tắt ở phương thức onDestroy() :

protected void onDestroy() {

if(tts != null) {

tts.stop();

tts.shutdown();

Trang 13

13

}

super.onDestroy();

}

5 Hiển thị thông tin thời tiết

Sử dụng thông tin thời tiết do wunderground.com cung cấp Từ vị trí địa điểm cần biết thông tin thời tiết có kinh độ, vĩ độ x, y Để xác định ta phân tích file xml tải vệ từ URL:

http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query= x,y

Trong đó:

query = x, y: kinh độ, vĩ độ địa chỉ cần biết thông tin thời tiết

Cấu trúc chính của file như sau:

 node <full> </full> chứa thông tin về thành phố có vị trí đã cho

 <local_time> chứa thông tin về thời gian hiện tại

 <weather> chứa thông tin thời tiết cần hiển thị

 <temp_c> nhiệt độ theo độ C

 <forecast_url> đường dẫn chứa thông tin thời tiết chi tiết

Trang 14

14

 Class WeatherForecast nhận thông số khởi tạo là cơ sở dữ liệu về thời tiết và vị

trí kinh độ vĩ độ địa điểm cần hiển thị

 Để lấy được dữ liệu trước tiên ta phải kết nối với url đã cho:

BasicResponseHandler();

responseHandle);

buildForecast(responseBody);

 Phương thức buildForcast(String raw) nhận đầu vào là String responseBody

sẽ đọc thông tin thời tiết từ file xml đã tải về

StringReader(raw)));

 Thông tin về thành phố được lưu trữ trong thuộc tính city

doc.getElementsByTagName("display_location").item(0);

disLocation.getElementsByTagName("full").item(0);

this.setCity(city.getFirstChild().getNodeValue());

 Thông tin về thời gian được lưu trữ trong thuộc tính time

doc.getElementsByTagName("local_time").item(0);

strTime = strTime.substring(0, strTime.indexOf(","));

this.setTime(strTime);

 Thông tin về thời tiết được lưu trữ trong thuộc tính weather

doc.getElementsByTagName("weather").item(0);

if(c.getCount() > 0)

{

c.moveToFirst();

this.setWeather("Thời tiết: " + helper.getTypeVN(c));

this.setIconUrl(helper.getIcon(c));

Trang 15

15

}

else

{

this.setWeather("Thời tiết: " + strWeather);

this.setIconUrl("unknown");

}

Ở đây thông tin thời tiết là tiếng anh nên sẽ được hiển thị tiếng việt thông qua tham chiếu từ cơ sở dữ liệu có sẵn Icon thời tiết cũng được truy vấn từ CSDL thông qua biến thời tiết

 Thông tin về nhiệt độ

doc.getElementsByTagName("temp_c").item(0);

this.setTemperature("Nhiệt độ: " +

temperature.getFirstChild().getNodeValue() + " độ C");

Trang 16

db.execSQL("CREATE TABLE if not exists types" +

"(_id INTEGER PRIMARY KEY AUTOINCREMENT, english TEXT, vietnam TEXT, icon TEXT);");

 Truy vấn chuỗi tiếng việt, icon tương ứng với chuỗi tiếng anh

public Cursor getType(String strEnglish)

{

english = \"" + strEnglish + "\"", null)

}

 Lấy chuỗi tiếng việt từ truy vấn

public String getTypeVN(Cursor c)

{

}

 Lấy chuỗi icon từ truy vấn

public String getIcon(Cursor c)

{

}

Trang 17

17

IV Minh họa kết quả

Hiển thị vị trí người dùng

Cảnh báo người dùng

Để cảnh báo người dùng trước tiên phải chọn vị trí cần đến trên bản đồ:

Chọn 1 vị trí và click vào menu “Điểm đến” để lưu vị trí

Điểm đến là Hồ Tiền – ĐHBKHN (21.004364,105.843378), vị trí hiện tại trên đường Tạ Quang Bửu ĐHBKHN (21.005105,105.843077):

Trang 18

18

Dẫn đường người dùng bằng văn bản

Khi click vào menu “Tìm đường” sẽ hiện ra 2 lựa chọn cho người dùng Khi click button “OK” chương trình sẽ hiển thị thông tin chỉ dẫn

o Chọn 2 vị trí trên bản đồ: Chương trình sẽ hiển thị thông tin dẫn

đường giữa 2 địa điểm đã được chọn trên bản đồ (Chương trình cho phép người dùng lựa chọn tối đã 2 vị trí, khi chọn mỗi vị trí người dùng click vào menu “Điểm đến” để lưu lại

o Nhập 2 địa điểm: Người dùng nhập điểm đầu vào điểm cuối

Dẫn đường người dùng vào âm thanh

Để dẫn đường người dùng trước tiên phải chọn vị trí cần đến trên bản đồ: Chọn 1 vị trí và click vào menu “Điểm đến” để lưu vị trí Sau đó click vào menu “Voice Routing” để nghe thông tin chỉ dẫn

Hiển thị thông tin thời tiết

Khi click vào menu “Thời tiết” sẽ có 3 lựa chọn cho người dùng Khi click vào button “OK” chương trình sẽ hiển thị thông tin thời tiết tại vị trí đã chọn

o Vị trí của bạn: Chương trình sẽ hiển thị thông tin thời tiết tại vị trí

Trang 20

20

Thông qua việc nghiên cứu và thực hiện bài tập lớn chúng em đã thu được nhiều kiến thức thực tế, đồng thời bổ sung thêm những kinh nghiệm quý báu cho công việc sau này Do thời gian có hạn nên báo cáo không thể tránh khỏi những sai sót, rất mong được thầy góp ý bổ sung giúp chúng em hoàn chỉnh đề tài này

Trang 21

21

TÀI LIỆU THAM KHẢO

1 Slide bài giảng của thầy Nguyễn Hồng Quang

Ngày đăng: 28/04/2014, 20:38

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w