Android中調用百度地圖

1、調用百度地圖 --第一種方法

一、下載百度地圖SDKphp

SDK能夠拆分下載,須要使用那一部分功能就下載相應包含的SDK,以下圖java

核心的的jar 和so包,放在工程中的libs目錄下android

二、申請key

註冊百度帳號申請key,格式以下:sha1值+";"+包名。api

包名指的是AndroidManifest.xml 中定義的名稱 ,並不是工程包名安全

三、將百度地圖加入工程

(1)在application中添加開發密鑰app

<application   <meta-dataeclipse

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

android:value="申請的key" />工具

</application>佈局

(2)添加所需權限

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

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

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

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

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

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >

</uses-permission>

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

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

(3)添加百度地圖服務

在mainfest的application標籤中配置地圖服務

<service

android:name="com.baidu.location.f"

android:enabled="true"

android:process=":remote" >

</service>

(4)在佈局xml文件中添加地圖控件

(5)在應用程序建立時初始化 SDK引用的Context 全局變量

     public class MainActivity extends Activity {     MapView mMapView = null;     @Override   protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各組件以前初始化context信息,傳入ApplicationContext   //注意該方法要再setContentView方法以前實現          SDKInitializer.initialize(getApplicationContext());         setContentView(R.layout.activity_main); //獲取地圖控件引用          mMapView = (MapView) findViewById(R.id.bmapView); }     @Override   protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理          mMapView.onDestroy(); }     @Override   protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理          mMapView.onResume(); }     @Override   protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理          mMapView.onPause(); } }

運行後就能夠拿到百度地圖圖層

四、定位當前位置

一、開啓定位圖層

// 開啓定位圖層

mBaiduMap.setMyLocationEnabled(true);

二、開啓定位功能

mLocClient = new LocationClient(context);

mLocClient.registerLocationListener(myListener);

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);// 打開gps

option.setCoorType("bd09ll"); // 設置座標類型

option.setScanSpan(1000);

mLocClient.setLocOption(option);

mLocClient.start();

    三、重寫監聽器

繼承BDLocationListener監聽器,重寫onReceiveLocation方法,這樣就能夠拿到包含在BDLocation中的定位信息,具體參看BDLocation類

四、定位當前位置

/**

* 設置地圖操做點中心

*/

public void setCenterPosition(Point p){

LatLng ll = new LatLng(Double.parseDouble(p.getX()),

Double.parseDouble(p.getY()));

MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(new                        MapStatus.Builder().target(ll).build());

//mBaiduMap.setMapStatus(u);

//已動畫的方式切換

mBaiduMap.animateMapStatus(u);

}

利用工廠類,更新地圖狀態,顯示當前位置。

五、利用百度地圖標繪

在百度地圖上標繪基本圖形,可查看相關API文檔。

在本項目中,標繪了圓、線、點。(OverlayOptions 接口類,通常利用其子類繪製)

一、標繪線

OverlayOptions ooPolyline = new PolylineOptions().width(width)

.color(color).points(points);

mBaiduMap.addOverlay(ooPolyline);

二、標繪圓

LatLng llCircle = new LatLng(Double.parseDouble(centerPoint.getX()),

Double.parseDouble(centerPoint.getY()));

OverlayOptions ooCircle = new CircleOptions().fillColor(fillColor)

.center(llCircle).stroke(new Stroke(5, color))

.radius(rad);

mBaiduMap.addOverlay(ooCircle);

三、標繪點(並不是基本方法)

LatLng ll = new LatLng(Double.parseDouble(centerPoint.getX()),

Double.parseDouble(centerPoint.getY()));

OverlayOptions ooA = new MarkerOptions().position(ll).icon(bd)

.zIndex(9);

return (Marker) mBaiduMap.addOverlay(ooA);

 

 

2、申請AK(API Key)--第二種方法

    要想使用百度地圖sdk,就必須申請一個百度地圖的api key。申請流程挺簡單的。

    首先註冊成爲百度的開發者,而後打開http://lbsyun.baidu.com/apiconsole/key這個網址,添加應用:

    建立應用最重要的一步是【安全碼】。安全碼是有【數字簽名】和【;】和【包名】組成。包名就是你所建立的項目的包的結構,是指AndroidManifest.xml中的manifest標籤下的package的值。

    數字簽名指Android的簽名證書的SHA1值。

    獲取數字簽名有兩種方法:

    1. 第一種方法:使用eclipse查看。

    打開eclipse的preferences菜單,在Android下的【Build】中能夠看到SHA1的值,以下圖:

    2. 第二種方法:使用keytool工具(jdk自帶)查看。

    在控制檯下,輸入【cd .android】,而後輸入【keytool -list -v -keystore debug.keystore】回車,而後提示你輸入【祕鑰庫口令】,輸入【android】回車而後就會顯示SHA1的值。

