1. 程式人生 > >百度地圖API應用之——利用定位SDK和地圖SDK來進行定位和顯示當前位置

百度地圖API應用之——利用定位SDK和地圖SDK來進行定位和顯示當前位置

在專案開發中,尤其是O2O或者體育運動類專案的APP開發過程中,經常會出現利用GPS定位獲取當前位置並在地圖上顯示的情況,下面就來結合實際的例子來簡要介紹一下如何實現這個功能,使用的是百度地圖最新的地圖SDK(baidumapapi_v2_4_1)和定位SDK(locSDK_4.1) ,這個版本的sdk作了點小修改,無需在初始化時傳入key。

一、先看下實際效果圖吧,圖片最具有說服力。


二、準備工作。

下載最新的百度Android SDK和定位SDK,請參考百度地圖API 官網

配置相關引數

1、申請金鑰,申請步驟官網也有詳細介紹,請參考http://developer.baidu.com/map/sdkandev-14.htm

2、工程配置。

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

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


第二步:在工程屬性->Java Build Path->Libraries中選擇“Add External JARs”,選定baidumapapi_vX_X_X.jar,確定後返回。

    通過以上兩步操作後,您就可以正常使用百度地圖SDK為您提供的全部功能了。

注意:由於adt外掛升級,若您使用Eclipse adt 22的話,需要對開發環境進行相應的設定,方法如下:

1. 在Eclipse 中選中工程,右鍵選 Properties->Java Build Path->Order and Export 使 Android Private Libraries處於勾選狀態;

2. Project -> clean-> clean all .

三 、顯示地圖

百度地圖SDK為開發者提供了便捷的顯示百度地圖資料的介面,通過以下幾步操作,即可在您的應用中使用百度地圖資料:

    第一步:建立並配置工程(具體方法參見工程配置部分的介紹);

    第二步:在Manifest中新增使用許可權、Android版本支援和對應的開發金鑰;

    常用使用許可權如下(開發者可根據自身程式需求,新增所需許可權):

<!--使用網路功能所需許可權  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
</uses-permission>
<!-- SDK離線地圖和cache功能需要讀寫外部儲存器 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS">
</uses-permission>
<!-- 獲取設定資訊和詳情頁直接撥打電話需要以下許可權  -->
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
<!-- 使用定位功能所需許可權,demo已整合百度定位SDK,不使用定位功能可去掉以下6項 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_GPS"/>                  
            

 配置Activity:
<activity android:name=".MapDemo"
          android:screenOrientation="sensor"
          android:configChanges="orientation|keyboardHidden">
</activity>

  新增螢幕及版本支援:
<supports-screens android:largeScreens="true"
            android:normalScreens="true"
            android:smallScreens="true"
            android:resizeable="true"
            android:anyDensity="true"/>
<uses-sdk android:minSdkVersion="7"></uses-sdk>

 新增對應的開發金鑰: 開發金鑰就是前面申請的金鑰
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發金鑰">
</meta-data>

第三步:在佈局xml檔案中新增地圖控制元件,佈局檔案儲存為activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
          
            <com.baidu.mapapi.map.MapView android:id="@+id/mapview"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:clickable="true" />
</LinearLayout>

 第四步:初始化地圖Activity、使用Key:

    在MyMapActivity中定義成員變數:

private BMapManager manager = null;
	private MapView mMapView = null;

	private double latitude;
	private double longitude;
	private BDLocationListener myListener;

	private LocationClient mlLocationClient;
	private static final int UPDATE_TIME = 5000;

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		initMap();// 初始化百度地圖引擎
		
		setContentView(R.layout.activity_main);
		
		initView();// 初始化顯示檢視
	}

