1-获取API Key
SHA1:的获取方法
在 cmd中 输入 cd.android(android小写)
再输入 :keytool -list -v -keystore debug.keystore
口令默认为android (注意是小写)没有界面显示直接写完即可回车
找到SHA1
配置 清单文件
在application节点里添加ak:
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="drTVbLu8KFDga4DMv9rTyBBiqz786zz1" />
引入布局(地图控件)
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
BaseAcitivity.java ## 基类 ##
package com.huida.baidumap;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.UiSettings;
import com.baidu.mapapi.model.LatLng;
import android.app.Activity;
import android.os.Bundle;
public abstract class BaseAcitivity extends Activity {
public MapView mMapView;
public BaiduMap map;
public MapStatusUpdate mapstatus;
public LatLng HDlocation=new LatLng(?, ?);
public LatLng KSlocation=new LatLng(?, ?);
public LatLng YDlocation=new LatLng(?, ?);
public LatLng HCZlocation=new LatLng(?, ?);
@Override
protected final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
mMapView = (MapView) findViewById(R.id.bmapView);
// 1. 隐藏缩放按钮、比例尺
// mMapView.showScaleControl(false);
// mMapView.showZoomControls(false);
// 2. 获取获取最小(3)、最大缩放级别(20)
map = mMapView.getMap();
float maxZoomLevel = map.getMaxZoomLevel();
float minZoomLevel = map.getMinZoomLevel();
// 3. 设置地图中心点
//(?, ?)坐标点,自己添加
MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newLatLng(new LatLng(?, ?));
map.setMapStatus(statusUpdate);
// 4. 设置地图缩放为15
MapStatusUpdate zoomTo = MapStatusUpdateFactory.zoomTo(15);
map.setMapStatus(zoomTo);
// 5. 更新地图状态
// 1) 缩小
// 2) 放大
// 3) 旋转(0 ~ 360),每次在原来的基础上再旋转30度
// 4) 俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
// 5) 移动
// 6. 获取地图Ui控制器:隐藏指南针
UiSettings uiSettings = map.getUiSettings();
uiSettings.setCompassEnabled(false);
init();
}
/**
* 用于子类的初始化
*/
public abstract void init();
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
}
DemoListActivity.java
package com.huida.baidumap;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class DemoListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ClassAndName[] items={new ClassAndName(MainActivity.class, "HelleBaidumap")
,new ClassAndName(MapLayerActivity.class, "地图图层")
,new ClassAndName(CircleOverlayAcitivity.class, "圆形覆盖物")
,new ClassAndName(TextOverlayActivity.class, "文字覆盖物")
,new ClassAndName(MarkerActivity.class, "标记覆盖物")
,new ClassAndName(SearchInBound.class, "在范围内搜索")
,new ClassAndName(SearchInCityActivity.class, "在城市内搜索")
,new ClassAndName(SearchNearbyActivtiy.class, "在周边搜索")};
ArrayAdapter<ClassAndName> adapter
= new ArrayAdapter<ClassAndName>(DemoListActivity.this, android.R.layout.simple_list_item_1, items);
setListAdapter(adapter);
}
/**
* listview 条目的点击事件
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//点击条目跳转到对应的activity页面
ClassAndName item = (ClassAndName) l.getItemAtPosition(position);
Intent intent = new Intent(DemoListActivity.this,item.clazz);
startActivity(intent);
}
class ClassAndName{
public Class clazz;
public String name;
public ClassAndName(Class clazz,String name){
this.clazz=clazz;
this.name=name;
}
@Override
public String toString() {
return name;
}
}
}
PoiSearchBaseActivity.java## 基类 ##
package com.huida.baidumap;
import android.widget.Toast;
import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
public class PoiSearchBaseActivity extends BaseAcitivity {
public PoiSearch poiSearch;
private PoiOverlay poiOverlay;
@Override
public void init() {
// 兴趣点搜索对象
poiSearch = PoiSearch.newInstance();
// 设置搜索的监听
poiSearch.setOnGetPoiSearchResultListener(new MyListener());
}
class MyListener implements OnGetPoiSearchResultListener{
/**
* 详情的搜索结果
*/
@Override
public void onGetPoiDetailResult(PoiDetailResult result) {
if (result==null & result.error != SearchResult.ERRORNO.NO_ERROR ) {
Toast.makeText(getApplicationContext(), "没有搜索到结果", 0).show();
return;
}
String telephone = result.getTelephone();
Toast.makeText(getApplicationContext(), telephone, 0).show();
}
@Override
public void onGetPoiIndoorResult(PoiIndoorResult arg0) {
}
/**
* 兴趣点搜索的结果的回调
*/
@Override
public void onGetPoiResult(PoiResult result) {
if (result==null & result.error != SearchResult.ERRORNO.NO_ERROR ) {
Toast.makeText(getApplicationContext(), "没有搜索到结果", 0).show();
return;
}
//创建兴趣点覆盖物对象
if (poiOverlay==null) {
poiOverlay = new PoiOverlay(map){
@Override
public boolean onPoiClick(int i) {
PoiResult poiResult = this.getPoiResult();
PoiInfo info = poiResult.getAllPoi().get(i);
Toast.makeText(getApplicationContext(), info.name+","+info.address, 0).show();
//搜索详情信息
PoiDetailSearchOption option = new PoiDetailSearchOption();
option.poiUid(info.uid);
poiSearch.searchPoiDetail(option);
return true;
}
};
}
//将搜索到的数据设置给兴趣点对象
poiOverlay.setData(result);
//添加到地图上
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
//设置覆盖物点击事件
map.setOnMarkerClickListener(poiOverlay);
}
}
}
MyApplication.java
package com.huida.baidumap;
import com.baidu.mapapi.SDKInitializer;
import android.app.Application;
public class MyApplication extends Application {
@Override
public void onCreate() {
//初始化百度地图的sdk
SDKInitializer.initialize(getApplicationContext());
}
}
下面是图层及覆盖物的demo
MainActivity.java
对应–HelleBaidumap
package com.huida.baidumap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatus.Builder;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.model.LatLng;
import android.view.KeyEvent;
public class MainActivity extends BaseAcitivity {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_1:// 缩小
mapstatus = MapStatusUpdateFactory.zoomOut();
break;
case KeyEvent.KEYCODE_2:// 放大
mapstatus = MapStatusUpdateFactory.zoomIn();
break;
case KeyEvent.KEYCODE_3:// 旋转(0 ~ 360),每次在原来的基础上再旋转30度
Builder builder = new MapStatus.Builder();
//设置状态的参数
float rotate = map.getMapStatus().rotate;//当前的角度
builder.rotate(rotate+30);
MapStatus status = builder.build();
mapstatus= MapStatusUpdateFactory.newMapStatus(status);
break;
case KeyEvent.KEYCODE_4:// 俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
builder = new MapStatus.Builder();
//设置状态的参数
float overlook = map.getMapStatus().overlook;//当前的俯仰的角度
builder.overlook(overlook-5);
status = builder.build();
mapstatus= MapStatusUpdateFactory.newMapStatus(status);
break;
case KeyEvent.KEYCODE_5:// 移动(从中心点移动到别的坐标)
mapstatus = MapStatusUpdateFactory
.newLatLng(new LatLng(39.913711,119.546324));
map.animateMapStatus(mapstatus, 500);
return super.onKeyDown(keyCode, event);
default:
break;
}
map.setMapStatus(mapstatus);
return super.onKeyDown(keyCode, event);
}
@Override
public void init() {
}
}
----------
MapLayerActivity.java
对应– “地图图层” 地图图层 普通图层 卫星图 交通图
package com.huida.baidumap;
import com.baidu.mapapi.map.BaiduMap;
import android.view.KeyEvent;
/**
* 地图图层 普通图层 卫星图 交通图
*
* @author Administrator
*
*/
public class MapLayerActivity extends BaseAcitivity {
@Override
public void init() {
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_1:// 普通图层
map.setMapType(BaiduMap.MAP_TYPE_NORMAL);
map.setTrafficEnabled(false);//不显示交通图
break;
case KeyEvent.KEYCODE_2:// 卫星图
map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
map.setTrafficEnabled(false);
break;
case KeyEvent.KEYCODE_3:// 交通图
map.setTrafficEnabled(true);
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
}
CircleOverlayAcitivity.java
对应—”圆形覆盖物”
package com.huida.baidumap;
import android.graphics.Color;
import com.baidu.mapapi.map.CircleOptions;
import com.baidu.mapapi.map.Stroke;
/**
* 圆形覆盖物
*
*/
public class CircleOverlayAcitivity extends BaseAcitivity {
@Override
public void init() {
//创建圆形覆盖物对象
CircleOptions options = new CircleOptions();
//设置参数(圆心位置、半径 、圆形线条的粗细和颜色、圆形的填充颜色)
options.center(HDlocation);
options.radius(20);
options.stroke(new Stroke(5, Color.RED));//第一参数是线条的粗细,第二个参数是颜色
options.fillColor(Color.GREEN);
//将覆盖物添加到地图上
map.addOverlay(options);
}
}
TextOverlayActivity.java
对应—”文字覆盖物”
package com.huida.baidumap;
import android.graphics.Color;
import com.baidu.mapapi.map.TextOptions;
public class TextOverlayActivity extends BaseAcitivity {
@Override
public void init() {
// 创建覆盖物对象
TextOptions options = new TextOptions();
//设置参数,位置、内容、文字颜色大小、文字背景
options.position(HDlocation);
options.text("宾馆");
options.fontColor(Color.BLUE);
options.fontSize(30);
options.bgColor(Color.GRAY);
options.rotate(30);
//将覆盖物添加到地图上
map.addOverlay(options);
}
}
MarkerActivity.java, “标记覆盖物”
package com.huida.baidumap;
import android.view.View;
import android.widget.TextView;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.MapViewLayoutParams.Builder;
import com.baidu.mapapi.map.MapViewLayoutParams.ELayoutMode;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
public class MarkerActivity extends BaseAcitivity {
private View view;
private TextView tv;
@Override
public void init() {
// 创建覆盖物对象
MarkerOptions options = new MarkerOptions();
// 参数(位置、标题、图标、是否可拖拽)
options.position(HDlocation);// 位置
BitmapDescriptor icon = new BitmapDescriptorFactory()
.fromResource(R.drawable.icon_eat);
options.icon(icon);// 图标
options.title("地点");// 标题
options.draggable(true);// 可以拖拽
// 添加到地图上
map.addOverlay(options);
// 创建覆盖物对象
options = new MarkerOptions();
// 参数(位置、标题、图标、是否可拖拽)
options.position(new LatLng(HDlocation.latitude + 0.001,
HDlocation.longitude));// 位置
icon = new BitmapDescriptorFactory().fromResource(R.drawable.icon_eat);
options.icon(icon);// 图标
options.title("北");// 标题
options.draggable(true);// 可以拖拽
// 添加到地图上
map.addOverlay(options);
// 创建覆盖物对象
options = new MarkerOptions();
// 参数(位置、标题、图标、是否可拖拽)
options.position(new LatLng(HDlocation.latitude,
HDlocation.longitude+0.001));// 位置
icon = new BitmapDescriptorFactory().fromResource(R.drawable.icon_eat);
options.icon(icon);// 图标
options.title("东");// 标题
options.draggable(true);// 可以拖拽
// 添加到地图上
map.addOverlay(options);
//设置覆盖物的点击事件
map.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
//悬浮窗的参数信息
MapViewLayoutParams params = getParams(marker);
if (view==null) {
// 弹出一个悬浮窗,显示当前覆盖物的信息等
view = View.inflate(MarkerActivity.this, R.layout.pop, null);
tv = (TextView) view.findViewById(R.id.tv);
mMapView.addView(view, params);
}else {
//复用
mMapView.updateViewLayout(view, params);
}
tv.setText(marker.getTitle());
return true;
}
});
//设置标记物的拖拽的监听
map.setOnMarkerDragListener(new OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
//获取最新的参数,更新
MapViewLayoutParams params = getParams(marker);
mMapView.updateViewLayout(view, params);
}
@Override
public void onMarkerDragEnd(Marker marker) {
//获取最新的参数,更新
MapViewLayoutParams params = getParams(marker);
mMapView.updateViewLayout(view, params);
}
@Override
public void onMarkerDrag(Marker marker) {
//获取最新的参数,更新
MapViewLayoutParams params = getParams(marker);
mMapView.updateViewLayout(view, params);
}
});
}
/**
* 获取参数
* @param marker
*/
public MapViewLayoutParams getParams(Marker marker){
Builder builder = new MapViewLayoutParams.Builder();
builder.layoutMode(ELayoutMode.mapMode);//设置坐标模式为地图经纬度模式
builder.position(marker.getPosition());//位置
builder.yOffset(-30);
MapViewLayoutParams params = builder.build();
return params;
}
}
SearchInBound.java, “在范围内搜索”
package com.huida.baidumap;
import android.widget.Toast;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.model.LatLngBounds.Builder;
import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
/**
* 在范围内搜索
* @author Administrator
*
*/
public class SearchInBound extends PoiSearchBaseActivity {
@Override
public void init() {
super.init();
poiSearch.searchInBound(getSearchOption());
}
/**
* 获取搜索参数的方法
*/
private PoiBoundSearchOption getSearchOption() {
PoiBoundSearchOption option = new PoiBoundSearchOption();
Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(40.048459,116.302072));//西南
builder.include(new LatLng(40.050675,116.304317));//东北
LatLngBounds bounds = builder.build();
//搜索范围
option.bound(bounds);
//搜索关键字
option.keyword("加油站");
return option;
}
}
SearchInCityActivity.java, “在城市内搜索”
package com.huida.baidumap;
import android.R.integer;
import android.view.KeyEvent;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
public class SearchInCityActivity extends PoiSearchBaseActivity {
private int pageNum=0;//页数
@Override
public void init() {
super.init();
poiSearch.searchInCity(getSearchOption());
}
private PoiCitySearchOption getSearchOption() {
PoiCitySearchOption option = new PoiCitySearchOption();
option.city("北京");
option.keyword("加油站");
option.pageCapacity(5);//一页显示的数据量
option.pageNum(pageNum);
return option;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_1) {
//切换下一页
pageNum++;
poiSearch.searchInCity(getSearchOption());
}
return super.onKeyDown(keyCode, event);
}
}
SearchNearbyActivtiy.java, “在周边搜索”
package com.huida.baidumap;
import com.baidu.mapapi.search.poi.PoiNearbySearchOption;
public class SearchNearbyActivtiy extends PoiSearchBaseActivity {
@Override
public void init() {
super.init();
poiSearch.searchNearby(getSearchOption());
}
private PoiNearbySearchOption getSearchOption() {
PoiNearbySearchOption option = new PoiNearbySearchOption();
option.location(HDlocation);//搜索中心点
option.radius(500);//搜索半径 单位是米
option.keyword("银行");
return option;
}
}
配置清单文件
<activity
android:name="com.huida.baidumap.MainActivity"
android:label="@string/app_name" >
</activity>
<activity android:name="com.huida.baidumap.BaseAcitivity"></activity>
<activity android:name="com.huida.baidumap.DemoListActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.huida.baidumap.MapLayerActivity"></activity>
<activity android:name="com.huida.baidumap.CircleOverlayAcitivity"></activity>
<activity android:name="com.huida.baidumap.TextOverlayActivity"></activity>
<activity android:name="com.huida.baidumap.MarkerActivity"></activity>
<activity android:name="com.huida.baidumap.SearchInBound"></activity>
<activity android:name="com.huida.baidumap.SearchInCityActivity"></activity>
<activity android:name="com.huida.baidumap.SearchNearbyActivtiy"></activity>