国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android SDK離線地圖功能的實(shí)現(xiàn)

2014-07-28 05:08張國海
電腦知識(shí)與技術(shù) 2014年18期
關(guān)鍵詞:手機(jī)

摘要:針對(duì)手機(jī)地圖功能進(jìn)行分析,為了帶來更好的地圖體驗(yàn)并節(jié)省流量,在借鑒百度地圖 Android SDK的基礎(chǔ)上,實(shí)現(xiàn)了一款實(shí)用方便的手機(jī)離線地圖。

關(guān)鍵詞:手機(jī);百度地圖Android SDK;離線地圖

中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)18-4172-03

Realization of Offline Map based on Android SDK

ZHANG Guo-hai

(Guangzhou Civil Aviation College, Guangzhou 510403, China)

Abstract: In order to bring better experience and save flow, based on Baidu map android SDK and the analysis of the function of mobile phone map, implemented a practical and convenient offline mobile map.

Key words: Mobile; Baidu map android SDK; offline map

隨著移動(dòng)網(wǎng)絡(luò)時(shí)代發(fā)展步伐的不斷加快,市面上如街景地圖、高德導(dǎo)航和百度地圖等基于位置服務(wù)(LBS:Location Based Service)軟件給人們生活帶來了實(shí)質(zhì)性的變化。人們出行不再像以前依賴紙質(zhì)地圖和指南針,只需在手機(jī)屏幕上輕松點(diǎn)擊,便可以輕松實(shí)現(xiàn)自主導(dǎo)航[1]。該文中實(shí)現(xiàn)的離線地圖功能是基于百度地圖 Android SDK開發(fā)而成,百度地圖 Android SDK是一套基于Android 2.1及以上版本設(shè)備的應(yīng)用程序接口。 您可以使用該套 SDK開發(fā)適用于Android系統(tǒng)移動(dòng)設(shè)備的地圖應(yīng)用,通過調(diào)用地圖SDK接口,您可以輕松訪問百度地圖服務(wù)和數(shù)據(jù), 構(gòu)建功能豐富、交互性強(qiáng)的地圖類應(yīng)用程序[2]。

1 工程配置

百度地圖Android SDK提供的所有服務(wù)是免費(fèi)的,接口使用無次數(shù)限制。只有申請(qǐng)密鑰(key)后,才可使用百度地圖Android SDK。開發(fā)者可以在http://developer.baidu.com/map/sdkandev-14.htm申請(qǐng)密鑰。開發(fā)離線地圖,申請(qǐng)密鑰后,還要下載jar包和離線地圖。該文所使用的是baidumapapi_v2_4_1.jar包。

1.1 jar包導(dǎo)入到項(xiàng)目

Jar包下載后,要進(jìn)行如下操作才可使用:

1)在工程里新建libs文件夾(若不存在的話),將開發(fā)包里的baidumapapi_v2_1_1.jar拷貝到libs根目錄下,將libapp_BaiduMapApplib_v2_1_1.so拷貝到libs\armeabi目錄下。如圖1所示。

圖1 libs目錄結(jié)構(gòu)

2)項(xiàng)目屬性中Java Build Path→Order and Export中,確定Android Private Libaries與Android Dependencies這兩項(xiàng)前面的選擇框被選上后,確定。

3)菜單Project→clean重新編譯項(xiàng)目后就可以正常使用地圖中的功能進(jìn)行編程了。

1.2 離線地圖導(dǎo)入SD卡

下載的離線包解壓后,把其中的vmp文件夾拷入SD卡根目錄下的BaiduMapSdk文件夾內(nèi)。

2 離線地圖功能的實(shí)現(xiàn)

首先在Manifest中添加使用權(quán)限、Android版本及屏幕支持和對(duì)應(yīng)的開發(fā)密鑰,具體代碼可參考http://developer.baidu.com/map/sdkandev-2.htm。該文開發(fā)的離線地圖有兩個(gè)界面,一個(gè)主界面,用于顯示下載的離線城市地圖,另一個(gè)用于顯示離線城市地圖,可顯示普通地圖、衛(wèi)星圖和實(shí)時(shí)交通圖。