第五步:初始化百度地圖引擎  注意:一定要在setContentview之前初始化引擎,否則就會報錯
private void initMap() {
<span style="WHITE-SPACE: pre">		</span>if (manager == null) {
<span style="WHITE-SPACE: pre">			</span>manager = new BMapManager(getApplicationContext());


<span style="WHITE-SPACE: pre">			</span>manager.init(new MKGeneralListener() {


<span style="WHITE-SPACE: pre">				</span>@Override
<span style="WHITE-SPACE: pre">				</span>public void onGetPermissionState(int iError) {
<span style="WHITE-SPACE: pre">					</span>if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
<span style="WHITE-SPACE: pre">						</span>Toast.makeText(getApplicationContext(), "授權失敗", 0)
<span style="WHITE-SPACE: pre">								</span>.show();
<span style="WHITE-SPACE: pre">					</span>}
<span style="WHITE-SPACE: pre">				</span>}


<span style="WHITE-SPACE: pre">				</span>@Override
<span style="WHITE-SPACE: pre">				</span>public void onGetNetworkState(int iError) {
<span style="WHITE-SPACE: pre">					</span>if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
<span style="WHITE-SPACE: pre">						</span>Toast.makeText(getApplicationContext(), "網路連線錯誤", 0)
<span style="WHITE-SPACE: pre">								</span>.show();
<span style="WHITE-SPACE: pre">					</span>}
<span style="WHITE-SPACE: pre">				</span>}
<span style="WHITE-SPACE: pre">			</span>});
<span style="WHITE-SPACE: pre">		</span>}
<span style="WHITE-SPACE: pre">	</span>}

第六步:初始化顯示地圖
private void initView() {
		mMapView = (MapView) findViewById(R.id.mapview);
		mMapView.setBuiltInZoomControls(true);

		mlLocationClient = new LocationClient(this);

		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true); // 是否開啟GPS
		option.getAddrType();
		option.setCoorType("bd09ll"); // 設定返回值的座標型別。
		option.setPriority(LocationClientOption.NetWorkFirst); // 設定定位優先順序
		option.setProdName("demo"); // 設定產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效準確的定位服務。
		option.setScanSpan(UPDATE_TIME); // 設定定時定位的時間間隔。單位毫秒
		option.setNeedDeviceDirect(true);// 返回的定位結果包含手機機頭的方向
		mlLocationClient.setLocOption(option);

		myListener = new MyLocationListener();
		mlLocationClient.registerLocationListener(myListener); // 註冊監聽函式

		mlLocationClient.start();

		if (mlLocationClient != null && mlLocationClient.isStarted())
			mlLocationClient.requestLocation();
		else
			Log.d("LocSDK3", "locClient is null or not started");
		MapController mMapController = mMapView.getController();
		mMapController.setZoom(18);// 設定地圖zoom級別
		mMapController.enableClick(true);//

	}

其中用到了百度定位SDK, 所以需要在application標籤中宣告service元件,每個app擁有自己單獨的定位service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>

第七步:自定義位置變化監聽器,重寫其中的方法,在位置變化時實現定位功能
private class MyLocationListener implements BDLocationListener {

		private LocationData locData;

		@Override
		public void onReceiveLocation(BDLocation location) {
			latitude = location.getLatitude();
			longitude = location.getLongitude();

			MyLocationOverlay myLocationOverlay = new MyLocationOverlay(
					mMapView);
			if (locData == null) {
				locData = new LocationData();
				locData.latitude = latitude;
				locData.longitude = longitude;
				locData.direction = 2.0f;
			}
			myLocationOverlay.setData(locData);
			mMapView.getOverlays().add(myLocationOverlay);
			mMapView.refresh();
			mMapView.getController().animateTo(
					new GeoPoint((int) (locData.latitude * 1e6),
							(int) (locData.longitude * 1e6)));
		}

		@Override
		public void onReceivePoi(BDLocation location) {
		}

	}

第八步:重寫以下方法,管理API
@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		mMapView.onResume();
		if (manager != null) {
			manager.start();
		}
		super.onResume();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub

		mMapView.onPause();
		if (manager != null) {
			manager.stop();
		}
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mMapView.destroy();
		if (manager != null) {
			manager.destroy();
			manager = null;
		}

		if (mlLocationClient != null && mlLocationClient.isStarted()) {
			mlLocationClient.stop();
			mlLocationClient = null;
		}

		super.onDestroy();
	}


