1. 程式人生 > >android 百度地圖

android 百度地圖

一、基本概念:

(一)、百度地圖:

百度地圖 Android SDK是一套基於Android 2.1及以上版本裝置的應用程式介面。 您可以使用該套 SDK開發適用於Android系統移動裝置的地圖應用,通過呼叫地圖SDK介面,您可以輕鬆訪問百度地圖服務和資料, 構建功能豐富、互動性強的地圖類應用程式。

 

百度地圖Android SDK提供的所有服務是免費的,介面使用無次數限制。您需申請金鑰(key)後, 才可使用百度地圖Android SDK。

 

 

(二)、LBS:(Location based Service)基於位置的服務

 

基於位置的服務,它是通過電信移動運營商的無線電通訊網路(如GSM網、CDMA網)或外部定位方式(如GPS)獲取移動終端使用者的位置資訊(地理座標,或大地座標),在地理資訊系統(外語縮寫:GIS、外語全稱:Geographic Information System)平臺的支援下,為使用者提供相應服務的一種增值業務。

 

 

 

二、百度地圖使用步驟:【參照(http://developer.baidu.com/map/sdk-android.htm)】

 

(一)、HelloBaiduMap:

 

1、第一步:申請百度地圖金鑰(API_KEY):

http://developer.baidu.com/map/sdk-android.htm

 

 

2、第二步:在工程裡新建libs資料夾,將開發包裡的baidumapapi_vX_X_X.jar拷貝到libs根目錄下,將libBaiduMapSDK_vX_X_X.so拷貝到libs\armeabi目錄下(官網demo裡已有這兩個檔案,如果要整合到自己的工程裡,就需要自己新增),拷貝完成後的工程目錄如下圖所示; 

 

注:liblocSDK3.so和locSDK_3.1.jar為百度定位SDK所使用資源,開發者可根據實際需求自行新增。

 

 

3、第三步:在AndroidManifest中新增開發金鑰、所需許可權等資訊; 

 

<application

 

        <meta-data  

 

        android:name="com.baidu.lbsapi.API_KEY"  

 

        android:value="P3G69b5s87YG5M31f8A7oyLW"/>

 

    </application>

 

 

 

<uses-permissionandroid:name="android.permission.GET_ACCOUNTS"/>  

 

<uses-permissionandroid:name="android.permission.USE_CREDENTIALS"/>  

 

<uses-permissionandroid:name="android.permission.MANAGE_ACCOUNTS"/>  

 

<uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/>  

 

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>  

 

<uses-permissionandroid:name="android.permission.INTERNET"/>  

 

<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS"/>  

 

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>  

 

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>  

 

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>  

 

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

<uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/>  

 

<uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/>  

 

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

 

 

4、第四步:在佈局檔案中新增地圖控制元件:

 

    <com.baidu.mapapi.map.MapView  

 

    android:id="@+id/mapView"  

 

    android:layout_width="match_parent"  

 

    android:layout_height="match_parent"  

 

    android:clickable="true"/>

 

 

5、第五步:在應用程式建立時初始化 SDK引用的Context 全域性變數: 

 

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext

// 注意該方法要再setContentView方法之前實現

SDKInitializer.initialize(getApplicationContext());

 

// 裝載佈局檔案

setContentView(R.layout.activity_main);

}

 

 

6、第六步:建立地圖Activity,管理地圖生命週期:

 

publicclass MainActivity extends Activity {

 

private MapView mapView;

 

 

@Override

 

protectedvoid onCreate(Bundle savedInstanceState) {

 

super.onCreate(savedInstanceState);

 

// 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext

 

// 注意該方法要再setContentView方法之前實現

 

SDKInitializer.initialize(getApplicationContext());

 

 

// 裝載佈局檔案

 

setContentView(R.layout.activity_main);

 

mapView = (MapView) findViewById(R.id.mapView);

 

}

 

 

@Override

 

protectedvoid onResume() {

 

super.onResume();

 

mapView.onResume();

 

}

 

 

 

@Override

 

protectedvoid onPause() {

 

super.onPause();

 

mapView.onPause();

 

}

 

 

 

@Override

 

protectedvoid onDestroy() {

 

super.onDestroy();

 

mapView.onDestroy();

 

}

 

}

 

 

(二)、基礎地圖:

1、實現基礎地圖的操作步驟:

  1. 佈局檔案中使用MapView;
  2. 初始化SDK,並檢查Key的合法性;
    1. SDKInitializer.initialize(getApplicationContext()); 
    2. checkKEY();
  3. 初始化BaiduMap物件;
    1. MapView進行findViewById();
    2. MapView物件呼叫getMap(),返回BaiduMap;
  4. 設定BaiduMap;
    1. setMapType();
    2. setTrafficEnabled();

 

 

(三)、POI搜尋:

1、實現POI搜尋的操作步驟:

  1. 佈局檔案中使用fragment,用來實現對BaiduMap的載入;
    1. class="com.baidu.mapapi.map.SupportMapFragment"
  2. 當前Activity繼承於FragementActivity
  3. 初始化SDK,並檢查Key的合法性;
    1. SDKInitializer.initialize(getApplicationContext())
    2. checkKEY();
    3. 備註:該兩句話必須放在setContentView()之前。
  4. 初始化BaiduMap物件;
    1. baiduMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiduMap();
  5. 初始化PoiSearch物件;
    1. PoiSearch.newInstance();
  6. PoiSearch物件設定監聽器
    1. setOnGetPoiSearchResultListener(),重寫onGetPoiResult()方法;
  7. 自定義PoiOverlay類,實現對每個標記的單擊監聽;
    1. 通過onPoiClick()方法,獲取每個PoiInfo中的資訊。如果這個物件中包含有明細,可以開啟一個新頁面來展示興趣點的詳細介紹。
  8. 在AndroidManifest.xml檔案中配置PlaceCaterActivity頁面;
    1. 該頁面是Baidu提供的POI的明細介紹頁面。
  9. PoiSearch物件呼叫searchInBound()、searchInCity() 、 searchNearby()方法實現興趣點查詢。

 

【總結:】核心步驟:

  • 例項化BaiduMap,PoiSearch物件;
  • PoiSearch物件設定OnGetPoiSearchResultListener()監聽;
  • PoiSearch物件呼叫searchInCity()方法觸發監聽。

 

 

(四)、線路規劃:

1、實現路線規劃的操作步驟:

  1. 佈局檔案中使用MapView,用來實現對BaiduMap的載入;
  2. 初始化SDK,並檢查Key的合法性;
    1. SDKInitializer.initialize(getApplicationContext()); 
    2. checkKEY();
  3. 初始化MapView;
    1. 呼叫findViewById()
  4. 初始化BaiduMap物件;
    1. baiduMap = MapView物件.getMap();
  5. 初始化RoutePlanSearch物件;
    1. RoutePlanSearch.newInstance();
  6. RoutePlanSearch物件設定監聽器;
    1. setOnGetRoutePlanResultListener(),重寫onGetWalkingRouteResult()、onGetTransitRouteResult()、onGetDrivingRouteResult()方法;
  7. 自定義三種RouteOverlay類(WalkingRouteOverlay、TransitRouteOverlay、DrivingRouteOverlay);[可選]
  8. 呼叫RoutePlanSearch物件的三種方法(drivingSearch()、transitSearch()、walkingSearch())實現路線規劃。

 

【總結:】核心步驟:

  • 例項化BaiduMap,RoutePlanSearch物件;
  • RoutePlanSearch物件設定OnGetRoutePlanResultListener監聽;
  • RoutePlanSearch物件呼叫drivingSearch()、transitSearch()、walkingSearch()方法觸發監聽。

 

(五)、公交查詢:

1、實現公交查詢的操作步驟:

  1. 佈局檔案中使用fragment,用來實現對BaiduMap的載入;
    1. class="com.baidu.mapapi.map.SupportMapFragment"
  2. 初始化SDK,並檢查Key的合法性;
    1. SDKInitializer.initialize(getApplicationContext()); 
    2. checkKEY();
  3. 當前Activity繼承於FragementActivity
  4. 初始化BaiduMap物件;
    1. baiduMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_poi_map)).getBaiduMap();
  5. 初始化PoiSearch物件/初始化BusLineSearch物件;
    1. PoiSearch.newInstance();
    2. BusLineSearch.newInstance();
  6. BusLineSearch物件設定監聽器;
    1. setOnGetBusLineSearchResultListener(),重寫onGetBusLineResult()方法;
  7. 給PoiSearch物件設定監聽器;
    1. setOnGetPoiSearchResultListener(),重寫onGetPoiResult()方法;
    2. 在這個監聽器中呼叫BusLineSearch物件的searchBusLine()方法;
  8. 給按鈕增加單擊監聽事件,實現PoiSearch物件的searchInBound()、searchInCity() 、 searchNearby()方法實現興趣點查詢。

【總結:】核心步驟:

  • 例項化BaiduMap、PoiSearch物件及BusLineSearch物件;
  • PoiSearch物件設定OnGetPoiSearchResultListener()監聽;BusLineSearch物件設定OnGetBusLineSearchResultListener監聽;
  • 在PoiSearch物件的監聽回撥方法onGetPoiResult()中呼叫busLineSearch物件的searchBusLine()方法;
  • PoiSearch物件呼叫searchInCity()方法觸發整個監聽。

 

【備註:】

        整體思路:先呼叫POI查詢,在POI查詢中的監聽器中執行BusLine查詢