2.1 離線地圖開發(fā)使用的主要類

1)MapView 顯示地圖的視圖,當(dāng)被焦點(diǎn)選中時(shí),它能捕獲按鍵事件和觸摸手勢(shì)去平移和縮放地圖。MapView的創(chuàng)建可以使用在XML布局的方式創(chuàng)建,也可以使用構(gòu)建函數(shù)創(chuàng)建。MapView的生命周期需要與Activity同步,即需要在Activity.onPause中調(diào)用onPause(), 在Activity.onResume中調(diào)用onResume(),在Activity.onDestroy中調(diào)用 destroy()。

2)MapController,地圖控制器,MapController的方法主要是對(duì)地圖的放大縮小,俯視旋轉(zhuǎn),手勢(shì)鍵盤處理,指南針位置,動(dòng)畫等。主要方法有setCenter,函數(shù)原型

public void setCenter(GeoPoint point)功能是在給定的中心點(diǎn)GeoPoint上設(shè)置地圖視圖。

方法setZoom,函數(shù)原型public float setZoom(float zoomLevel)功能是設(shè)置地圖的縮放級(jí)別。這個(gè)值的取值范圍是[3,19]。

3)BmapManager 地圖引擎管理類,BmapManager具有Application級(jí)別的生命周期,BMapManager應(yīng)在sdk功能模塊使用前初始化, 并且在sdk功能模塊銷毀后銷毀。

4)MKOfflineMap 實(shí)現(xiàn)離線地圖服務(wù),用于離線地圖的管理。主要方法有:

Init,函數(shù)原型public boolean init(MapController mapCtr, MKOfflineMapListener listener)

初使化MKOfflineMap ,mapCtr參數(shù)為初始化離線地圖模塊所需要的MapController對(duì)象。

scan,函數(shù)原型public int scan(boolean bDeleteFailed)作用是導(dǎo)入離線地圖包。

getAllUpdateInfo,函數(shù)原型

public java.util.ArrayList getAllUpdateInfo()作用是返回各城市離線地圖更新信息。

getUpdateInfo,函數(shù)原型public MKOLUpdateElement getUpdateInfo(int cityID)返回指定城市ID離線地圖更新信息。

remove,函數(shù)原型public boolean remove(int cityID)刪除指定城市ID的離線地圖。

2.2 application類

因?yàn)榈貓D引擎管理類BmapManager具有Application級(jí)別的生命周期,BMapManager應(yīng)在sdk功能模塊使用前初始化, 并且在sdk功能模塊銷毀后銷毀,因此要構(gòu)造一個(gè)繼承application類來實(shí)現(xiàn)對(duì)BmapManager管理。BmapManager初始化放在繼承application類中實(shí)現(xiàn)。

2.3 界面設(shè)計(jì)

界面分為主界面和離線地圖顯示界面。主界面如圖2所示:

圖2 主界面 圖3 地圖顯示界面

圖2中,“已下載城市地圖”TextView控件下面為一個(gè)ListView控件,用于顯示已經(jīng)下載的城市地圖列表。圖3中“普通圖”、“衛(wèi)星圖”和“交通圖”用于切換顯示不同的地圖,下面MapView控件用于顯示選擇的地圖。

2.4 離線地圖功能實(shí)現(xiàn)

2.4.1離線地圖的顯示

離線地圖的顯示在一個(gè)繼承自Activity類中實(shí)現(xiàn)。首先在類中實(shí)例化兩個(gè)對(duì)象MapView,MapController,用于地圖的控制和顯示。然后在OnCreate函數(shù)中對(duì)這兩個(gè)對(duì)象進(jìn)行初始化。

初始化離線地圖的核心代碼如下:

myapplication app = (myapplication)this.getApplication();