數字簽名搞定了,而後建立應用就ok了。建立完成以後,應用列表中會顯示相應的AK,也就是api key。

2、下載SDK開發包

    打開http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download網址下載sdk,能夠所有下載,也能夠自定義下載。從V2.3.0以後的版本,SDK的開發包以可定製的形式提供下載,用戶能夠根據本身的項目須要勾選相應的功能下載對應的SDK開發包。

3、在android項目中引用百度SDK

    1. 將開發包中的jar包和so文件添加到libs文件下。

    2. 在AndroidManifest.xml中添加開發祕鑰和所需權限。

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. <application  
  2.         android:allowBackup="true"
  3.         android:icon="@drawable/ic_launcher"
  4.         android:label="@string/app_name"
  5.         android:theme="@style/AppTheme" >  
  6.         <meta-data  
  7.             android:name="com.baidu.lbsapi.API_KEY"
  8.             android:value="填寫你申請的AK" /> 

權限:

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. <!-- 百度API所需權限 -->  
  2.     <uses-permission android:name="android.permission.GET_ACCOUNTS" />  
  3.     <uses-permission android:name="android.permission.USE_CREDENTIALS" />  
  4.     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
  5.     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
  6.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  7.     <uses-permission android:name="android.permission.INTERNET" />  
  8.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  9.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  10.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  11.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  12.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  13.     <uses-permission android:name="android.permission.BROADCAST_STICKY" />  
  14.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  15.     <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

3. 在佈局文件中添加地圖控件:

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. <com.baidu.mapapi.map.MapView  
  2.         android:id="@+id/bmapview"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="match_parent"
  5.         android:clickable="true" /> 

4. 在應用程序建立時初始化SDK引用的Context全局變量。

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {  
  3. super.onCreate(savedInstanceState);  
  4.     requestWindowFeature(Window.FEATURE_NO_TITLE);  
  5. //
  6.     SDKInitializer.initialize(getApplicationContext());  
  7.     setContentView(R.layout.activity_main);  
  8.     init();  

這裏須要注意一下:initialize方法中必須傳入的是ApplicationContext,傳入this,或者MAinActivity.this都不行,否則會報運行時異常,因此百度建議把該方法放到Application的初始化方法中。

     而後重寫activity的生命週期的幾個方法來管理地圖的生命週期。在activity的onResume、onPause、onDestory方法中分別執行mapview的onReusme、onPause、onDestory方法。

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. package com.bdmap.view;  
  2. import com.baidu.mapapi.SDKInitializer;  
  3. import com.baidu.mapapi.map.BaiduMap;  
  4. import com.baidu.mapapi.map.MapView;  
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.Window;  
  9. public class MainActivity extends Activity {  
  10. // 百度地圖控件
  11. private MapView mMapView = null;  
  12. // 百度地圖對象
  13. private BaiduMap bdMap;  
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {  
  16. super.onCreate(savedInstanceState);  
  17.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  18. //
  19.         SDKInitializer.initialize(getApplicationContext());  
  20.         setContentView(R.layout.activity_main);  
  21.         init();  
  22.     }  
  23. /**
  24.      * 初始化方法
  25.      */
  26. private void init() {  
  27.         mMapView = (MapView) findViewById(R.id.bmapview);  
  28.     }  
  29. @Override
  30. protected void onResume() {  
  31. super.onResume();  
  32.         mMapView.onResume();  
  33.     }  
  34. @Override
  35. protected void onPause() {  
  36. super.onPause();  
  37.         mMapView.onPause();  
  38.     }  
  39. @Override
  40. protected void onDestroy() {  
  41.         mMapView.onDestroy();  
  42.         mMapView = null;  
  43. super.onDestroy();  
  44.     }  

完成以上步驟,此時就能夠完成一個簡單的」Hello Map「程序了。

3、普通地圖和衛星地圖切換

   百度地圖將地圖的類型分爲兩種:普通矢量地圖和衛星圖。

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. mMapView = (MapView) findViewById(R.id.bmapView);    
  2. mBaiduMap = mMapView.getMap();    
  3. //普通地圖  
  4. mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);    
  5. //衛星地圖  
  6. mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); 

4、顯示實時交通圖(路況圖)

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. //開啓交通圖   
  2. mBaiduMap.setTrafficEnabled(true); 

5、顯示熱力圖

    熱力圖就是以特殊高亮的形式顯示訪客熱衷的頁面區域和訪客所在的地理區域的圖示。通俗來講就是顯示地圖上某一塊區域的人的密集程度。相似於下圖所示:

[java] view plain copy

在CODE上查看代碼片派生到個人代碼片

  1. //開啓熱力圖   
  2. mBaiduMap.setBaiduHeatMapEnabled(true);
相關文章
相關標籤/搜索