到這裡,整個過程基本就結束了,小小例子一個,希望可以幫助大家更好的使用百度地圖API

轉載請註明出處;http://blog.csdn.net/csr_yang/article/details/24502031

douban.com/note/362233142/
douban.com/note/362233170/
douban.com/note/362233192/
douban.com/note/362233230/
douban.com/note/362233280/
douban.com/note/362233320/
douban.com/note/362233377/
douban.com/note/362233418/
douban.com/note/362233449/
douban.com/note/362233591/
douban.com/note/362233627/
douban.com/note/362233641/
douban.com/note/362233666/
douban.com/note/362233716/
douban.com/note/362233749/
douban.com/note/362233767/
douban.com/note/362233802/
douban.com/note/362233829/
douban.com/note/362233914/
douban.com/note/362233979/
douban.com/note/362234006/
douban.com/note/362234059/
douban.com/note/362234084/
douban.com/note/362234103/
douban.com/note/362234112/
douban.com/note/362234131/
douban.com/note/362234187/
douban.com/note/362234234/
douban.com/note/362234244/
douban.com/note/362234278/
douban.com/note/362234309/
douban.com/note/362234314/
douban.com/note/362234345/
douban.com/note/362234387/
douban.com/note/362234401/
douban.com/note/361623293/
douban.com/note/362233116/
douban.com/note/362233163/
douban.com/note/362233183/
douban.com/note/362233222/
douban.com/note/362233251/
douban.com/note/362233303/
douban.com/note/362233353/
douban.com/note/362233381/
douban.com/note/362233436/
douban.com/note/362233578/
douban.com/note/362233616/
douban.com/note/362233633/
douban.com/note/362233671/
douban.com/note/362233722/
douban.com/note/362233756/
douban.com/note/362233784/
douban.com/note/362233815/
douban.com/note/362233830/
douban.com/note/362233882/
douban.com/note/362233897/
douban.com/note/362233949/
douban.com/note/362233999/
douban.com/note/362234030/
douban.com/note/362234127/
douban.com/note/362234146/
douban.com/note/362234197/
douban.com/note/362234209/
douban.com/note/362234268/
douban.com/note/362234324/
douban.com/note/362234330/
douban.com/note/362234393/
douban.com/note/362234421/


相關推薦

地圖API應用——利用定位SDK地圖SDK進行定位顯示當前位置

