Android 高德地圖入門詳解
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

效果圖:

這裡寫圖片描述

教程:

由於官網的教程不是很詳細,相信很多小白們有點看不懂,比如我,看的都是一臉懵逼,相比較而言,百度地圖的教程要更詳細一點!推薦新手先拿百度教程來練練手,熟悉下地圖的業務邏輯,地圖類邏輯都差不多,好了不多說,開始正文。

首先,去高德官網下載所需的地相簿並申請key,附:http://lbs.amap.com/

下載的jar包匯入到as裡面,然後配置清單檔案:

許可權:
<!--地圖包、搜尋包需要的基礎許可權-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--定位包、導航包需要的額外許可權(注:基礎許可權也需要)-->
<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_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--服務必須有!否則定位時候報錯誤,錯誤程式碼10-->
<service android:name="com.amap.api.location.APSService"></service>
<meta-data android:name="com.amap.api.v2.apikey" android:value="這裡是你對應的key">
</meta-data>
</application>

在xml佈局檔案中引用地圖控制元件(注意!這裡的引入的MapView路徑是“com.amap.api.maps2d.MapView”,官網地圖那裡應該是3d包裡的是“com.amap.api.maps.MapView”,如果下載sdk裡面不包含3d檢視的可能應用會報錯!!!):

    <com.amap.api.maps2d.MapView
android:id="@ id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />

在activity中引用:

        //獲取地圖控制元件引用
mMapView = (MapView) findViewById(R.id.map);
//在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),實現地圖生命週期管理
mMapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap =  mMapView.getMap();
//UiSettings 主要是對地圖上的控制元件的管理,比如指南針、logo位置(不能隱藏).....
UiSettings settings =  aMap.getUiSettings();
//設定了定位的監聽,這裡要實現LocationSource介面
aMap.setLocationSource(this);
// 是否顯示定位按鈕(據我所知不能更改,知道的麻煩告我一聲)
settings.setMyLocationButtonEnabled(true);
//新增指南針
//settings.setCompassEnabled(true);
//aMap.getCameraPosition(); 方法可以獲取地圖的旋轉角度
//管理縮放控制元件
settings.setZoomControlsEnabled(true);
//設定logo位置,左下,底部居中,右下(隱藏logo:settings.setLogoLeftMargin(9000))
settings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);
//設定顯示地圖的預設比例尺
settings.setScaleControlsEnabled(true);
//每畫素代表幾米
//float scale = aMap.getScalePerPixel();
aMap.setMyLocationEnabled(true);//顯示定位層並且可以觸發定位,預設是flase
}
//開始定位
location();

location()方法裡面主要就是設定一下定位的引數:

        //初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//設定定位回撥監聽
mLocationClient.setLocationListener(this);
//初始化定位引數
mLocationOption = new AMapLocationClientOption();
//設定定位模式為Hight_Accuracy高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅裝置模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//設定是否返回地址資訊(預設返回地址資訊)
mLocationOption.setNeedAddress(true);
//設定是否只定位一次,預設為false
mLocationOption.setOnceLocation(false);
//設定是否強制重新整理WIFI,預設為強制重新整理
mLocationOption.setWifiActiveScan(true);
//設定是否允許模擬位置,預設為false,不允許模擬位置
mLocationOption.setMockEnable(false);
//設定定位間隔,單位毫秒,預設為2000ms
mLocationOption.setInterval(2000);
//給定位客戶端物件設定定位引數
mLocationClient.setLocationOption(mLocationOption);
//啟動定位
mLocationClient.startLocation();

另外當前activity需要實現LocationSource與AMapLocationListener,並實現3個方法:

     /**
* 定位成功後回撥函式
*/
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//可在其中解析amapLocation獲取相應內容。
aMapLocation.getLocationType();//獲取當前定位結果來源,如網路定位結果,詳見定位型別表
lat = aMapLocation.getLatitude();//獲取緯度
lon = aMapLocation.getLongitude();//獲取經度
aMapLocation.getAccuracy();//獲取精度資訊
aMapLocation.getAddress();//地址,如果option中設定isNeedAddress為false,則沒有此結果,網路定位結果中會有地址資訊,GPS定位不返回地址資訊。
aMapLocation.getCountry();//國家資訊
aMapLocation.getProvince();//省資訊
aMapLocation.getCity();//城市資訊
aMapLocation.getDistrict();//城區資訊
aMapLocation.getStreet();//街道資訊
aMapLocation.getStreetNum();//街道門牌號資訊
aMapLocation.getCityCode();//城市編碼
aMapLocation.getAdCode();//地區編碼
aMapLocation.getAoiName();//獲取當前定位點的AOI資訊
//獲取定位時間
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);
// 如果不設定標誌位,此時再拖動地圖時,它會不斷將地圖移動到當前的位置
if (isFirstLoc) {
//設定縮放級別(縮放級別為4-20級)
aMap.moveCamera(CameraUpdateFactory.zoomTo(zoomlevel));
//將地圖移動到定位點
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
//點選定位按鈕 能夠將地圖的中心移動到定位點
mListener.onLocationChanged(aMapLocation);
//獲取定位資訊
StringBuffer buffer = new StringBuffer();
buffer.append(aMapLocation.getCountry()   ""
aMapLocation.getProvince()   ""
aMapLocation.getCity()   ""
aMapLocation.getProvince()   ""
aMapLocation.getDistrict()   ""
aMapLocation.getStreet()   ""
aMapLocation.getStreetNum());
Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
isFirstLoc = false;
}
}else {
//定位失敗時,可通過ErrCode(錯誤碼)資訊來確定失敗的原因,errInfo是錯誤資訊,詳見錯誤碼錶。
Log.e("地圖錯誤","定位失敗, 錯誤碼:"   aMapLocation.getErrorCode()   ", 錯誤資訊:"
aMapLocation.getErrorInfo());
}
}
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
}
@Override
public void deactivate() {
mListener = null;
}

然後在activity的生命週期方法裡新增地圖相應的宣告週期方法就行了:

    @Override
protected void onDestroy() {
super.onDestroy();
//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理
mMapView.onDestroy();
mLocationClient.stopLocation();//停止定位
mLocationClient.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();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),實現地圖生命週期管理
mMapView.onSaveInstanceState(outState);
}

如果想要自定義定位功能,只需要呼叫aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(緯度,經度),縮放級別))就可以了(這些在下面的原始碼裡面寫的很清楚)(注:縮放級別為4-20級

這裡寫圖片描述

原始碼下載:點選免費下載

相關文章

程式語言 最新文章