if (app.mBMapManager == null) {

app.mBMapManager = new BMapManager(getApplicationContext());

// 如果BMapManager沒有初始化則初始化BMapManager

app.mBMapManager.init(new myapplication.MyGeneralListener());

}

setContentView(R.layout.display_map);

mMapView = (MapView)findViewById(R.id.bmapView);

mMapController = mMapView.getController();

// 設(shè)置地圖縮放級(jí)別

mMapView.setBuiltInZoomControls(true);

mMapController.setZoom(12);

GeoPoint p ;

double cLat = 39.945 ;

double cLon = 116.404 ;

Intent intent = getIntent();

if ( intent.hasExtra("x") && intent.hasExtra("y") ){

Bundle b = intent.getExtras();

p = new GeoPoint(b.getInt("y"), b.getInt("x"));

}else{

p = new GeoPoint((int)(cLat * 1E6), (int)(cLon * 1E6));

}

mMapController.setCenter(p);

并重寫onDestroy(),onPause()和onResume()方法。onResume()方法如下:

protected void onResume(){

mMapView.onResume();

myapplication app = (myapplication)this.getApplication();

if(app.mBMapManager!=null){

app.mBMapManager.start();

}

super.onResume();

}

2.4.2顯示模式的切換

顯示模式的切換可在“普通圖”、“衛(wèi)星圖”和“交通圖”這三個(gè)按鈕控件的消息響應(yīng)函數(shù)中處理。是否打開路況圖可調(diào)用MapView類中的成員函數(shù)setTraffic(boolean on)來設(shè)置,是否打開衛(wèi)星圖可調(diào)用MapView類中的成員函數(shù)setSatellite(boolean on)來設(shè)置。程序在真機(jī)上運(yùn)行效果如圖4和圖5所示。

圖4 衛(wèi)星圖 圖5 普通圖

3 結(jié)束語

本文利用了Android手機(jī)平臺(tái)和百度地圖Android SDK,完成了離線地圖功能的實(shí)現(xiàn)。程序在Android Developer Tools v22.3.0平臺(tái)上,利用真機(jī)進(jìn)行了測(cè)試,效果良好。

參考文獻(xiàn):

[1] 李瑞宣,王山東,徐志遠(yuǎn),等. 基于Android平臺(tái)定位系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J]. 信息技術(shù),2013(12):187-190.

[2]百度地圖Android SDK開發(fā)指南[EB/OL]. http://developer.baidu.com/map/sdk-android.htm.

Init,函數(shù)原型public boolean init(MapController mapCtr, MKOfflineMapListener listener)

初使化MKOfflineMap ,mapCtr參數(shù)為初始化離線地圖模塊所需要的MapController對(duì)象。

scan,函數(shù)原型public int scan(boolean bDeleteFailed)作用是導(dǎo)入離線地圖包。

getAllUpdateInfo,函數(shù)原型

public java.util.ArrayList getAllUpdateInfo()作用是返回各城市離線地圖更新信息。

getUpdateInfo,函數(shù)原型public MKOLUpdateElement getUpdateInfo(int cityID)返回指定城市ID離線地圖更新信息。

remove,函數(shù)原型public boolean remove(int cityID)刪除指定城市ID的離線地圖。

2.2 application類

因?yàn)榈貓D引擎管理類BmapManager具有Application級(jí)別的生命周期,BMapManager應(yīng)在sdk功能模塊使用前初始化, 并且在sdk功能模塊銷毀后銷毀,因此要構(gòu)造一個(gè)繼承application類來實(shí)現(xiàn)對(duì)BmapManager管理。BmapManager初始化放在繼承application類中實(shí)現(xiàn)。

2.3 界面設(shè)計(jì)

界面分為主界面和離線地圖顯示界面。主界面如圖2所示:

圖2 主界面 圖3 地圖顯示界面

圖2中,“已下載城市地圖”TextView控件下面為一個(gè)ListView控件,用于顯示已經(jīng)下載的城市地圖列表。圖3中“普通圖”、“衛(wèi)星圖”和“交通圖”用于切換顯示不同的地圖,下面MapView控件用于顯示選擇的地圖。