在專案開發中,尤其是O2O或者體育運動類專案的APP開發過程中,經常會出現利用GPS定位獲取當前位置並在地圖上顯示的情況,下面就來結合實際的例子來簡要介紹一下如何實現這個功能,使用的是百度地圖最新的地圖SDK(baidumapapi_v2_4_1)和定位SDK(locSDK

地圖api獲取當前使用者地理位置-瀏覽器定位

<script> var x=document.getElementById("demo"); function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPos

地圖地址解析(Geocoding API)

1.什麼是Geocoding? Geocoding API 是一類簡單的HTTP介面,用於提供從地址到經緯度座標或者從經緯度座標到地址的轉換服務,使用者可以使用C# 、C++、Java等開發語言傳送HTTP請求且接收JSON、XML的返回資料。 2.功能介紹 Geocoding

基於ASP.NET,AJAX,Sqlserver地圖API開發的西南科技大學校園地圖

目錄 Login.aspx: Login.aspx.cs: Register.aspx Register.aspx.cs: isUserNameExist.aspx.cs: Map.aspx: Map.aspx.cs: Web.config: 執行結果部分截圖:

地圖api--拖動地圖顯示經緯度與顯示當前位置

一.首先引入所申請的ak金鑰<script type="text/javascript" src="http://api.map.baidu.com/api?ak=PlhFWpA02aoURjAOpnWcRGqw7AI8EEyO&v=2.0&services=false"><

離線API地圖呼叫示例原始碼功能

一、概述 百度離線API地圖呼叫示例原始碼提供了道路交通圖、衛星地圖和三維城市效果圖的離線載入功能,向量標註功能、向量編輯功能和測量功能等,旨在為使用者提供一個可以快速載入離線地圖或線上地圖的解決

突然發現API越來越好用了,簡單使用API精準定位IP地址。附Python程式碼

2016年11月27日08:13:13 API服務地址: http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 使用方法: 第一步,申請金鑰(AK) ,作為訪問服務的依據; 第二步,拼寫傳送HTTP/HTTPS

iOS開發免費API使用案例(身份證號獲取地址、手機號查歸屬地、MD5解密等)

先附上百度APIStore的地址:APIStore 下面是其中幾個使用案例:考慮到我的部落格看的人比較少,裡面的apikey就不隱藏了。萬一有一天如果apikey使用頻率過高被封了,請自行去百度APIStore申請 (身份證號碼這倆,不太嚴謹,不能判斷出生日期是否正確,只能

地圖API中使用ajax實現點選地圖生成標註並儲存到資料庫

在最近的專案中要使用到百度地圖的api對於地圖處理,要實現的功能是在地圖上每一次點選都會生成一個標註,並把標註位置的座標儲存到資料庫中。搜了很多地方都沒有找到,就打算自己寫寫,沒想到最後發現也不是很難。話不多說,直接上程式碼。 首先是地圖處理的map.html

音樂API抓取

vim 後來 ews new ble -a getch 電臺 威爾 百度音樂API抓取 前段時間做了一個本地音樂的播放器 github地址,想實現在線播放的功能,於是到處尋找API,很遺憾,不是歌曲不全就是質量不高。在網上發現這麽一個APIMRASONG博客,有&ld

谷歌地圖 API 開發獲取坐標以及街道詳情

gpo 窗口 top ces site 1.0 char 回調 .sh 自己的項目中有獲取當前點擊的坐標經緯度或者獲取當前街道的信息的需求。估計這個對於新手來說,還是比較麻煩的,因為從官網上找這個也並不是很好找,要找好久的,運氣好的可能會一下子找到。 獻上自己寫的測試案例。

調用翻譯API接口功能

bytes on() tar vip IT sdn replace method odin public string appid = "自己的APPID"; public string q = "要翻譯的文本"; public st

Go語言使用翻譯api

Go語言使用百度翻譯api 之前做過一個使用百度翻譯api的工具,這個工具用於使用者的自動翻譯功能,是使用C#呼叫百度翻譯api介面,既然在學習Go語言,那必然也是要使用Go來玩耍一番。這裡我是這麼安排的,使用go做一個web服務,介面就用H5,然後使用用批處理寫個指令碼,開啟go程式,然後開啟瀏覽器(谷歌

Aip人臉識別python程式碼

用python來做人臉識別程式碼量少 思路清晰, 在使用之前我們需要在我們的配置的編譯器中通過pip       install baidu-aip  即可 from aip import AipFace 就可以開始使用api了 我們第一

簡略的地圖API應用

應用百度地圖的API進行地圖的顯示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8

python3使用翻譯API實現自動翻譯

百度翻譯開放平臺 註冊登入,建立個人服務 檢視技術文件 介面引數配置 例項應用 翻譯一個單詞 翻譯一句話 翻譯一段話 註冊登入,建立個人服務 在此不詳

Python呼叫翻譯api

# _*_ coding: utf-8 _*_ import requests import string import time import hashlib import json #init api_url = "http://api.fanyi.baidu.com/api/tran

使用分享api實現網頁分享功能

百度官方文件:http://share.baidu.com/code/advance#toid 首先先引入外部檔案: with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('sc

翻譯API介面呼叫

#encodeing= utf-8 from datetime import datetime import httplib import md5 import urllib import random import json import sys reload(sys) sys.setdefaul

使用翻譯api支持中轉英,中簡轉中繁等等

i++ input urldecode NPU trace 輸出 相關數 append lang 一、在寫代碼之前先在在百度翻譯平臺中,申請APP_ID   申請地址連接:http://api.fanyi.baidu.com/api/trans/product/index