之前用过百度地图开发过一些项目。这周不怎么忙,准备把百度地图好好的学习一遍。
开发环境:Ubuntu16.04 + android studio 2.0
第一篇:项目的搭建和配置。
打开百度地图开放平台,需要先在平台上创建一个应用:
http://lbsyun.baidu.com/apiconsole/key/create
点击提交之后会生成一个对应的AK
然后将需要的开发包下载下来,下载地址
那么接下来就开始创建项目,导入所需的开发包,在这里新建的项目名称和项目的包名,必须和你在申请AK时的包名和项目名称一致。
新建完项目之后,导入依赖包和一些so库文件
将下载来的开发包复制到libs目录下
在build.gradle中添加
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
Add as Libirary
那么接下来就显示一下基本的地图。
首先在AndroidManifest中添加开发密钥、所需权限等信息
1、添加开发密钥:
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
2、添加需要的一些权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
完整的AndroidManifest文件如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zwb.mybdmapdemo">
<!--百度地图所需的权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<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>
<!--添加开发者密钥-->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者申请的Key" />
</application>
</manifest>
3、在布局资源文件中添加MapView控件
<com.baidu.mapapi.map.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true">
4、在应用程序创建时初始化 SDK引用的Context 全局变量
在Activity中的setContentView之前初始化SDK
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
完整的Activity代码
package com.zwb.mybdmapdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
public class HelloMapActivity extends AppCompatActivity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_hello_map);
initViews();
}
/**
* 初始化控件的方法
*/
private void initViews() {
//获取地体控件的引用
mapView = ((MapView) findViewById(R.id.mapView));
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mapView.onPause();
}
}
项目运行效果图
百度地图显示的类型:
首先你要获取到baiduMap对象
baiduMap = mapView.getMap();
1、普通地图
2、卫星地图baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
3、空白地图baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
4、显示交通图baiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
5、显示城市热力图baiduMap.setTrafficEnabled(true);
baiduMap.setBaiduHeatMapEnabled(true);
在地图上显示标注并设置可拖拽:
标注效果图:* 对地图上标注的操作方法 */ private void initBZ() { //定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.mipmap.icon_gcoding); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap) .zIndex(9) .draggable(true); //在地图上添加Marker,并显示 Marker marker = (Marker) (baiduMap.addOverlay(option)); //调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听 baiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() { public void onMarkerDrag(Marker marker) { //拖拽中 Log.d("TAG" , "正在拖拽"); } public void onMarkerDragEnd(Marker marker) { //拖拽结束 Log.d("TAG" , "拖拽结束"); } public void onMarkerDragStart(Marker marker) { //开始拖拽 Log.d("TAG" , "开始拖拽"); } }); }