2.4 離線地圖功能實(shí)現(xiàn)

2.4.1離線地圖的顯示

離線地圖的顯示在一個(gè)繼承自Activity類中實(shí)現(xiàn)。首先在類中實(shí)例化兩個(gè)對(duì)象MapView,MapController,用于地圖的控制和顯示。然后在OnCreate函數(shù)中對(duì)這兩個(gè)對(duì)象進(jìn)行初始化。

初始化離線地圖的核心代碼如下:

myapplication app = (myapplication)this.getApplication();

if (app.mBMapManager == null) {

app.mBMapManager = new BMapManager(getApplicationContext());

// 如果BMapManager沒有初始化則初始化BMapManager

app.mBMapManager.init(new myapplication.MyGeneralListener());

}

setContentView(R.layout.display_map);

mMapView = (MapView)findViewById(R.id.bmapView);

mMapController = mMapView.getController();

// 設(shè)置地圖縮放級(jí)別

mMapView.setBuiltInZoomControls(true);

mMapController.setZoom(12);

GeoPoint p ;

double cLat = 39.945 ;

double cLon = 116.404 ;

Intent intent = getIntent();

if ( intent.hasExtra("x") && intent.hasExtra("y") ){

Bundle b = intent.getExtras();

p = new GeoPoint(b.getInt("y"), b.getInt("x"));

}else{

p = new GeoPoint((int)(cLat * 1E6), (int)(cLon * 1E6));

}

mMapController.setCenter(p);

并重寫onDestroy(),onPause()和onResume()方法。onResume()方法如下:

protected void onResume(){

mMapView.onResume();

myapplication app = (myapplication)this.getApplication();

if(app.mBMapManager!=null){

app.mBMapManager.start();

}

super.onResume();

}

2.4.2顯示模式的切換

顯示模式的切換可在“普通圖”、“衛(wèi)星圖”和“交通圖”這三個(gè)按鈕控件的消息響應(yīng)函數(shù)中處理。是否打開路況圖可調(diào)用MapView類中的成員函數(shù)setTraffic(boolean on)來設(shè)置,是否打開衛(wèi)星圖可調(diào)用MapView類中的成員函數(shù)setSatellite(boolean on)來設(shè)置。程序在真機(jī)上運(yùn)行效果如圖4和圖5所示。

圖4 衛(wèi)星圖 圖5 普通圖

3 結(jié)束語

本文利用了Android手機(jī)平臺(tái)和百度地圖Android SDK,完成了離線地圖功能的實(shí)現(xiàn)。程序在Android Developer Tools v22.3.0平臺(tái)上,利用真機(jī)進(jìn)行了測(cè)試,效果良好。

參考文獻(xiàn):

[1] 李瑞宣,王山東,徐志遠(yuǎn),等. 基于Android平臺(tái)定位系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J]. 信息技術(shù),2013(12):187-190.

[2]百度地圖Android SDK開發(fā)指南[EB/OL]. http://developer.baidu.com/map/sdk-android.htm.

Init,函數(shù)原型public boolean init(MapController mapCtr, MKOfflineMapListener listener)

初使化MKOfflineMap ,mapCtr參數(shù)為初始化離線地圖模塊所需要的MapController對(duì)象。

scan,函數(shù)原型public int scan(boolean bDeleteFailed)作用是導(dǎo)入離線地圖包。

getAllUpdateInfo,函數(shù)原型

public java.util.ArrayList getAllUpdateInfo()作用是返回各城市離線地圖更新信息。

getUpdateInfo,函數(shù)原型public MKOLUpdateElement getUpdateInfo(int cityID)返回指定城市ID離線地圖更新信息。

remove,函數(shù)原型public boolean remove(int cityID)刪除指定城市ID的離線地圖。

2.2 application類

因?yàn)榈貓D引擎管理類BmapManager具有Application級(jí)別的生命周期,BMapManager應(yīng)在sdk功能模塊使用前初始化, 并且在sdk功能模塊銷毀后銷毀,因此要構(gòu)造一個(gè)繼承application類來實(shí)現(xiàn)對(duì)BmapManager管理。BmapManager初始化放在繼承application類中實(shí)現(xiàn)。

2.3 界面設(shè)計(jì)

界面分為主界面和離線地圖顯示界面。主界面如圖2所示:

圖2 主界面 圖3 地圖顯示界面

圖2中,“已下載城市地圖”TextView控件下面為一個(gè)ListView控件,用于顯示已經(jīng)下載的城市地圖列表。圖3中“普通圖”、“衛(wèi)星圖”和“交通圖”用于切換顯示不同的地圖,下面MapView控件用于顯示選擇的地圖。

2.4 離線地圖功能實(shí)現(xiàn)

2.4.1離線地圖的顯示

離線地圖的顯示在一個(gè)繼承自Activity類中實(shí)現(xiàn)。首先在類中實(shí)例化兩個(gè)對(duì)象MapView,MapController,用于地圖的控制和顯示。然后在OnCreate函數(shù)中對(duì)這兩個(gè)對(duì)象進(jìn)行初始化。

初始化離線地圖的核心代碼如下:

myapplication app = (myapplication)this.getApplication();

if (app.mBMapManager == null) {

app.mBMapManager = new BMapManager(getApplicationContext());

// 如果BMapManager沒有初始化則初始化BMapManager

app.mBMapManager.init(new myapplication.MyGeneralListener());

}

setContentView(R.layout.display_map);

mMapView = (MapView)findViewById(R.id.bmapView);

mMapController = mMapView.getController();

// 設(shè)置地圖縮放級(jí)別

mMapView.setBuiltInZoomControls(true);

mMapController.setZoom(12);

GeoPoint p ;

double cLat = 39.945 ;

double cLon = 116.404 ;

Intent intent = getIntent();

if ( intent.hasExtra("x") && intent.hasExtra("y") ){

Bundle b = intent.getExtras();

p = new GeoPoint(b.getInt("y"), b.getInt("x"));

}else{

p = new GeoPoint((int)(cLat * 1E6), (int)(cLon * 1E6));

}

mMapController.setCenter(p);

并重寫onDestroy(),onPause()和onResume()方法。onResume()方法如下:

protected void onResume(){

mMapView.onResume();

myapplication app = (myapplication)this.getApplication();

if(app.mBMapManager!=null){

app.mBMapManager.start();

}

super.onResume();

}

2.4.2顯示模式的切換

顯示模式的切換可在“普通圖”、“衛(wèi)星圖”和“交通圖”這三個(gè)按鈕控件的消息響應(yīng)函數(shù)中處理。是否打開路況圖可調(diào)用MapView類中的成員函數(shù)setTraffic(boolean on)來設(shè)置,是否打開衛(wèi)星圖可調(diào)用MapView類中的成員函數(shù)setSatellite(boolean on)來設(shè)置。程序在真機(jī)上運(yùn)行效果如圖4和圖5所示。

圖4 衛(wèi)星圖 圖5 普通圖

3 結(jié)束語

本文利用了Android手機(jī)平臺(tái)和百度地圖Android SDK,完成了離線地圖功能的實(shí)現(xiàn)。程序在Android Developer Tools v22.3.0平臺(tái)上,利用真機(jī)進(jìn)行了測(cè)試,效果良好。

參考文獻(xiàn):

[1] 李瑞宣,王山東,徐志遠(yuǎn),等. 基于Android平臺(tái)定位系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J]. 信息技術(shù),2013(12):187-190.

[2]百度地圖Android SDK開發(fā)指南[EB/OL]. http://developer.baidu.com/map/sdk-android.htm.

猜你喜歡
手機(jī)
利用數(shù)碼相機(jī)或手機(jī)自主開發(fā)物理教學(xué)資源的研究
手機(jī)鋰離子電池充電電路的設(shè)計(jì)與實(shí)現(xiàn)